我有一個文檔模板,其中一些字段是靜態的,而其他字段是動態的。我需要替換一些數據(名稱,姓氏,薪水)並生成新文件。你建議要做什麼庫? POI是否合適? 我正在使用Spring,Java EE6和Oracle。如何使用Java從模板或現有文檔創建Word文檔?
3
A
回答
3
您可以嘗試Apache POI,但POI的操作字文件所需的HWPF和XWPF部分實際上非常複雜 - 您需要至少理解字文件的結構!利用iText和PDF
解決方案我就與PDF類似的東西(這可能是一個選擇)
1)可以使用的LibreOffice文檔中創建字段(如在Acrobat臨)
- 創建的.odt文件和風格它
- 或使用MS Word或LibreOffice的作家你的模板轉換成它
- 然後去查看 - > Toolsbars - >表單設計和設置「設計模式開/關」
- 現在你可以將字段添加到您的文件(雙擊它會打開字段屬性)
- 當你完成: 「文件 - >導出爲PDF」
2)現在你可以使用的iText填寫創建領域
下面就是示例代碼:
public byte[] getDocumentAsByteArray(Object dataBean, String pdfTemplateName) throws KkmsException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PdfStamper stamp = null;
InputStream templateInputStream = null;
Locale local = new Locale(language);
try {
templateInputStream = // get the file input stream of the pdf
PdfReader reader = new PdfReader(templateInputStream);
// Create a stamper that will copy the document to a new file
stamp = new PdfStamper(reader, outputStream);
AcroFields form = stamp.getAcroFields();
// form fields are normal text in the end
stamp.setFormFlattening(true);
Map<String, AcroFields.Item> map = (Map<String, AcroFields.Item>)form.getFields();
if (map != null) {
if (map.size() == 0) {
logger.debug("There are no fields in this PDF layout");
}
for (Entry<String, AcroFields.Item> e : map.entrySet()) {
logger.debug("PDF fieldname = " + e.getKey());
// at the moment we only handle text fields
if (AcroFields.FIELD_TYPE_TEXT == form.getFieldType(e.getKey())) {
fillForm(dataBean, form, e.getKey(), local);
} else {
logger.warn("Field type is not supported: "+form.getFieldType(e.getKey()));
}
}
}
stamp.close();
} catch (Exception e) {
logger.warn("Failed to create PDF document", e);
throw new KkmsException("Failed to create PDF document: "+e.getMessage());
} finally {
if (templateInputStream != null) {
try {
templateInputStream.close();
} catch (IOException e) {
throw new KkmsException("Failed to close InputStream of PDF document", e);
}
}
}
return outputStream.toByteArray();
}
最後你得到一個PDF - >希望這可以幫助你至少一點點!
另一種快速和骯髒的解決方案
可能是使用的ODT電源或DOCX - >轉換您的文件到DOCX或ODT - >它只是一個zip文件 - >所以把它解壓 - >你會看到的content.xml文件的zip的根 - >有在那裏 的所有文件內容現在,你可以添加一些神奇的標籤(例如$$$)在這裏其可之後你的程序來代替
<text:p text:style-name="P3">SAP Customer Number:</text:p>
<text:p text:style-name="P3">SAP Customer Number: $$$sapCustomerNumber$$$</text:p>
現在創建一個解壓縮odt/docx文件的程序 - >替換標籤 - >再次壓縮文件
2
These slides,從我在OSDC 2012發表的演講中,概述了一些主要方法。
這些天我可能會添加「生成你想要的XHTML,然後將其導出到docx」。由於我們引入了docx4j-ImportXHTML,並支持將CSS @class值轉換爲Word樣式,因此我們越來越多地看到了這種方法。
相關問題
- 1. 使用java從模板創建word文檔
- 2. 用Java創建Word文檔
- 3. 使用VBA創建Word或XML文檔
- 4. 從模板構建Word文檔
- 5. vsto - 如果從空白文檔創建或從現有文檔打開,則確定word文檔
- 6. 從word或pdf文檔創建報告
- 7. 從java創建新的word文檔
- 8. 創建Word文檔
- 9. 使用來自java對象的值動態地從模板創建word文檔
- 10. 創建Word文檔文件
- 11. 使用模板生成Word文檔
- 12. 如何通過模板以編程方式創建Word文檔
- 13. 是否有任何樣本用於創建word文檔模板並使用c#
- 14. 從模板Word文檔生成PDF
- 15. JXA/Applescript + Pages:從模板創建文檔
- 16. 從模板創建新文檔
- 17. 帶Yii的PDF或Word創建文檔?
- 18. Java文檔模板
- 19. 如何使用Java編輯Word文檔
- 20. Android - 創建Word文檔
- 21. 使用OpenXml創建Word文檔(docx)
- 22. 使用XML和C創建Word文檔#
- 23. 使用VSTO創建新的Word文檔
- 24. 使用OpenXML創建Word文檔
- 25. 使用C#創建Word(2013)文檔
- 26. 使用JavaScript「創建」Microsoft Word文檔
- 27. 如何使用Java創建JSON文檔?
- 28. 如何在WinRT中創建Word文檔
- 29. VBA - MS Word - 如何檢測沒有文檔打開或創建?
- 30. Sharepoint客戶端OM:通過現有文檔模板在庫中創建文檔
看看這個問題:http://stackoverflow.com/questions/10005678/learning-apache-poi –