Xpoint
   [напомнить пароль]

Броузер не показывает созданный мной PDF

Метки: [без меток]
2008-04-24 10:33:14 [обр] win_pup[досье]

Здравствуйте!

Apache 2.2
PHP Version 5.2.5
Броузер MSIE 6.0

Из PHP пытаюсь создать и показать PDF-файл (взят приведённый в мануале пример):

<?
$pdf = pdf_new();

if (!pdf_open_file($pdf, "")) {
    echo error;
    exit;
};

pdf_set_parameter($pdf, "warning", "true");

...
... <некий код рисования содержимого PDF-файла>
...

pdf_close($pdf);

$buf = pdf_get_buffer($pdf);
$len = strlen($buf);

header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=foo.pdf");
echo $buf;

pdf_delete($pdf);
?>

В результате чего в броузере получаю текст PDF-кода, начинающийся с "%PDF-1.4" и заканчивающийся "%%EOF". Непонятно, почему отображается только КОД, а не САМ PDF?

Спасибо.

спустя 42 минуты [обр] Филипп Ткачев(20/112)[досье]

Попробуйте посмотреть, какие заголовки отдает сервер в реальности.
Похоже, что сервер отдает ваш pdf как text/plain.
Попробуйте отдать так:

header("Content-type: application/pdf; charset=utf-8");
header("Content-Length: $len");
header('Content-Disposition: attachment; filename="foo.pdf"');

И еще такой вопрос, когда вы берете с сервера просто статичный pdf-файл он нормально в браузере открывается?

спустя 10 минут [обр] Thirteensmay(17/157)[досье]
Похоже что IE не может запустить внешний плагин для просмотра PDF.
Другие PDF у Вас отображаются ? (установлен ли AdobeReader, стоит ли у него в настройках галочка "Отображать PDF в браузере" ?)
Впрочем он может стоять, но криво, можно попробовать полностью удалить (с чисткой реестра), и установить заново.
спустя 16 минут [обр] win_pup[досье]

Другие PDF отображаются в броузере, если дать прямую ссылку на PDF.

Пробовал header'ы, какие посоветовал Филипп Ткачев - не помогло. Результат тот же, с учётом того, что текста стало отображаться в 2 раза меньше (из-за utf-8).

Как посмотреть, какие заголовки отдаёт сервер в реальности?

спустя 1 минуту [обр] L&L(3/3)[досье]
Я решил подобную проблему добавив
header("Content-Type: application/pdf");
спустя 14 минут [обр] Алексей Севрюков(162/1280)[досье]
L&L[досье] этот заголовок у автора уже стоит.
спустя 17 минут [обр] win_pup[досье]

Thirteensmay[досье], после того, как по Вашей 2-й ссылке скачал нужный плагинчик, оно вдруг возьми да и заработало! Однако, заработало не из-за самого плагина, а из-за того, что я просто закрыл и открыл броузер. Я не сказал... а дело в том, что сперва у меня выдавало ошибку:

Fatal error: Call to undefined function pdf_setrgbcolor() in C:\wwwroot\localhost\www\osago\test_pdf.php on line 27

Я закомментировал обе строки с этой функцией. Затем нажал F5, ошибка пропала, но ответ броузеру шёл как plain/text. Т.е., если после устранения ошибки открывать код в НОВОМ окне броузера, то оказывается, всё работает.

Но мне остаётся непонятным, почему не работает функция pdf_setrgbcolor(). Она, вроде как, указана в мануале, да ещё и в качестве примера. А для неё, оказывается, чего-то ещё и не хватает???

спустя 20 часов [обр] Филипп Ткачев(20/112)[досье]
This function is deprecated since PDFlib version 4, use PDF_setcolor() instead.
Будьте внимательнее, она просто устарела, используйте PDF_setcolor().
А страница у вас не открывалась из-за ошибки, т.к. php отдавал заголовки раньше ваших.
спустя 5 часов [обр] win_pup[досье]

Филипп Ткачев[досье], я пытался её использовать, но на взятую из примера строку:

pdf_setcolor($pdf, "both", "rgb", 1, 1, 1);

библиотека "ругается" след.образом:

Fatal error: Uncaught exception 'PDFlibException' with message 'pdf_setcolor() expects exactly 7 parameters, 6 given' in C:\wwwroot\localhost\www\osago\test_pdf.php:27 Stack trace: #0 C:\wwwroot\localhost\www\osago\test_pdf.php(27): pdf_setcolor(Resource id #3, 'both', 'rgb', 1, 1, 1) #1 {main} thrown in C:\wwwroot\localhost\www\osago\police.php on line 27

Если в RGB всего 3 цвета, зачем ему 7 параметров???

спустя 13 минут [обр] Филипп Ткачев(20/112)[досье]

Читаем мануал внимательно:

bool PDF_setcolor ( resource p, string fstype, string colorspace, float c1, float c2, float c3, float c4 )

Наверно для нее все-таки цветовое пространство rgba (где a - aplha канал), хотя и пишется rgb.
Попробуйте хотя бы стартовый пример: general/starter_basic

спустя 16 минут [обр] win_pup[досье]

Филипп Ткачев[досье]
Во-первых, выругался на параметр Unknown key 'errorpolicy'. После того, как я закомментировал эту строку, он стал ругаться:

Fatal error: Call to undefined function PDF_begin_document() in C:\wwwroot\localhost\www\osago\test_pdf.php on line 45.

Видимо, нужна библиотека полее продвинутой версии?

А насчёт цветного пространства: пример-то был взят из мануала! Что ж они, сами не знают КАК должно быть?

спустя 2 дня 23 часа [обр] Филипп Ткачев(20/112)[досье]

Скорее всего вам необходимо срочно обновить библиотеку.
По следующим причинам:

  1. безопасность (извечные проблемы у php)
  2. обычно мануалы не пишутся под конкретную версию библиотеки, но отражают обычно в себе принципы работы последней версии библиотеки.

И еще в мане указано про то, что многие функции еще остаются для совместимости, но в будущем могут быть удалены.

спустя 19 часов [обр] win_pup[досье]

PDFlib GmbH Version - 5.0.3.
Дистрибутив PHP скачивал в конце января этого года.

Библиотека php_pdf.dll была создана 08.11.2007, Мануал - 14.11.2007.

спустя 4 часа 46 минут [обр] Филипп Ткачев(20/112)[досье]
Powered by POEM™ Engine Copyright © 2002-2005