私はPDFファイルを生成する必要があるプロジェクトを持っています。このPDF内には、テキストの本体と、4つまたは5つの大きな画像(約800px * 1000px)を挿入する必要があります。これを柔軟にするために、FreeMarkerをXHTMLRenderer(フライングソーサー)と組み合わせて使用することを選択しました。インラインイメージ対テンポラリファイル(Java XHTML-> PDF生成)
私は今、オプションのカップルに直面しています:
- がディスクに一時ファイルを画像を作成し、それらを保存します。その後、
.xhtml
テンプレートをFreeMarkerで処理し(ディスクに保存する)、処理された.xhtml
ファイルのURLをXHTMLRendererに渡してPDFを生成します。これらの作成されたファイル(PDFのバー)はすべてFile.createTempFile
で作成されます。これにより、FreeMarkerは画像をディスクから取り除くことができます(XHTMLでリンクされている画像のように) .xhtml
テンプレートを処理してメモリに保持します。テンプレートに画像をbase64でエンコードされたデータURLとして渡します。これにより、FreeMarkerの出力をXHTMLRendererに直接渡すことができるため、一時ファイルを保存する必要がなくなります。
Base64でエンコードされたイメージのURL例(小さなフォルダアイコン):
<img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/
/ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExK
cppV0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7" />
私の主な質問は、より良い技術であると思われるのですか?たくさんの一時ファイルを作成していますか(オーバーヘッドがかかりますか?)このような大きなbase64でエンコードされた文字列を作成すると、メモリが不足する可能性がありますか?
私はあなたのポイントを見ることができます、それを感謝します。しかし、PDFがMB範囲に達すると、私は応答性についてもっとリラックスしています。 ** EPS **のような画像も埋め込み可能です。 –