Zend_Pdf - загрузить документ в формате utf-8 pdf - PullRequest
2 голосов
/ 30 августа 2011

В настоящее время я пытаюсь загрузить PDF-документ, используя метод Zend_Pdf::load($filename), и получаю

Error occured while 'xxx.pdf' file reading.

Итак, я вижу в конструкции Zend_Pdf_Parser :: _ есть этот блок

while ($byteCount > 0 && !feof($pdfFile)) {
   $nextBlock = fread($pdfFile, $byteCount);
   if ($nextBlock === false) {
        require_once 'Zend/Pdf/Exception.php';
        throw new Zend_Pdf_Exception( "Error occured while '$source' file reading." );
   }
   $data .= $nextBlock;
   $byteCount -= strlen($nextBlock);
}
if ($byteCount != 0) {
   require_once 'Zend/Pdf/Exception.php';
   throw new Zend_Pdf_Exception( "Error occured while '$source' file reading." );
}

После отладки я могу сказать, что strlen($nextBlock) не возвращает правильное значение (на основе $nextBlock = fread($pdfFile, $byteCount);). Если я использую mb_strlen($nextBlock,'8bit'), вместо этого этот блок проходит правильно.Теперь я получаю еще одну ошибку

Pdf file syntax error. 'startxref' keyword expected

Так что теперь я заглядываю в Zend_Pdf_StringParser: readLexeme () и вижу, что снова есть проблема с однобайтовыми и многобайтовыми строковыми функциями (strlen и т.*

Так кто-нибудь знает, что происходит с Zend_Pdf, если это общая ошибка или я просто что-то упустил?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2012

Я столкнулся с той же ошибкой, и она оказалась ошибкой в ​​Zend Guard. Очевидно, моя версия кодировщика PHP превращает символ перевода формы ASCII NP (\ f) внутри строковых литералов в обратную косую черту (\) и символы f (\\ f).

Запутанная версия

print bin2hex("\f");

выходы

5c66

вместо ожидаемого

0c

Это приводит к тому, что Zend_Pdf_StringParser анализирует 'startxre' вместо 'startxref' в readLexeme, вызывая описанную вами ошибку.

Если вы используете другую версию кодировщика или вообще не используете кодировщик, это может быть не причиной проблемы (попробуйте воспроизвести ее в другой версии PHP).

0 голосов
/ 19 октября 2011

Я никогда не использовал Zend_PDF, потому что у него очень мало возможностей.Советую интегрировать в свой проект TCPDF !;)

...