質問

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');

本当に単純な PDF が必要な場合は、Zend または FPDF 結構です。しかし、私はそれらを扱うのが難しく、イライラさせられると感じています。また、API の動作方法により、プレゼンテーションやビジネス ロジックからコンテンツを分離する良い方法はありません。

そのため、私が使用しているのは、 dompdf, 、HTML と CSS を PDF ドキュメントに自動的に変換します。HTML ページの場合と同じようにテンプレートをレイアウトし、標準の HTML 構文を使用できます。外部 CSS ファイルを含めることもできます。このライブラリは完璧ではなく、非常に複雑なマークアップや CSS が壊れることもありますが、他に同様に機能するものは見つかりませんでした。

Zend Framework は既存の PDF ファイルをロードして編集できます。リビジョンにも対応していると思います。

プロジェクトでドキュメントを作成するためにこれを使用していますが、非常にうまく機能します。ただし、編集したことはありません。

ドキュメントを確認してください ここ

これがオプションであるかどうかはわかりませんが、Zend の PDF ライブラリと非常によく似た動作をしますが、追加のコード (zend フレームワーク) を大量にロードする必要はありません。FPDF を拡張するだけです。

http://www.setasign.de/products/pdf-php-solutions/fpdi/

ここでも基本的には同じことができます。PDF をロードし、その上に上書きして、新しい PDF に保存します。FPDI では基本的に PDF を画像として挿入するので、その上に好きなものを置くことができます。

ただし、繰り返しになりますが、これは FPDF を使用するため、それを使用したくない場合は機能しません。

PHP の PDF/pdflib 拡張ドキュメントは希薄です (bugs.php.net で指摘されています) - Zend ライブラリを使用することをお勧めします。

Tcpdf は、PHP で PDF を生成するための優れたライブラリでもあります。 http://www.tcpdf.org/

私は dompdf (素晴らしいアイデアです) に本当に期待していましたが、位置の問題が fpdf を使用する大きな要因でした。すべての要素を設定する必要があるので面倒ですが、全員が出るほど強力です。

ドキュメント内のワークスペースの下に画像を配置し、その上にレイアウトを合わせて配置します。列であっても常にこれで十分です (ほんの少しの php 文字列計算が必要ですが、それほど面倒なことはありません)。

幸運を。

を使用しております pdflib Rails アプリから PDF ファイルを作成するには。PHP やその他多数の言語用のバインディングがあります。

私たちは商用バージョンを使用していますが、 無料/オープンソース版 これにはいくつかの制限があります。

残念ながら、これで作成できるのは PDF のみです。

既存のファイルを開いて「編集」したい場合は、pdflib が提供します これを実現する製品, ただし、費用がかかります 多く

<?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);
?>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top