From: Nick Burch Date: Tue, 28 Sep 2010 11:46:22 +0000 (+0000) Subject: Test that shows we handle word floating and fixed pictures properly X-Git-Tag: POI-3.7~16 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7033853c363379e86ce030a72c8bebc40b1ca5f9;p=poi.git Test that shows we handle word floating and fixed pictures properly git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1002123 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/types/CHPAbstractType.java b/src/scratchpad/src/org/apache/poi/hwpf/model/types/CHPAbstractType.java index 00a19b30d8..d0a8341ff9 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/types/CHPAbstractType.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/types/CHPAbstractType.java @@ -985,7 +985,7 @@ public abstract class CHPAbstractType /** * - * @return the fSpec field value. + * @return is the fSpec field value set? (Also known as sprmCFSpec) */ public boolean isFSpec() { diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestPictures.java b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestPictures.java index ee34f4b724..fbc5bb3576 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestPictures.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestPictures.java @@ -261,4 +261,45 @@ public final class TestPictures extends TestCase { assertEquals("10a8", picture.suggestFullFileName()); assertEquals("image/unknown", picture.getMimeType()); } + + /** + * In word you can have floating or fixed pictures. + * Fixed have a \u0001 in place with an offset to the + * picture data. + * Floating have a \u0008 in place, which references a + * \u0001 which has the offset. More than one can + * reference the same \u0001 + */ + public void testFloatingPictures() throws Exception { + HWPFDocument doc = HWPFTestDataSamples.openSampleFile("FloatingPictures.doc"); + PicturesTable pictures = doc.getPicturesTable(); + + // There are 19 images in the picture, but some are + // duplicate floating ones + assertEquals(17, pictures.getAllPictures().size()); + + int plain8s = 0; + int escher8s = 0; + int image1s = 0; + + Range r = doc.getRange(); + for(int np=0; np < r.numParagraphs(); np++) { + Paragraph p = r.getParagraph(np); + for(int nc=0; nc < p.numCharacterRuns(); nc++) { + CharacterRun cr = p.getCharacterRun(nc); + if(pictures.hasPicture(cr)) { + image1s++; + } else if(pictures.hasEscherPicture(cr)) { + escher8s++; + } else if(cr.text().startsWith("\u0008")) { + plain8s++; + } + } + } + // Total is 20, as the 4 escher 8s all reference + // the same regular image + assertEquals(16, image1s); + assertEquals(4, escher8s); + assertEquals(0, plain8s); + } } diff --git a/test-data/document/FloatingPictures.doc b/test-data/document/FloatingPictures.doc new file mode 100644 index 0000000000..15b06cf3f0 Binary files /dev/null and b/test-data/document/FloatingPictures.doc differ