将包含图表的 docx 转换为 PDF

Converting a docx containing a chart to PDF

我有一个 docx4j 生成的文件,其中包含几个表格、标题,最后还有一个 excel-generated 曲线图。

为了将此文件转换为 PDF,我尝试了很多方法,但没有得到任何成功的结果。

  1. 带有 xsl-fo 的 Docx4j 不起作用,docx 文件中包含的大部分内容尚未实现,并以红色文本显示为 "not implemented"。
  2. JODConverter 也不起作用,我得到了一个生成的 PDF,其中一切都很好(只有很少的 formatting/styling 问题)但是图表没有显示。
  3. 最后,最接近的方法是使用 Apache POI:生成的 PDF 与我的 docx 文件相同,但仍然没有图表显示。
  4. 我已经知道 Aspose 可以很容易地解决这个问题,但我正在寻找一个开源、免费的解决方案。

我使用 Apache POI 的代码如下:

public static void convert(String inputPath, String outputPath)
        throws XWPFConverterException, IOException {
    PdfConverter converter = new PdfConverter();
    converter.convert(new XWPFDocument(new FileInputStream(new File(
            inputPath))), new FileOutputStream(new File(outputPath)),
            PdfOptions.create());
}

我不知道如何获取 PDF 中的图表,有人可以告诉我如何进行吗?

提前致谢。

我不知道这是否对您有帮助,但您可以使用 "jacob"(我不知道是否可以使用 apache poi 或 docx4j) 使用此解决方案,您可以自己打开 "Word" 并将其导出为 pdf。

!需要在电脑上安装Word!

下载页面如下:http://sourceforge.net/projects/jacob-project/

try {           
        if (System.getProperty("os.arch").contains("64")) {
            System.load(DLL_64BIT_PATH);
        } else {
            System.load(DLL_32BIT_PATH);
        }
    } catch (UnsatisfiedLinkError e) {
        //TODO          
    } catch (IOException e) {
        //TODO          
    }

 ActiveXComponent oleComponent = new ActiveXComponent("Word.Application");
 oleComponent.setProperty("Visible", false);
 Variant var = Dispatch.get(oleComponent, "Documents");
 Dispatch document = var.getDispatch();

 Dispatch activeDoc = Dispatch.call(document, "Open", fileName).toDispatch();

// https://msdn.microsoft.com/EN-US/library/office/ff845579.aspx
Dispatch.call(activeDoc, "ExportAsFixedFormat", new Object[] { "path to pdfFile.pdf", new Integer(17), false, 0 });
Object args[] = { new Integer(0) };//private static final int DO_NOT_SAVE_CHANGES = 0;
Dispatch.call(activeDoc, "Close", args); 
Dispatch.call(oleComponent, "Quit");