7

テンプレートに基づいてPDFファイルを大量に生成していますが、パフォーマンスの大きな問題がすぐに発生しました。私の現在のシナリオは次のとおりです。

  1. dbから入力するデータを取得します
  2. 単一のデータ行とPDFフォームに基づいてfdfを作成します
  3. .fdfファイルをディスクに書き込む
  4. pdftkを使用してpdfをfdfとマージします(flattenコマンドを使用したfill_form)
  5. .pdfすべてのが生成されるまで、行を繰り返し処理し続けます
  6. 生成されたすべてのファイルが最終的にマージされ、単一のpdfがクライアントに提供されます

passthruはクライアントに生の出力を提供するために使用します(ファイルの書き込み時間を節約します)が、これはパフォーマンスのほんの少しの改善です。総動作時間は200レコードで約50秒ですが、なんらかの形で少なくとも10秒に短縮したいと思います。

理想的なシナリオは、これらすべてのpdfをメモリ内で操作し、それらのすべてを個別のファイルに書き込まないことですが、そのようなデータをpdftkなどの外部ツールに渡すことができないため、出力を行うことは不可能です。もう1つのアイデアは、.fdfこれらすべての行を含む1つの大きなファイルを生成することでしたが、それは許可されていないようです。

私はここで非常に些細なことを見逃していますか?

アドバイスをありがとうございます。

PS。pdflibのような優れたライブラリを使用できることはわかっていますが、現在はオープンライセンスライブラリのみを検討しています。

編集:

テンプレートとして同じPDFを使用して複数のページでファイルを作成するための構文を理解しようとしてい.fdfますが、数時間かかり、適切なドキュメントが見つかりませんでした。

4

3 に答える 3

1

長い間同じ問題に直面した後(LaTeXに基づいてPDFを生成したい)、私はついに別の粗雑で効果的な手法に切り替えることにしました:

私は2つのステップでPDFを生成します。最初にtwigやsmartyのようなテンプレートエンジンでhtmlを生成します。次に、 mpdfを使用してPDFを生成します。私は他の多くのhtml2pdfフレームワークを試し、最終的にmpdfを使用しました。これは非常に成熟しており、長い間開発されてきました(頻繁な更新、豊富な機能)。この手法を使用する利点:cssを使用してドキュメントを設計できます(mpdfは完全にcssを備えています)-これはcssの利点(http://www.csszengarden.com)とともに提供され、動的テーブルを非常に簡単に生成します。

Mpdfはhtmlテーブルを解析し、theader、tfooter要素を探し、テーブルが1ページサイズより大きい場合は各ページに配置します。また、ページ番号などの動的エンティティを使用してページヘッダー要素とページフッター要素を定義することもできます。

私は知っています、この迂回路を使用することは回避策のようですが、正直なところ、htmlのように強力でシンプルなエンジンが何であれ、ラテックス、pdfはありません!

于 2012-09-07T05:27:18.493 に答える
0

fpdf(http://www.fpdf.org/)のような別のそれほど複雑でないライブラリを試してください

私はそれが非常に良くて軽いと思います。

常に小さいライブラリを見つけて、必要なことだけを実行してください。

ライブラリが大きいほど、より多くのリソースを消費します。

于 2012-09-01T18:26:54.800 に答える
0

これは複数ページの問題には役立ちませんが、pdftkは-「標準入力からの読み取り」を意味する文字を受け入れることに気付きました。

.fdfディスクに書き込む必要をなくすために、stdinを介してpdftkプロセスに送信できる場合があります。

于 2012-09-01T21:31:30.583 に答える