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);
+ }
}