4

PHP ライブラリのTCPDFFPDIを使用して PDF ドキュメントを結合していますが、次のエラーが発生します。

TCPDF エラー: 予期された場所にオブジェクト (10, 0) が見つかりません

私はFPDIの商用バージョンを持っています。

この問題は、PDF バージョン 1.3 (Acrobat 4.x) ファイルでのみ発生しているようです。エラーを作成しているファイルのドキュメント プロパティのスクリーンショットを次に示します。http://imagebin.org/215041

スクリプトを終了させるのではなく、エラーのあるファイルをスキップしたいと思います。新しいクラスでエラー処理を変更しましたErrorIgnoringTCPDFが、機能していません。

何か案は?

require_once('../../libraries/tcpdf/tcpdf.php');
require_once('../../libraries/fpdi/fpdi.php');

class ErrorIgnoringTCPDF extends FPDI {

   public function Error($msg) {
       // unset all class variables
       $this->_destroy(true);

       // exit program and print error
       //die('<strong>TCPDF ERROR: </strong>'.$msg);
   }

}

$pdf = new ErrorIgnoringTCPDF();
$pdf->setPrintHeader(false);

$prows = fetch_data($id);

foreach ($prows AS $row) {

    $irows = get_imaged_docs($row['pat_id']);

    foreach($irows AS $irow){

        if ($irow['type'] === 'application/pdf'){

            $doc_id = $irow['id'];

            $content = get_pdf_imaged_docs($doc_id);

            $pagecount = $pdf->setSourceFile($content);

            for ($i = 1; $i <= $pagecount; $i++) {
                 $tplidx = $pdf->ImportPage($i);
                 $s = $pdf->getTemplatesize($tplidx);
                 $pdf->AddPage('P', array($s['w'], $s['h']));
                 $pdf->useTemplate($tplidx);
            }    

        } else {

            $pdf->AddPage();

            $doc  = fetch_document_content($irow['id'], $irow['filename']);
            $img = base64_encode($doc);

            $imgdata = base64_decode($img);

            $pdf->Image('@'.$imgdata);

        }

    }

}

$pdf->Output('documents.pdf', 'D');
4

5 に答える 5

8

Linux を使用している場合は、shell_exec を使用してファイルを結合できます

function combine_pdf($outputName,$fileArray)
{


         $cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$outputName ";

         foreach($fileArray as $file)
         {
           $cmd .= $file." ";
         }
         $result = shell_exec($cmd);

 }
于 2014-06-02T09:54:04.370 に答える
1

エラーを抑制しようとしましたか?

$pagecount = @$pdf->setSourceFile($content);

if (empty($pagecount))
    continue;  // or whatever you want to do, maybe set $is_invalid = true;
于 2012-06-11T09:56:41.997 に答える
0

これが適切/最善の修正であるとは言えませんが、問題が解決する可能性があります。

pdf_parser.php で、次の行をコメントアウトします。

$this->error("Unable to find object ({$obj_spec[1]}, {$obj_spec[2]}) at expected location");

行 544 の近くにあるはずです。

また、次のものを置き換える必要がある可能性があります。

    if (!is_array($kids))
        $this->error('Cannot find /Kids in current /Page-Dictionary');

と:

    if (!is_array($kids)){
     //   $this->error('Cannot find /Kids in current /Page-Dictionary');
     return;
    }

fpdi_pdf_parser.php ファイルで

それが役立つことを願っています。それは私のために働いた。

于 2014-05-23T15:07:07.883 に答える
0

これは単に、PDF ドキュメントにエラーがあることを示しています。これは、予期されたオブジェクトが見つからない特定のバイト オフセット位置を指しています。

于 2012-06-04T09:53:35.493 に答える
0

私は同じ問題を抱えており、このコードを使用して問題を解決しています。

class convertPDF extends FPDI {

   public function error($msg) {
      throw new Exception($msg); 
   }
   ...other stuff...
}

try {
    $convertPdf = new convertPDF();
} catch(Exception $e) {
    die($e->getMessage);
}

この回答は、この問題を検索する人向けです。運がいい!

于 2014-12-16T12:03:17.387 に答える