4

そのため、バージョン 1.2 を使用fpdiして、ドキュメントのすべてのページに小さなマークを追加しています。これが私のコードです:

public static function markPdf($file, $text){
    define('FPDF_FONTPATH','font/');
    require_once('fpdi/fpdf.php');
    require_once('fpdi/fpdi.php');
    try{
        $pdf = new FPDI();
        $pagecount = $pdf->setSourceFile($file);
        for($i = 1 ; $i <= $pagecount ; $i++){
            $tpl  = $pdf->importPage($i);
            $size = $pdf->getTemplateSize($tpl);

            // Here you can see that I'm setting orientation for every single page,
            // depending on the orientation of the original page
            $orientation = $size['h'] > $size['w'] ? 'P':'L';
            $pdf->AddPage($orientation);
            $pdf->useTemplate($tpl);

            $pdf->SetXY(5, 5);
            $pdf->SetTextColor(150);
            $pdf->SetFont('Arial','',8);
            $pdf->Cell(0,0,$text,0,1,'R');
        }
        $pdf->Output($file, "F");
    }catch(Exception $e){
        Logger::log("Exception during marking occurred");
        return false;
    }
    return true;
}

そして、1 つの小さな問題を除いて、すべてが正常に機能します。最初のページが横向きのドキュメントがある場合、生成されたドキュメントのすべてのページが下と右から切り取られます (最初のページが縦向きモードの場合、すべてうまくいきます) 、たとえ後続のページが横向きモードであっても)。問題は明らかです: この関数の何が問題なのですか?

4

1 に答える 1

13

の最後の引数は、useTemplate()ページ サイズを調整するかどうかを指定します。デフォルトfalseは ですが、 にしたいのですtrue

この呼び出しを変更します。

$pdf->useTemplate($tpl);

へ (古い fpdf バージョンの場合):

$pdf->useTemplate($tpl, null, null, $size['w'], $size['h'], true);

または (新しい fpdf バージョンの場合):

$pdf->useTemplate($tpl, null, null, $size['width'], $size['height'], true);

fpdfに関連するすべてのライブラリ ( fpdffpdf_tplおよびfpdi) を最新バージョンに更新することを検討してください。これも重要です。

PS: の新しいバージョンをfpdiテスト サーバーにプッシュすると、比較的古いバージョンの PHP インタープリターでは動作しないことがわかりました。バージョン 5.3.10 では動作しますが、5.3.2 以前では動作しません。そのため、PHP のバージョンも最新であることを確認してください。

于 2012-09-18T09:32:16.680 に答える