1

最初に fpdi を使用して pdf をインポートして fpdf オブジェクトを作成し、次にその pdf にいくつかの変更を加えます。それを複製して、いくつかのテキストを追加するだけでカスタム pdf を作成します。次に、2 つのファイルをディスクに出力しましたが、作成されたのは 1 つだけで、2 番目の出力で致命的なエラーが発生しました。

致命的なエラー: 534行目のC:\Program Files\EasyPHP 3.0\www\oursin\oursin\public\scripts\FPDI\fpdi.php の未定義メソッド stdClass::closeFile() の呼び出し

私のコードの一部:

$pdf = new FPDI('L','mm',array(291.6,456)); 
$fichier=$repertoireGrilles.'GR_IFR.pdf';   

$pdf->setSourceFile($fichier); 
// add a page 
$tplIdx = $pdf->importPage(1); 
$pdf->AddPage(); 
$pdf->useTemplate($tplIdx,0,0,0); 
.. 
... 
methods on $pdf 
.. 
.. 
.. 

$pdfCopie=clone $pdf; 

methods on $pdfCopie

$pdfCopie-> Output($repertoireGrilles.'grillesQuotidiennes/'.$date.'/Grille_'.$date.'_'.$ou.'_copie.pdf','F'); 
$pdf-> Output($repertoireGrilles.'grillesQuotidiennes/'.$date.'/Grille_'.$date.'_'.$ou.'.pdf','F'); 

私の脳を何時間も(何日も)高圧状態に保つこの問題に取り組むのを手伝ってくれる人はいますか :) ?

4

1 に答える 1

1

クローン、フォーク、コピー、どれも本当に汚れています。その方法を取ると、出力に非常に苦労することになります。代わりに、次のアプローチを検討してください。

  1. 単一の PHP ファイルに対して複数の AJAX 呼び出しを行い、pidそれらを区別するために値を渡します。
  2. FPDI の場合とまったく同じドキュメント設定を行います。これは、クローン作成、分岐、コピーなどよりもはるかに一貫性があります。
  3. すべてのセットアップが完了したら、さまざまなドキュメントを確認pidしてさまざまなことを行います。
  4. ドキュメントを出力します。

これが私のjQueryです:

$(document).ready(function(){
    var i;
    for( i=0; i<=1; i++ )
    {
        $.ajax({
            url:    'pdfpid.php',
            data:   {
                pid:    i,
                pdf:    'document.pdf'
            },
            type:   'post'
        });
    }
});

ご覧のとおり、とてもシンプルです。pdfpid.phpドキュメントを生成して処理するファイルの名前です。この場合、apidが 0 のドキュメントを「オリジナル」にし、apidが 1 のドキュメントを「クローン」ドキュメントにします。

//  Ensure that POST came in correctly
if( !array_key_exists('pid',$_POST) || !array_key_exists('pdf',$_POST) )
    exit();

//  Populate necessary variables from $_POST
$pid    = intval($_POST['pid']);
$src    = $_POST['pdf'];

//  Setup the PDF document
$pdf = new FPDI();
$pdf->setSourceFile($src);
$templateID = $pdf->importPage(1);
$pdf->addPage();
$pdf->useTemplate($templateID);
$pdf->SetFont('Arial','B',24);

switch( $pid )
{
    default:
        break;
    case 0:
        //  "Parent" document
        $pdf->Text(10,10,"ORIGINAL");
        $filename = "original.pdf";
        break;
    case 1:
        //  "Child" document
        $pdf->Text(10,10,"CLONED");
        $filename = "cloned.pdf";
        break;
}

$pdf->Output($filename,'F');

「親」と「子」の間の一意の変更がすべて適切に行われた状態で、両方のドキュメントを出力として取得しました。

于 2015-05-14T15:39:43.233 に答える