Я пытаюсь создать 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