TCPDF выдает «Ошибка существует на этой странице». в акробате с PNG

Некоторые PDF-файлы, созданные с помощью TCPF 6.0.099, отображают эту ошибку, но только в Acrobat:

На этой странице существует ошибка. Acrobat может не отображать страницу
правильно. Пожалуйста, свяжитесь с человеком, который создал PDF документ, чтобы
исправить проблему.

Ошибка возникает на некоторых страницах с изображениями .png, хотя не все PDF-файлы с изображениями будут генерировать ошибку. Открытие PDF в Chrome — это нормально, и изображения отображаются. Удаление .pngs со страницы предотвращает ошибку. В журнале php_errors ошибок от TCPDF нет.

Создание PDF с тем же содержимым, с использованием того же кода и той же версии TCPDF на моем локальном хосте не приводит к этой ошибке Acrobat. Мой локальный сервер работает под управлением OSX. Веб-сервер работает под управлением Centos 6.5. Как локальные, так и веб-серверы работают под управлением PHP 5.5.

Изображения в <img> теги, часть большого фрагмента HTML, записанного в PDF с writeHTMLCell() используя абсолютный URL в src, Я проверил PDF веб-сервера через pdf Гармония демо и он возвратил две ошибки, которые соответствуют проблемным страницам:

page: 004 Could not find the XObject named 'I2'.
page: 007 Could not find the XObject named 'I12'.

Запуск pdfHarmony для локального PDF не дал никаких ошибок вообще.

Я подумал, что, возможно, у веб-сервера возникла проблема с разрешениями в папке кэша TCPDF, за исключением того, что изображения по-прежнему отображаются в Chrome. Открытие разрешений на кеширование не дало эффекта. Установка путей в tcpdf_config.php для K_PATH_MAIN, K_PATH_URL, а также K_PATH_CACHE не имел никакого эффекта.

Файл PDF с ошибками больше, чем файл PDF, в котором нет ошибок. (147 тыс. Против 109 тыс.). Первая разница между файлами (это не временная метка):

  Webserver: /ColorSpace [/ICCBased 27 0 R]
Localhost: /ColorSpace /DeviceGray

И эти различия появляются по всему файлу. Этот пост в блоге говорит, что ICCBased не поддерживается всеми инструментами, но я понятия не имею, включает ли он Acrobat или как указать из TCPDF, какое цветовое пространство использовать. Я знаю, что TCPDF использует либо ImageMagick, либо GD для рендеринга .pngs. Оба сервера имеют встроенную версию imagick 3.1.2 и GD (совместимую с 2.1.0). Я не знаю, есть ли способ указать TCPDF использовать одну библиотеку поверх другой, или как определить, какую библиотеку он использует в настоящее время.

Сказать нашим пользователям не использовать .pngs не вариант. Возможно, есть возможность конвертировать .png в другой формат, который не вызывает этой ошибки. Но почему один сервер выдает PDF-файлы с ошибкой, а другой — нет?

пример

Я создал пример проблемы.

Вот проблема png

Здесь будет создан PDF с изображением (Это сразу же приведет к загрузке)

Вот важная часть кода:

$pdf->AddPage();

$html = '<img src="https://example.com/1.png">';

$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', $html, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=true);

1

Решение

Я нашел решение проблемы для своей проблемы, но я пока не в корне этой проблемы. Удаляя альфа-маску из сгенерированного .png в конце TCPDF->ImagePngAlpha() Теперь я могу открыть PDF с помощью Acrobat. Я удалил $imgmask с конца $this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false);

Смотрите этот пример фиксированного PDF

Я до сих пор не знаю, почему это проблема на веб-сервере против localhost. В TCPDF-> Image () я вижу два разных результата для $ info var Once TCPDF_IMAGES :: $ mtd ($ file); называется.

На веб-сервере:

array(11) {
["w"]=>
int(183)
["h"]=>
int(88)
["ch"]=>
int(1)
["icc"]=>
string(6936) "}

На локальном хосте:

array(11) {
["w"]=>
int(183)
["h"]=>
int(88)
["ch"]=>
int(1)
["icc"]=>
bool(false)
["cs"]=>
string(10) "DeviceGray"["bpc"]=>
int(1)
["f"]=>
string(11) "FlateDecode"["parms"]=>
string(75) "/DecodeParms << /Predictor 15 /Colors 1 /BitsPerComponent 1 /Columns 183 >>"["pal"]=>
string(0) ""["trns"]=>
string(0) ""["data"]=>
string(32) "H?c???c?!"}

Я не знаю, почему я получаю эти различия, но, по крайней мере, сейчас у меня есть хорошее решение. В этом случае мне не нужна альфа-маска для моих .png.

Обновить

То, что я сказал ранее о том, что маска не нужна, не совсем верно. Оказывается, мне это нужно для некоторых из моих .pngs, но сейчас у меня есть лучшее решение. Я закомментировал весь раздел ImageMagick в TCPDF-> ImagePngAlpha (), заставив его использовать GD. Оно работает!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]