2017-11-11 14 views
0

多くのPDFファイルを1つの大きなファイルにマージしてクライアントに送信したいと考えています。しかし、プロダクションサーバー上のリソースは非常に制限されているため、まずメモリ内のすべてのファイルをマージしてから、完成したPDFファイルを送信すると、使用可能なメモリがなくなるため、スクリプトが強制終了されます。PDFファイルを作成し、まだ終了していない間にストリーミングしますか?

PDFファイルを完全に作成してメモリの制限をバイパスする前に、より良いサーバーを取得すること以外には、唯一の解決方法がPDFファイルのストリームを開始することになります。

しかし、それが可能かどうかは疑問です。 PDFファイルを完全に作成する前にストリーミングすることはできますか?あるいは、PDFファイル形式では、未完成のファイルのストリーミングが許可されていません。一部のヘッダーなど、内容全体が明確な後に設定する必要があるためです。

可能であれば、どのPDFライブラリがファイルをストリームとして作成することをサポートしていますか?私が知っている(TCPDFのような)ほとんどのライブラリは、メモリ内に完全なファイルを作成し、最終的にはこの完成した結果をどこかに出力するようです(つまり、$tcpdf->Output()メソッド経由で)。

答えて

0

PDFファイル形式は完全にストリーミングできます。とにかくそれを防止するものは何もありません。

たとえば、PDF全体をダウンロードしたり読むことなく、リモートPDFへのHTTP接続で1ページを読み込む必要があった顧客がありました。私たちは、PDF内の特定のコンテンツに対する小さなHTTPリクエストをたくさん作成することで、これを実現できます。 PDFの最後にある予告編と相互参照表を使用して、PDF全体を解析することなく必要なコンテンツを見つけます。

あなたの問題を理解していれば、使用している現在のライブラリが、マージされたドキュメントを作成またはストリーミングする前に、各PDFをメモリにロードするようです。

この問題を別の方法で見てみると、PDFライブラリがマージするPDFへの参照のみを受け取り、マージされたPDFが作成またはストリーミングされているときは、 PDFからのリソースを必要に応じてマージすることができます。

私はPHPであまり最新のものではないので、これを行うことができるPHPライブラリがいくつあるかわかりませんが、おそらくC/C++ライブラリがいくつかありますこれを行う。私はPHPがこれらのライブラリを呼び出す拡張機能を使用できることを理解しています。欠点は、商用ライセンスを持つ可能性が高いことだけです。

免責事項:私はMako SDK R & Dグループのために働いています、なぜ私は確かにこれを行ういくつかのライブラリがあることを知っています。 :)

関連する問題