【问题标题】:Apache POI fails to save (HWPFDocument.write) large word doc filesApache POI 无法保存 (HWPFDocument.write) 大字 doc 文件
【发布时间】:2012-11-05 13:31:06
【问题描述】:

我想从 .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());
}

相关帖子:

【问题讨论】:

  • 说实话,我不明白你的问题。是问题,你有一些例外,还是你有太大的输出文件=>还有一些要删除的东西?
  • 元数据被正确删除,但是给定一个包含表格、页脚、页眉和图像的 6mb 文件,poi 输出一个 ~4.5mb 的文件,其中删除了元数据,但也删除了一些随机图像。
  • 如果随机图像被删除(每次调用都会删除其他内容),那么它一定是线程问题,或者例如处理不当的内存不足错误。如果您在单个线程中运行它,则可以检查线程问题,然后它可以正常工作。可以通过刹车点找到内存不足错误。我建议以调试模式运行代码,并设置异常刹车点(捕获和未捕获)以捕获错误和 RuntimeExceptions。也许你会发现一些有趣的东西。
  • 如果您可以上传一个示例文档文件,以及您的 JVM 参数和 JVM 类型、POI 版本,我们可以做得更多。
  • 这是一个示例文件,其中一些图像被删除。 docs.google.com/open?id=0B04nNVcbjeicenliLW5zSElSdk0

标签: java ms-word apache-poi doc


【解决方案1】:

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

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

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

希望对您有所帮助。

【讨论】:

  • 我使用了 poi 3.8 和最新的夜间版本。两者都有错误。
  • 那么,又是一个bug,还是回归的回归:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 2012-06-05
相关资源
最近更新 更多