Zend_Pdf - 加载utf-8 pdf文档

时间:2011-08-30 14:10:57

标签: zend-framework zend-pdf

我目前正在尝试使用Zend_Pdf::load($filename)方法加载PDF文档,而我正在

Error occured while 'xxx.pdf' file reading.

所以我在Zend_Pdf_Parser :: _ construct中看到有这个块

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 :(得分:0)

我从未使用过Zend_PDF,因为它的潜力很小。我建议你融入你的项目TCPDF! ;)

答案 1 :(得分:0)

我遇到了同样的错误,结果证明是Zend Guard中的一个错误。显然,我的PHP编码器版本将字符串文字内的ASCII NP换页符(\ f)转换为反斜杠(\) f字符(\\ f)。

的混淆版本
print bin2hex("\f");

输出

5c66

而不是预期的

0c

此行为导致Zend_Pdf_StringParser在readLexeme中解析'startxre'而不是'startxref',导致您描述的错误。

如果您使用的是不同版本的编码器或根本没有编码器,则可能不是问题的原因(尝试在不同的PHP版本上重现)。