我有一個項目,我需要生成一個PDF文件。在這個PDF中,我必須插入一個文本主體以及四個或五個大圖像(大約800px * 1000px)。爲了使這種靈活性更加靈活,我選擇將FreeMarker與XHTMLRenderer(flying-saucer)結合使用。內聯圖像和臨時文件(Java XHTML-> PDF生成)
我現在面臨着兩個選擇:
- 創建圖像,並將其保存爲臨時文件到磁盤。然後使用FreeMarker處理
.xhtml
模板(將其保存到磁盤)並將處理後的.xhtml
文件URL傳遞給XHTMLRenderer以生成PDF。所有這些創建的文件(bar PDF)將使用File.createTempFile
創建。這將允許FreeMarker從磁盤上拾取圖像(就像它們是在XHTML中鏈接的圖像一樣) - 處理
.xhtml
模板並將其保存在內存中。將圖像作爲base64編碼數據URL傳遞給模板。這將消除保存任何臨時文件的需要,因爲FreeMarker的輸出可以直接傳遞給XHTMLRenderer。
Base64編碼圖片網址示例(一個小的文件夾圖標):
<img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/
/ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExK
cppV0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7" />
我的主要問題是這將是一個較好的技術?創建很多臨時文件不好(它是否帶來大量開銷)?我可能會用盡內存創建如此大的base64編碼的字符串?
我可以看到您的觀點,非常感謝。如果PDF達到MB範圍,我對於響應能力更加寬鬆。作爲** EPS **的圖像也可以嵌入。 – 2012-01-16 13:51:16