【问题标题】:Docx4j: Delete temporary images when converting to PDF via FOP?Docx4j:通过 FOP 转换为 PDF 时删除临时图像?
【发布时间】:2022-12-17 08:37:26
【问题描述】:

我有一个要转换为 PDF 的 docx 文件。我在 Linux 上使用 docx4j-export-fo 通过 XSL-FO 转换它。每次我转换带有图像的文档时,一些图像都会保存在 /tmp 文件夹中。我发现这是因为 AbstractConversionImageHandler.java,它在使用 XSL-FO 时将始终存储图像。

我尝试设置“ImageDirPath”FoSetting,但它是忽略页眉/页脚图像在计算页眉/页脚区域大小时。它仅适用于文档正文中的图像。

此设置在“FopAreeTreeHelper”中被忽略,它使用 FOP 和一些默认设置计算页眉/页脚区域。所以如果有图像,它将是保存到默认的“/tmp”目录。

这是我将 doc 转换为 pdf 的代码:


        private static final String TEMP_IMAGE_DIR_PATH = "/tmp/images";

        public static void convert(WordprocessingMLPackage wordMLPackage, OutputStream output) throws Exception {

        Mapper fontMapper = new BestMatchingMapper();
        wordMLPackage.setFontMapper(fontMapper);

        FOSettings foSettings = new FOSettings(wordMLPackage);
        foSettings.setApacheFopMime("application/pdf");
        foSettings.setImageDirPath(TEMP_IMAGE_DIR_PATH);
        foSettings.setFoDumpFile(null);

        FopFactoryBuilder fopFactoryBuilder = FORendererApacheFOP.getFopFactoryBuilder(foSettings) ;
        FopFactory fopFactory = fopFactoryBuilder.build();

        FOUserAgent foUserAgent = FORendererApacheFOP.getFOUserAgent(foSettings, fopFactory);

        Docx4J.toFO(foSettings, output, Docx4J.FLAG_EXPORT_PREFER_XSL);

        // Clean up, so any ObfuscatedFontPart temp files can be deleted
        if (wordMLPackage.getMainDocumentPart().getFontTablePart()!=null) {
            wordMLPackage.getMainDocumentPart().getFontTablePart().deleteEmbeddedFontTempFiles();
        }
        foSettings = null;
        wordMLPackage = null;

        FileUtils.deleteDirectory(new File(TEMP_IMAGE_DIR_PATH));
    }

只有文档正文中的图像会保存到“TEMP_IMAGE_DIR_PATH”中,然后我将其删除。但标题图像保存在“/tmp”文件夹中。但我不想从“/tmp”中删除所有图像。

有没有办法让 Docx4j 或 FOP 在转换后删除这些图像? 或者设置默认目录?

【问题讨论】:

  • 你很好地分析了这个问题。 FopAreeTreeHelper 需要修补才能将临时图像写入其他目录。

标签: java apache-fop docx4j


【解决方案1】:

根据 JasonPlutext 的评论,这是 docx4j 库中的错误。它已被报告为一个问题。

我使用的解决方法是不将图像放在页眉和页脚中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多