[英]How do I identify and NOT read in field codes in Docx4j?
要從對象獲取文本,目前我正在使用:
String someText = TextUtils.extractText(obj, stringWriter);
obj 通常是 Run,但實際上可以是任何東西。 我在讀取域代碼時遇到了一個問題,例如:
" PAGE \* MERGEFORMAT "
當我真的想忽略它時。 有沒有一種方法可以檢測到運行中的文本何時是字段代碼並忽略它?
謝謝
您可以在運行 TextUtils.extractText 之前預處理字段。
可以想象一個小實用程序,您可以為每個字段類型配置一個小實用程序,無論您是希望完全刪除它,還是只保留結果(可能先更新它)。
docx4j 現在不包括這個,所以下面我勾勒出所涉及的內容。
請注意,有兩種類型的字段:簡單和復雜; 進一步查看http://webapp.docx4java.org/OnlineDemo/ecma376/WordML/XML.html
docx4j中有簡單到復雜的轉換代碼; 見https://github.com/plutext/docx4j/blob/master/docx4j-core/src/main/java/org/docx4j/model/fields/FieldsPreprocessor.java
一旦您的字段處於“復雜”形式,例如:
<w:r>
<w:fldChar w:fldCharType="begin"/>
</w:r>
<w:r>
<w:instrText xml:space="preserve"> DATE </w:instrText>
</w:r>
<w:r>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r>
<w:t>12/31/2005</w:t>
</w:r>
<w:r>
<w:fldChar w:fldCharType="end"/>
</w:r>
如果需要,您可以刪除它們,只保留結果(即“分離”和“結束”之間的位)。
docx4j 創建的表示實際上比上面的示例更容易使用; 見https://github.com/plutext/docx4j/blob/master/docx4j-core/src/main/java/org/docx4j/model/fields/FieldRef.java
請注意,有很多不同的字段,請參閱http://webapp.docx4java.org/OnlineDemo/ecma376/WordML/file_2.html
您會想知道您的文檔中有哪些,以及您想如何處理它們。 例如,您可能希望完全刪除 PAGE 字段; 但是 MERGEFIELD 您可能希望保留結果。 如果您需要先更新它,請參閱https://github.com/plutext/docx4j/blob/master/docx4j-samples-docx4j/src/main/java/org/docx4j/samples/FieldsMailMerge.java
以下是 MAILMERGE 案例中保留結果的方式: https : //github.com/plutext/docx4j/blob/master/docx4j-core/src/main/java/org/docx4j/model/fields/merge/MailMerger .java#L590
就這么簡單,因為此時 XML 處於一種已知的可預測模式中。
有關 DOCPROPERTY 和 DOCVARIABLE 字段處理示例,請參閱https://github.com/plutext/docx4j/blob/master/docx4j-samples-docx4j/src/main/java/org/docx4j/samples/FieldUpdaterExample.java
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.