2012-07-26 32 views
3

我有一個.docx模板,其中定義了字段。我需要將Web服務中的用戶輸入的數據插入到使用Java的這些字段中。如何用Java編輯docx字段內容?

我的團隊和我一直在大部分時間都在研究這個問題,我們一直無法找到一個簡單的解決方案。

有沒有辦法做到這一點比較容易?

謝謝。

編輯:

  • 按Alt + F9後,所有字段的顯示是這樣的:{ FORMTEXT }

  • POI似乎並不具備足夠的支持來做到這一點。

  • 我無法在Windows XP中成功設置Open Office SDK,因爲我無法完成其所有依賴關係。

  • docx4j可能工作,但其中的MailMerger目前沒有填充給定數據的字段。

  • 如果我解壓的docx,並打開word/document.xml中的文件,這是圍繞一個領域的XML看起來像:http://pastebin.com/uXBtz7X5(看到搜索字段名和fieldValue方法,這些被定義在哪裏)

+0

您是否嘗試過使用Apache POI - http://poi.apache.org/ – Sujay 2012-07-26 17:18:30

+0

它似乎對讀寫docx文件有基本的支持,但我沒有看到直接訪問docx文件中包含的字段以便編輯/插入數據的方法。這可能嗎? – PseudoPsyche 2012-07-26 17:25:45

+0

在我看來嘗試開放式辦公室圖書館。 – 2012-07-26 17:37:08

回答

3

看一看Docx4j,你可以用它來更新DOCX文檔領域也有和示例

fieldupdater example

+0

Fieldupdater可能已經工作,我主要嘗試MailMerger在另一個答案建議。正如我在我的回答中提到的那樣,這個功能最終並不重要,並且從項目中被取消。不過謝謝! – PseudoPsyche 2014-01-07 20:01:13

2

披露:我公司發起人docx4j

看一看MailMerger;請參閱底部的主要方法。

對於其他類型的字段,您可以嘗試更通用的字段支持。

+0

我試圖使用MailMerger,它看起來是開放的並妥善保存文件;然而,它並沒有將所需的數據注入這些領域。我正在做一個名爲'Text14'的字段,我嘗試注入文本'Test14':'map.put(new DataFieldName(「Text14」),「Test14」);'這是正確的用法嗎? – PseudoPsyche 2012-07-27 16:50:23

+0

字段似乎是:'{FORMTEXT}'按下Alt + F9之後 – PseudoPsyche 2012-07-27 19:31:19

+0

MailMerger爲類型MERGEFIELD的字段。 「FORMTEXT」字段應該有一個ffData子元素,它可能包含您的變量名稱(解壓縮docx並查看document.xml)。如果是這樣,你應該能夠調整MailMerger代碼。 – JasonPlutext 2012-07-27 21:56:19

0

docx格式是一個zip文件,裏面有XML和其他文件。您可以使用標準XML工具編輯XML文件。

+0

我意識到這一點,但我將如何去填寫在.docx文件中定義的實際'{FORMFIELD}'字段? – PseudoPsyche 2012-07-27 19:39:24

+0

嘗試保存文檔的兩個版本,一個填寫表單字段,另一個填寫。然後看看有什麼變化,也許你可以用相同的編程方式。您可能已經知道這一點,但文檔文本位於'document.xml'文件夾內。 – theglauber 2012-07-27 19:42:17

+0

是的,我找到了document.xml文件。我已經試過了,但是用Java手動編輯它看起來會很痛苦,而且效率很低。 – PseudoPsyche 2012-07-27 19:47:03

0

Docmosis和JODReports可能會幫助您 - 它們是以多種格式生成文檔/填充模板的Java庫。 Docmosis可以與DocX一起使用,因爲它們基於相同的技術,所以JODReports也可以。我不知道特定的{FORMTEXT}字段是否會起作用,但Docmosis可以在按ALT-F9時使用純文本文件或Word的合併字段(看起來像{MERGEFIELD})。