【问题标题】:Get thumbnail of word in java using Apache POI with XWPF使用带有 XWPF 的 Apache POI 获取 Java 中单词的缩略图
【发布时间】:2016-05-04 13:15:12
【问题描述】:

这个问题涉及使用 HWPF 获取 word 文档的缩略图:

get thumbnail of word in java using Apache POI

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

【问题讨论】:

    标签: java ms-word apache-poi


    【解决方案1】:

    您需要升级您的 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);
    }
    

    【讨论】:

    【解决方案2】:

    经过深入研究,尤其是关于开放包装约定的研究,我自己找到了答案。 XWPF 文档 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);
    

    【讨论】:

    【解决方案3】:

    有一个用于制作缩略图的 JVM 库,Thumbnails4j(我是维护者,但它归 Elastic 所有),它在 docx 文件的后台使用 POI。

    File input = new File("/path/to/my_file.docx");
    Thumbnailer thumbnailer = new DOCXThumbnailer();
    List<Dimensions> outputDimensions = Collections.singletonList(new Dimensions(100, 100));
    BufferedImage output = thumbnailer.getThumbnails(input, outputDimensions).get(0);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 2023-04-04
      • 2014-07-02
      • 1970-01-01
      相关资源
      最近更新 更多