2

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で何が起こっているのか手がかりを持っていますか?

4

2 に答える 2

0

Zend_PDFは可能性がほとんどないため、使用したことはありません。プロジェクトTCPDFに統合することをお勧めします!;)

于 2011-10-19T08:27:29.993 に答える
0

同じエラーが発生しましたが、Zend Guard のバグであることが判明しました。どうやら私のバージョンの PHP エンコーダーは、文字列リテラル内の ASCII NP フォーム フィード文字 (\f) をバックスラッシュ (\)f 文字 (\\f) に変換します。

の難読化バージョン

print bin2hex("\f");

出力

5c66

予想の代わりに

0c

この動作により、Zend_Pdf_StringParser が readLexeme の「startxref」ではなく「startxre」を解析し、説明したエラーが発生します。

別のバージョンのエンコーダを使用している場合、またはエンコーダをまったく使用していない場合、これは問題の原因ではない可能性があります (別の PHP バージョンで再現してみてください)。

于 2012-02-14T07:30:17.930 に答える