使用带有XWPF的Apache POI获取java中的单词缩略图

时间:2016-05-04 13:15:12

标签: java ms-word apache-poi

这个问题涉及使用HWPF获取单词doc的缩略图:

get thumbnail of word in java using Apache POI

我想用XWPF执行此操作 - 用于word xml文档(.docx)的Apache POI API。没有getThumbnail()方法或类似方法。我怎样才能做到这一点?我想使用“另存为...”对话框中的“生成缩略图”选项提取Word生成的嵌入式缩略图 - 这对于使用HWPF的.doc文档很有效。

2 个答案:

答案 0 :(得分:0)

经过一些激烈的研究,特别是关于开放式包装公约,我自己找到了答案。 XWPF Document API中没有“getThumbnai()”便捷方法。必须通过特定的包关系提取缩略图:

XWPFDocument wordDocument = new XWPFDocument(new FileInputStream(docxFile));

ArrayList<PackagePart> packageParts= wordDocument.getPackage().getPartsByRelationshipType
("http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail");

PackagePart packagePart = packageParts.get(0);
FileOutputStream fos = new FileOutputStream("c:\\temp\\thumb.emf");
IOUtils.copy(packagePart.getInputStream(), fos);

答案 1 :(得分:0)

您需要升级Apache POI的版本!您需要使用Apache POI 3.15 beta 2 or newer

在这些较新的版本上,您会在POIXMLProperties上找到一些与缩略图相关的方法,例如getThumbnailFilename()getThumbnailImage()

要使用XWPF将缩略图图像保存到文件,您可以执行以下操作:

XWPFDocument wordDocument = new XWPFDocument(new FileInputStream(docxFile));
POIXMLProperties props = workDocument.getProperties();

String thumbnail = props.getThumbnailFilename();
if (thumbnail == null) {
   // No thumbnail
} else {
   FileOutputStream fos = new FileOutputStream("c:\\temp\\"+thumbnail);
   IOUtils.copy(props.getThumbnailImage(), fos);
}