既存のPHP PDF置き換えることができるライブラリプレースホルダ変数はありますか) PDF、ODT、またはDOCXドキュメント、レイアウトを台無しにせずに、最終的な結果としてPDFファイルを生成しますか?
要件:
サードパーティのWebサービスは不要
共有Webホスティングで実行できることが理想的です(バイナリのインストールやパッケージは不要です)。
ちなみに、既存のPDFファイルをプログラムで読み込み、特定の位置にプログラムでテキストを挿入できるライブラリは不十分です私の使用例。
私の研究が示す限り、これを行うことができるライブラリはありません:
TCPDFはドキュメントを最初からしか生成できません
FPDIは既存のPDFテンプレートを読み取ることができますが、プログラムでのみコンテンツを追加できます(テンプレート変数の置換はできません)。
さまざまなDOCX/ODTテンプレートライブラリがありますが、PDFは出力されません。
PHPDOCx 私が必要とするものを正確に実行できると主張しています-しかし、彼らは試用版を提供しておらず、特に袋があるように見えるときは、袋に入れて猫を買うつもりはありません- 他の製品なしこれを行うWeb上。私は彼らが問題なくこれを行うことができると信じるのは難しいと思います-製品を使用してこれを成功裏に実行した場合は、ここに一行記入してください。
私は何かを見落としているか?
PDFフォームを使用してこれを行う方法はありますか?私はOpenOffice 3でソースドキュメントを作成しています。
標準のLinuxコマンドを使用できる場合があります(たとえば、pdftk
を使用して、今すぐ試すことができます)。
更新:* Argh! *私はオフィスから呼び出され、その間に賞金が期限切れになりました。新しい報奨金を開始する:私のテストが示す限り、完全にうまくいく解決策はまだありません。
アップデートII:pdftkのアプローチをすぐに検討しますが、追加の入力を収集するためのラウンドをもう1つ獲得するための別の報奨金も開始します。この質問は現在、賞金で1300のレップポイントを見ています。
ペッカ、
私は以前にこれを調べましたが、 pdftk (コマンドラインユーティリティ)を使用して、PDF FDF/XFDFデータファイルを使用するフォームに入力できます。 PHP内から簡単に生成できます。ネイティブライブラリがあるかもしれませんが、これは今まで見た中で最良のオプションでした。
pdftkは、一般的に非常に役立ちます。
更新:ここを見てください: http://php.net/manual/en/book.fdf.php
これはあまり実用的ではありませんが、完全を期すためです。すでにODTテンプレートがある場合は、それをテンプレートとして保持することもできます。 OpenDocument content.xmlの変更とその中のプレースホルダーの置き換えは非常に簡単です。その場合、 unoconv
または pyodconverter
を使用して、ODTを最終的なPDFに変換できます。
unoconv -f pdf -o final.pdf template.odt
非常に明らかに、これにはウェブサーバー上で完全なOpenOfficeセットアップ(UNOとライター)が必要です。そして、明らかにすべてのウェブホスティング業者がそれに参加するわけではありません!はは。 DebianやFedoraのセットアップでそれが簡単であっても。実行速度もおそらくそれほど素晴らしいものではないでしょう。 OOoは、両方の形式を他のどのPHPクラスよりも優れた方法で管理します。
freeを要件にしていないので、 LiveDocX をお勧めします。それらには無料のオプションがありますが、サードパーティの要件ではないため、サーバーライセンスを取得する必要があります)。
このためのZFパッケージもあります:
XSL:Formatting Objects(XSL:FO)などの使用を検討しましたか?基本的に、これらは処理されてPDFに変換されるXMLドキュメントです。文字列を実行する-または、より良い、DOM-内での置換は非常に簡単です。画像、リンク、注釈などの埋め込みをサポートしています。
これはPHPではありませんが、PHPのラッパーがいくつかあり、execなどを介して使用する方法があります。理想的ではありませんが、テンプレート部分を完全に使用します。詳細については、 http://techportal.inviqa.com/2009/12/16/transforming-xml-with-php-and-xsl/
Apacheプロジェクトとして利用可能な実装があります- http://xmlgraphics.Apache.org/fop/
あなたの最善の策は、fpdfまたは類似のものを使用してプログラムでテンプレートを定義して、その場でドキュメント全体を生成することです。こうすることで、テキストが段落などで途切れることがなく、必要に応じて画像やその他の要素を簡単に配置できます。
fpdfとその上に別の拡張機能があり、これを思い出せません。テンプレートをインポートできます。
これは「バイナリなし」の義務を満たしませんが、 PDFlib は、「ブロック」を使用した素晴らしいテンプレートシステムを備えています。これは、PDF Acrobatプラグインを使用し、プログラムで実行時にブロックごとに1つの関数呼び出しを使用して入力します。ブロックはテキスト(フォントフェイス/サイズ/色の単純なテキスト形式の疑似HTML)、画像( PDFに表示できるほとんどすべて)、およびPDF自体なので、他のドキュメント全体またはドキュメントのスニペットをブロックに埋め込むことができます。
既存のPDF(ロード、コンテンツ/フィルブロックなどを挿入、出力)からこれを行うか、新しいPDF最初から(プログラムで行うのは非常に困難ですが、可能です)。
ブロックを正常に使用して、クライアント用の簡単なテンプレートシステムを生成しました。そこで、小さなメタデータが埋め込まれたドキュメントにブロックを描画し、サーバー側で解析して、挿入するデータを要求するフォームを生成しました。ドキュメント生成時のこれらのブロック。
PDFlibは素晴らしいです、そしてあなたの共有ホストはすでにそれを持っているかもしれません。私はこのようなことを達成することができました http://www.housejockey.com/flyers/12/80/MyListing.pdf PDFlibでかなり簡単に、しかし基本的なテクニックはドロップインの段落テキストです...あなたが言ったことはダメだ。
また、ASP/ASP.NETのabcPDFを使用して作業しましたが、PDF内をのぞくのに非常に適していることがわかりましたが、やはり、既存のテキスト領域内を探索するようには設計されていません。
堅牢なテンプレートとプレースホルダーを使用することは、ドロップインコンテンツよりもはるかに複雑です。 PDF内の既存のテキストをリフローすることは通常不可能です。XMPieやCreoのような高価な可変データソフトウェアパッケージが行うように設計されている追加のドキュメント構造が必要です...
PHPDOCXは本当に良い音になり始めています!幸運を。
遅くなりましたが、オープンソースのテンプレートデザイナー https://github.com/applicius/dhek/releases を使用して、既存のPDFにpkaceholders/areasを定義し、PHP(JSON形式であるため)、元のPDF fpdf libを使用して、動的データが書き込まれたカスタムPDFを生成します。
FDF PHP拡張機能が無効になったため、この新しい回答を追加します。
私は これらの指示 をたどっただけで、1つのPerlスクリプトを実行してからpdftkコマンドを実行しました
私はそれが本当のPHP=ソリューションであるとはほど遠いことを知っていますが、信頼性が高く、* nixプラットフォームで実装するのはかなり簡単です。
ここで説明されているツールは、もし疑問に思った場合に備えて、Debianでも利用できます。
わかりました。問題の解決を少しお手伝いします。
あなたの質問のカップルのための最初の答え。
Q-見落としはありますか?
A-いいえ。PHP PDF既存のPDFのプレースホルダー変数を置き換えて、 PDFファイルを最終結果として、レイアウトを台無しにすることなく
Q-PDFフォームを使用してこれを行う方法はありますか?
A-はい。絶対にこれを行うには、PDF Forms
どちらの回答でも、Justin Koivistoを使用してPDFフォームフィールドのPHPライブラリに入力できます。詳細は http://koivi.com/fill-pdf-form-fields/tutorial.php にアクセスしてください。詳細については、こちらをご覧ください。
Justin Koivisto氏の功績による功績
PS
PDFフォームからの出力のようなテーブルを表示するための回避策については、次を読んでみてください Oracle Business Intelligence Publisherユーザーガイド-PDFテンプレート の作成
Phpdocx(https://github.com/djpate/phpdocx)と呼ばれるgithubのライブラリを介して.docxのプレースホルダー値を置き換えることができました(他で参照されているものではありません)
次に、ホストのWebサーバーにlibreofficeのポータブルバージョンを正常に配置し、PHPで呼び出して、.docxなどからPDFへのコマンドライン変換をオンザフライで実行します。私のホストのWebサーバーの管理者権限これは私がしたことの私のブログ投稿です:
これは部分的にあなたの質問に答えます。お役に立てれば幸いです。
DOM PdfとmPdfは、これを実現するために使用できる2つのライブラリです。
外部サービスを使用する場合は、 PDF Otter で問題を解決できます。サインアップしてすぐにアプリケーションに統合できる無料のプランがあります。
PDF Otterを使用する追加のプロは、アプリケーションでの依存関係が少なくなり、入力する必要があるフィールドを選択しやすくなります(フィールドの位置を取得するために手動の試行錯誤を使用しました過去には、それは時間がかかりました)。
少し遅いですが、 PDFTemplate ライブラリを確認してください。ライブラリは、まさにあなたが望むことをします。 Open Documentファイル(odt)を作成し、そこにプレースホルダーを追加できます。 PDFTemplateライブラリーは、これらのプレースホルダーに(画像を含めて)記入し、PDFファイルを作成できます。