我目前正在尝试使用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会发生什么,如果这是一般性错误或我只是遗漏了什么?
答案 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版本上重现)。