From f69404de8d0b8d974b9eefe8411f1ce7620bb15c Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Tue, 29 Jun 2010 13:38:24 +0000 Subject: [PATCH] Fix bug #49446 - Don't consider 17.16.23 field codes as properly part of the paragraph's text git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@958965 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/status.xml | 1 + .../poi/xwpf/usermodel/XWPFParagraph.java | 8 +++++++- .../xwpf/extractor/TestXWPFWordExtractor.java | 13 +++++++++++++ test-data/document/FieldCodes.docx | Bin 0 -> 17034 bytes 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 test-data/document/FieldCodes.docx diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 12b8a3830e..89dc67248e 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 49446 - Don't consider 17.16.23 field codes as properly part of the paragraph's text XSLFSlideShow shouldn't break on .thmx (theme) files. Support for them is still very limited though diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java index 6aabadef95..e0741e782a 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java @@ -133,7 +133,13 @@ public class XWPFParagraph implements IBodyElement{ while (c.toNextSelection()) { XmlObject o = c.getObject(); if (o instanceof CTText) { - text.append(((CTText) o).getStringValue()); + String tagName = o.getDomNode().getNodeName(); + // Field Codes (w:instrText, defined in spec sec. 17.16.23) + // come up as instances of CTText, but we don't want them + // in the normal text output + if (!"w:instrText".equals(tagName)) { + text.append(((CTText) o).getStringValue()); + } } if (o instanceof CTPTab) { text.append("\t"); diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java b/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java index f98d5e69ca..2277ecec9d 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java @@ -237,4 +237,17 @@ public class TestXWPFWordExtractor extends TestCase { // Now check the first paragraph in total assertTrue(extractor.getText().contains("a\tb\n")); } + + /** + * The output should not contain field codes, e.g. those specified in the + * w:instrText tag (spec sec. 17.16.23) + */ + public void testNoFieldCodes() { + XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("FieldCodes.docx"); + XWPFWordExtractor extractor = new XWPFWordExtractor(doc); + String text = extractor.getText(); + assertTrue(text.length() > 0); + assertFalse(text.contains("AUTHOR")); + assertFalse(text.contains("CREATEDATE")); + } } diff --git a/test-data/document/FieldCodes.docx b/test-data/document/FieldCodes.docx new file mode 100644 index 0000000000000000000000000000000000000000..3db97f5ce76768ab5c530fc78ff7d31c26703d2d GIT binary patch literal 17034 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