php включает сгенерированный png в pdf через fpdf

Я пытаюсь создать PDF с изображением, которое также генерируется php. Звучит достаточно просто, и я уверен, что я просто напортачиваю заголовок, но я не могу найти решение здесь.

сначала я создаю 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'); 

то я генерирую PNG в 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); } 

Это выведет: FPDF error: Not a PNG file:....

вызов label.php? imgid = 17 в браузере, однако покажет мне изображение просто отлично …

Что мне не хватает?

РЕДАКТИРОВАТЬ

В документе: Пример

 // 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'); 

так что ДОЛЖНО быть в состоянии включить динамически сгенерированное изображение, не сохраняя его в первую очередь ?!

EDIT # 2

Я сделал это с библиотекой mem_image, но проблема остается в том, что это не должно вызывать ошибку IMO ?! Поэтому я оставляю этот вопрос открытым, чтобы увидеть, действительно ли что-то не так с моим сценарием, что это ошибка.

Просмотреть директиву allow_url_fopen

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

У вас почти было это, у вас пропало всего пару вещей. Сначала вам нужен полный адрес сервера в URL-адресе для вашего вызова Image (), поэтому вместо

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

Тебе нужно:

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

Это устранит ошибку FPDF, с которой вы столкнулись. Затем, чтобы FPDF правильно отображал ваш результат, вам необходимо добавить вызов AddPage (), поэтому ваш сценарий генерации PDF-файлов станет следующим:

 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'); 

Конечно, вам не нужны SetTextColor (), SetFont () и т. Д., Если вы включаете только одно изображение. Вам также не понадобилось определение пользовательского класса (я удалил ненужные строки).

Не забудьте заменить www.yourserver.com на соответствующий домен и путь для вашего скрипта.

Аргументом функции Image должен быть файл, а не URL-адрес или другой скрипт. Поскольку у вас уже есть свой сценарий ярлыков, самой простой работой было бы загрузить изображение в временное местоположение, а затем вызвать $ pdf-> Image () с этим временным файлом.

Эта проблема возникла с вашим именем файла. Убедитесь, что ваше имя файла передачи действителен

 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); ... } 

Вам нужно сделать только изменения, которые

 require('fpdf.php'); 

и сделать

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

и запустите свой код …

Сначала попробуйте проверить свой URL с помощью этого кода

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

print_r (fread ($ handle, 8192));

вы увидите, что содержится в вашем URL-адресе

**) убедитесь, что ваш URL не перенаправлен на страницу входа в систему

гораздо проще, только поставить .png в финале динамической цепочки и все ее

пример:

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

или

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

тип mime не распознается в URL-адресе, почему не отображается png, если это глупая ошибка, но это доказано, google делает то же самое, добавляя расширение с url & PNG