PHPでのPDF編集?[閉まっている]


81

PHPでPDFを編集するための良い方法を知っている人はいますか?できればオープンソース/ゼロライセンスコストの方法。:)

PDFファイルを開き、PDF内のテキストを置き換えてから、PDFの変更バージョンを書き出すという方針に沿って考えていますか?

過去にFPDFを使用してプログラムでPDFファイルを作成したことがありますが、少し扱いに​​くい場合があります。


私はFPDFのみを使用していて、それは素晴らしいと思います。本当にすごいように。
SQLMason 2011年

私もこれに対する迅速な解決策を見つけようとしていました。製品ページごとに同じPDFが必要でしたが、各pdfで製品番号と製品名が置き換えられました。差し込み印刷(WordまたはOpenOffice)を使用するのが、実際には最も簡単な方法であることがわかりました。次に、すべてのPDFをエクスポートしてアップロードしました。これが誰かに役立つことを願っています。
notJay 2015

回答:


70

「空白を埋める」アプローチを採用している場合は、ページ上の任意の場所にテキストを正確に配置できます。したがって、不足しているテキストをドキュメントに追加するのは比較的簡単です(少し面倒ではありませんが)。たとえば、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ドキュメントは、一連のプリミティブ描画操作(ここに線、ここに画像、そこにテキストチャンクなど)で構成されています。これらのプリミティブのレイアウト意図に関する情報は含まれていません。


1
これは素晴らしい!Zend Frameworkが無料であることに気づかなかったので、独自仕様のZendStudioに混乱しました。
リアム

8
これを使おうとする人への注意点:Acrobatバージョン4以前で作成されたPDFでのみ機能します。バージョン4以降、Adobeはファイルのエンコードを開始し、PDFの編集(または他のPDFへのインポート)を実行しにくくしました。
ダリル・ヘイン


2
これはZendなしでも機能しますか?
William Entriken 2013

[プレースホルダー文字列]のようなコンテンツを置き換えたい場合の解決策はありますか?
Starx 2013

42

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

1
優秀なライブラリー- 、私が後だった正確に何の勧告に感謝した
ジェームズ・ゲルダート

1
これは良いことですが、一部のPDFではこのエラーが発生"FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI."します。解決策はありますか?

PDFを古いバージョン(pdf 1.4)に変換するか、fpdi商用版を使用する必要があります。 パーサーの代替品を別の商用アドオンとして提供します。これにより、FPDIはこれらの圧縮機能を使用するドキュメントを処理できます。 出典
SwissFr 2018年

別のウェブページからsetSourceFileを設定することは可能ですか?例:example.com/file.pdf?
アレックス

19

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

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


9
-1質問に答えないので。ポスターは、既存のPDFを最初から作成するのではなく、編集したいと考えています。
Reimund 2012年

9
PDFを編集しようとしてこのページにアクセスしましたが、既存のPDFを編集するよりも、HTMLで最初から作成する方が簡単な理由がわかるため、この回答の方が便利なようです。
ジャスティンヴィンセント

3

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

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

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

ただし、これもFPDFを使用するため、使用したくない場合は機能しません。


3

Zend Frameworkは、既存のPDFファイルをロードおよび編集できます。リビジョンもサポートしていると思います。

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

こちらのドキュメントをご覧ください


2

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



1

私は本当にdompdfに大きな期待を持っていました(それはクールなアイデアです)が、ポジショニングの問題は私がfpdfを使用する際の主要な要因です。すべての要素を設定する必要があるため、面倒ですが、すべてが抜け出すので、それは強力です。

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

幸運を。


0

pdflibを使用して、railsアプリからPDFファイルを作成します。PHPや他の多くの言語のバインディングがあります。

商用バージョンを使用していますが、いくつかの制限があるフリー/オープンソースバージョンもあります。

残念ながら、これではPDFの作成しかできません。

既存のファイルを[編集]を開いて、したい場合は、PDFlibは提供しません。この本を行い、製品を、しかしコストLOTを


-1
<?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);
?>

8
どのライブラリを使用していますか?
ヒューゴエストラーダ

1
pdf_set_info($pdfFile, "Title", "PDFlib");
user183037 2011

これがどのライブラリであるかはまだ明確ではありません
Deniz

彼は組み込みのphppdflib拡張を意味していると思います。php.net/manual/en/pdf.examples-basic.php
Kostiantyn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.