PHPでPDFを編集するための良い方法を知っている人はいますか?できればオープンソース/ゼロライセンスコストの方法。:)
PDFファイルを開き、PDF内のテキストを置き換えてから、PDFの変更バージョンを書き出すという方針に沿って考えていますか?
過去にFPDFを使用してプログラムでPDFファイルを作成したことがありますが、少し扱いにくい場合があります。
PHPでPDFを編集するための良い方法を知っている人はいますか?できればオープンソース/ゼロライセンスコストの方法。:)
PDFファイルを開き、PDF内のテキストを置き換えてから、PDFの変更バージョンを書き出すという方針に沿って考えていますか?
過去にFPDFを使用してプログラムでPDFファイルを作成したことがありますが、少し扱いにくい場合があります。
回答:
「空白を埋める」アプローチを採用している場合は、ページ上の任意の場所にテキストを正確に配置できます。したがって、不足しているテキストをドキュメントに追加するのは比較的簡単です(少し面倒ではありませんが)。たとえば、Zend Frameworkの場合:
<?php
require_once 'Zend/Pdf.php';
$pdf = Zend_Pdf::load('blank.pdf');
$page = $pdf->pages[0];
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
$page->setFont($font, 12);
$page->drawText('Hello world!', 72, 720);
$pdf->save('zend.pdf');
「[プレースホルダー文字列]」などのインラインコンテンツを置き換えようとすると、はるかに複雑になります。技術的には可能ですが、ページのレイアウトを台無しにする可能性があります。
PDFドキュメントは、一連のプリミティブ描画操作(ここに線、ここに画像、そこにテキストチャンクなど)で構成されています。これらのプリミティブのレイアウト意図に関する情報は含まれていません。
PDFドキュメントを作成するための無料で使いやすいPDFクラスがあります。それはFPDFと呼ばれます。FPDI(http://www.setasign.de/products/pdf-php-solutions/fpdi)と組み合わせて、PDFドキュメントを編集することも可能です。次のコードは、FPDFとFPDIを使用して、既存のギフトクーポンにユーザーデータを入力する方法を示しています。
require_once('fpdf.php');
require_once('fpdi.php');
$pdf = new FPDI();
$pdf->AddPage();
$pdf->setSourceFile('gift_coupon.pdf');
// import page 1
$tplIdx = $this->pdf->importPage(1);
//use the imported page and place it at point 0,0; calculate width and height
//automaticallay and ajust the page size to the size of the imported page
$this->pdf->useTemplate($tplIdx, 0, 0, 0, 0, true);
// now write some text above the imported page
$this->pdf->SetFont('Arial', '', '13');
$this->pdf->SetTextColor(0,0,0);
//set position in pdf document
$this->pdf->SetXY(20, 20);
//first parameter defines the line height
$this->pdf->Write(0, 'gift code');
//force the browser to download the output
$this->pdf->Output('gift_coupon_generated.pdf', 'D');
"FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI."
します。解決策はありますか?
本当に単純なPDFが必要な場合は、ZendまたはFPDFです。しかし、私はそれらを扱うのが難しく、イライラしていると感じています。また、APIの動作方法のため、コンテンツをプレゼンテーションからビジネスロジックから分離する良い方法はありません。
そのため、HTMLとCSSをPDFドキュメントに自動的に変換するdompdfを使用しています。HTMLページの場合と同じようにテンプレートをレイアウトし、標準のHTML構文を使用できます。外部CSSファイルを含めることもできます。ライブラリは完全ではなく、非常に複雑なマークアップやcssが壊れることがありますが、他に同様に機能するものは見つかりませんでした。
これがオプションかどうかはわかりませんが、Zendのpdfライブラリと非常によく似ていますが、大量の追加コード(zendフレームワーク)をロードする必要はありません。FPDFを拡張するだけです。
http://www.setasign.de/products/pdf-php-solutions/fpdi/
ここでは基本的に同じことができます。PDFをロードし、その上に上書きしてから、新しいPDFに保存します。FPDIでは、基本的にPDFを画像として挿入するので、好きなものをその上に置くことができます。
ただし、これもFPDFを使用するため、使用したくない場合は機能しません。
Tcpdfは、phphttp://www.tcpdf.org/でpdfを生成するための優れたライブラリでもあり ます。
私は本当にdompdfに大きな期待を持っていました(それはクールなアイデアです)が、ポジショニングの問題は私がfpdfを使用する際の主要な要因です。すべての要素を設定する必要があるため、面倒ですが、すべてが抜け出すので、それは強力です。
ドキュメントのワークスペースの下に画像を配置して、レイアウトを上に配置します。列の場合でも常に十分です(少しのphp文字列計算が必要ですが、それほどひどく頭がおかしいことはありません)。
幸運を。
pdflibを使用して、railsアプリからPDFファイルを作成します。PHPや他の多くの言語のバインディングがあります。
商用バージョンを使用していますが、いくつかの制限があるフリー/オープンソースバージョンもあります。
残念ながら、これではPDFの作成しかできません。
既存のファイルを[編集]を開いて、したい場合は、PDFlibは提供しません。この本を行い、製品を、しかしコストLOTを
<?php
//getting new instance
$pdfFile = new_pdf();
PDF_open_file($pdfFile, " ");
//document info
pdf_set_info($pdfFile, "Auther", "Ahmed Elbshry");
pdf_set_info($pdfFile, "Creator", "Ahmed Elbshry");
pdf_set_info($pdfFile, "Title", "PDFlib");
pdf_set_info($pdfFile, "Subject", "Using PDFlib");
//starting our page and define the width and highet of the document
pdf_begin_page($pdfFile, 595, 842);
//check if Arial font is found, or exit
if($font = PDF_findfont($pdfFile, "Arial", "winansi", 1)) {
PDF_setfont($pdfFile, $font, 12);
} else {
echo ("Font Not Found!");
PDF_end_page($pdfFile);
PDF_close($pdfFile);
PDF_delete($pdfFile);
exit();
}
//start writing from the point 50,780
PDF_show_xy($pdfFile, "This Text In Arial Font", 50, 780);
PDF_end_page($pdfFile);
PDF_close($pdfFile);
//store the pdf document in $pdf
$pdf = PDF_get_buffer($pdfFile);
//get the len to tell the browser about it
$pdflen = strlen($pdfFile);
//telling the browser about the pdf document
header("Content-type: application/pdf");
header("Content-length: $pdflen");
header("Content-Disposition: inline; filename=phpMade.pdf");
//output the document
print($pdf);
//delete the object
PDF_delete($pdfFile);
?>
pdf_set_info($pdfFile, "Title", "PDFlib");