php include generated png in pdf via fpdf

江枫思渺然 提交于 2019-12-08 02:53:59

问题


I am trying to generate a PDF with an image that is also generated by php. Sounds simple enough and I am sure I'm just screwing up the header but I can't seem to find a solution here.

first I generate a PDF:

define('FPDF_FONTPATH','fonts/');
require('scpt/fpdf.php');

class PDF extends FPDF {}
$pdf = new FPDF('P','in',array(8.5,11));
$pdf->SetAutoPageBreak(false,0);

$pdf->SetTextColor(0,0,0);
$pdf->SetDrawColor(0,0,0);
$pdf->SetFont('Helvetica','',12);

$pdf->Image('label.php?imgid=17',0,0,0,0,'PNG');

$pdf->Output('label.pdf','D');

then I generate the PNG in label.php:

if(isset($_GET["imgid"])) {
 header("Content-Type: image/png");
 $im = @imagecreate(110, 20)
     or die("Cannot Initialize new GD image stream");
 $background_color = imagecolorallocate($im, 0, 0, 0);
 $text_color = imagecolorallocate($im, 233, 14, 91);
 imagestring($im, 1, 5, 5,  "A Simple Text String", $text_color);
 imagepng($im);
 imagedestroy($im);
}

This will output: FPDF error: Not a PNG file:....

calling label.php?imgid=17 in the browser however will show me the image just fine...

What am I missing?

EDIT

In document: Example

// Insert a logo in the top-left corner at 300 dpi
$pdf->Image('logo.png',10,10,-300);
// Insert a dynamic image from a URL
$pdf->Image('http://chart.googleapis.com/chart?cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World',60,30,90,0,'PNG');

so it SHOULD be possible to include a dynamically generated image without saving it first?!

EDIT #2

I made it work with the library mem_image but the problem remains that this should not throw an error IMO?! So I leave this question open to see if there is indeed something wrong with my script of this turning out to be a bug.


回答1:


View allow_url_fopen directive

http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen




回答2:


You almost had it, you're missing only a couple things. First you need the full server address in the URL for your Image() call, so instead of

$pdf->Image('label.php?imgid=17',0,0,0,0,'PNG');

You need:

$pdf->Image('http://www.yourserver.com/label.php?imgid=17',0,0,0,0,'PNG');

That will eliminate the FPDF error you were encountering. Then to get FPDF to render your output correctly, you need to add a call to AddPage(), so your PDF generation script would become:

require('scpt/fpdf.php');

$pdf = new FPDF('P','in',array(8.5,11));
$pdf->AddPage();
$pdf->Image('http://www.yourserver.com/label.php?imgid=17',0,0,0,0,'PNG');

$pdf->Output('label.pdf','D');

Of course you don't need the SetTextColor(), SetFont(), etc if you're only including the single image. You didn't need the custom class definition either (I removed the unneeded lines).

Don't forget to substitute www.yourserver.com for the appropriate domain and path for your script.




回答3:


The argument to the Image function needs to be a file, not a URL or another script. Since you already have your label script, the easiest work around would be to download the image to a temp location and then call $pdf->Image() with that temporary file.




回答4:


This problem occurred With your file name,Make sure your passing file name is valid

function _parsepngstream($f, $file)
{
// Check signature
if($this->_readstream($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10))
    $this->Error('Not a PNG file: '.$file);

...
}



回答5:


You need to do only changes that

require('fpdf.php');

and do the

$pdf->Image('http://www.yourserver.com/label.php?imgid=17',0,0,0,0,'PNG');

and run your code...




回答6:


First, try to check your url with this code

$handle = fopen("http://www.yourserver.com/label.php?imgid=17", "rb");

print_r(fread($handle, 8192));

you with see what the contain in your url

**) make sure your url is not redirect to the login page




回答7:


much more easy, only put .png in the final of dinamic chain and its all

example:

$pdf->Image('http://www.yourserver.com/label.php?   imgid=17.png',0,0,0,0,'PNG');

or

$pdf->Image('../label.php?imgid=17.png',0,0,0,0,'PNG');

the mime type is not recognized in the url why does not appear png, if it's a stupid mistake but it is proven, google does the same by adding the extension with the url & PNG



来源:https://stackoverflow.com/questions/11987894/php-include-generated-png-in-pdf-via-fpdf

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!