Apache POI无法保存(HWPFDocument.write)大字doc文件

时间:2012-11-05 13:31:07

标签: java ms-word apache-poi doc

我想从.doc文件中删除单词元数据。我的.docx文件适用于XWPFDocument,但以下用于删除元数据的代码对于大型(> 1MB)文件失败。例如,使用带有图像的6MB .doc文件,它会输出一个4.5MB的文件,其中一些图像被删除。

public static InputStream removeMetaData(InputStream inputStream) throws IOException {
    POIFSFileSystem fss = new POIFSFileSystem(inputStream);
    HWPFDocument doc = new HWPFDocument(fss);

    // **it even fails on large files if you remove from here to 'until' below**
    SummaryInformation si = doc.getSummaryInformation();
    si.removeAuthor();
    si.removeComments();
    si.removeLastAuthor();
    si.removeKeywords();
    si.removeSubject();
    si.removeTitle();

    doc.getDocumentSummaryInformation().removeCategory();
    doc.getDocumentSummaryInformation().removeCompany();
    doc.getDocumentSummaryInformation().removeManager();
    try {
        doc.getDocumentSummaryInformation().removeCustomProperties();
    } catch (Exception e) {
        // can not remove above
    }
    // until

    ByteArrayOutputStream os = new ByteArrayOutputStream();
    doc.write(os);
    os.flush();
    os.close();
    return new ByteArrayInputStream(os.toByteArray());
}

相关帖子:

1 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的Apache POI?

这似乎是Bug 46220 - Regression: Some embedded images being lost

请升级至latest release of POI (3.8),然后重试。

希望有所帮助。