4

これは最も単純なことのように見えますが、機能させることができません。

複数ページのPDFの最初のページにテキストを追加する必要があります(任意の数のページである可能性があります)

このコードを 2 ページの pdf で使用すると (for ループを使用せず、$pdf->importPage(2) を使用するだけで)、最終的に 2 ページになりますが、2 ページ目は 1 ページ目の繰り返しです。テキストは最初のページにのみ書かれていますが、出力pdfにすべてのページが含まれている必要があります。これが私のコードです

// Original file with multiple pages 
$fullPathToFile = 'full/path/to/file.pdf';

class PDF extends FPDI {

    var $_tplIdx;

    function Header() {

        global $fullPathToFile;

        if (is_null($this->_tplIdx)) {

            $this->setSourceFile($fullPathToFile);
            $this->_tplIdx = $this->importPage(1);

        }
        $this->useTemplate($this->_tplIdx);

    }

    function Footer() {}

}

// initiate PDF
$pdf = new PDF();
$pdf->setFontSubsetting(true);


// add a page
$pdf->AddPage();

// The new content
$pdf->SetFont("helvetica", "B", 14);
$pdf->Text(10,10,'Some text here');

// How to get the number of pages of original pdf???
// $numPages = $pdf->getNumPages(???);

// Carry on adding all remaining pages starting from page 2
for($i=2;$i<=$numPages;$i++) {
    // Add another page
    $pdf->AddPage();
    // Do I need to declare the source file here?
    // $pdf->setSourceFile($fullPathToWD);
    $pdf->importPage($i);
}

// Output the file as forced download
$pdf->Output('theNewFile.pdf', 'D');

ドキュメントへのリンク

TCPDF クラス http://www.tcpdf.org/doc/code/classTCPDF.html#a5171e20b366b74523709d84c349c1ced

FPDI クラス http://www.setasign.de/support/manuals/fpdi/

FPDF_TPL クラス http://www.setasign.de/support/manuals/fpdf-tpl/

4

4 に答える 4

10

私の問題を解決しました...

// Original file with multiple pages 
$fullPathToFile = 'full/path/to/file.pdf';

class PDF extends FPDI {

    var $_tplIdx;

    function Header() {

        global $fullPathToFile;

        if (is_null($this->_tplIdx)) {

            // THIS IS WHERE YOU GET THE NUMBER OF PAGES
            $this->numPages = $this->setSourceFile($fullPathToFile);
            $this->_tplIdx = $this->importPage(1);

        }
        $this->useTemplate($this->_tplIdx);

    }

    function Footer() {}

}

// initiate PDF
$pdf = new PDF();
$pdf->setFontSubsetting(true);


// add a page
$pdf->AddPage();

// The new content
$pdf->SetFont("helvetica", "B", 14);
$pdf->Text(10,10,'Some text here');

// THIS PUTS THE REMAINDER OF THE PAGES IN
if($pdf->numPages>1) {
    for($i=2;$i<=$pdf->numPages;$i++) {
        $pdf->endPage();
        $pdf->_tplIdx = $pdf->importPage($i);
        $pdf->AddPage();
    }
}

// Output the file as forced download
$pdf->Output('theNewFile.pdf', 'D');

この行の最初の部分を追加することで、ページ数を取得します

$this->numPages = $this->setSourceFile($fullPathToFile);

最後から 2 番目のコード ブロックを参照してください。for ループは残りのページを追加します。

これがどのように行われるべきかわかりませんか?これを達成することさえ不可能であるといくつかの場所で読みました。また、コードはドキュメントで提供されていません。ただし、これは機能します。誰かに役立つことを願っています。

于 2013-01-30T14:56:45.627 に答える
7

私はこれに少し苦労し、複数ページのドキュメントの最後のページにテキストを追加する最も簡単な方法を考え出そうとしました. これが私のために働いた非常に単純なコードです:

require_once('fpdf/fpdf.php');
require_once('fpdf/fpdi.php');
$pdf = new FPDI();
$fullPathToPDF = '/usr/local/common/my.pdf';
$pageCount = $pdf->setSourceFile($fullPathToPDF);
for ($i = 1; $i <= $pageCount; $i++) {
    $pdf->importPage($i);
    $pdf->AddPage();
    $pdf->useTemplate($i);
}
$pdf->SetFont('Helvetica');
$pdf->SetXY(110, 225);
$pdf->Write(8, 'A complete document imported with FPDI');
$pdf->Output($fullPathToPDF);

ファイルへのフル パスを、複数ページの PDF がある場所に変更するだけです。

于 2015-01-16T14:15:23.333 に答える
1
$pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
...
$pdf->SetMargins(10, 10, 10);
$pdf->SetAutoPageBreak(true, 10);
foreach($array as $item)
{
  $pdf->AddPage(); //add new page for new item
  $txt = some_long_long_text;
  $pdf->Write(0, $txt, '', 0, 'C', true);
  $pdf->endPage(); //do end of page
  $pdf->lastPage(); //set cursor at last page, because autopagebreak not do it
}

たとえば、配列に 10 人の生徒がいて、それぞれの履歴書を作成する必要があるとします。試験では、履歴書は 1 通 3 ページあります。したがって、正しいテキストを含む 30 ページの pdf が得られます。SetAutoPageBreak(true, 10)、最後のページにカーソルを設定しないため、関数を使用して手動で行う必要があります$pdf->lastPage();

于 2014-06-10T09:26:12.740 に答える
0

そのコードは機能しません。これを試してください:

$pdf = new PDI();
$pdf->AddPage();
$pdf->setSourceFile('zzz.pdf');
$pdf->numPages = $pdf->setSourceFile('zzz.pdf');
$tplIdx = $pdf->importPage(1);
$pdf->useTemplate($tplIdx, 10, 20, 200);
    if($pdf->numPages>1) {
for($i=2;$i<=$pdf->numPages;$i++) {
    $pdf->AddPage();
    $tplIdx = $pdf->importPage($i);
    $pdf->useTemplate($tplIdx, 10, 20, 200);
}
}
于 2013-09-03T13:18:13.803 に答える