将包含图表的 docx 转换为 PDF
Converting a docx containing a chart to PDF
我有一个 docx4j 生成的文件,其中包含几个表格、标题,最后还有一个 excel-generated 曲线图。
为了将此文件转换为 PDF,我尝试了很多方法,但没有得到任何成功的结果。
- 带有 xsl-fo 的 Docx4j 不起作用,docx 文件中包含的大部分内容尚未实现,并以红色文本显示为 "not implemented"。
- JODConverter 也不起作用,我得到了一个生成的 PDF,其中一切都很好(只有很少的 formatting/styling 问题)但是图表没有显示。
- 最后,最接近的方法是使用 Apache POI:生成的 PDF 与我的 docx 文件相同,但仍然没有图表显示。
- 我已经知道 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");
我有一个 docx4j 生成的文件,其中包含几个表格、标题,最后还有一个 excel-generated 曲线图。
为了将此文件转换为 PDF,我尝试了很多方法,但没有得到任何成功的结果。
- 带有 xsl-fo 的 Docx4j 不起作用,docx 文件中包含的大部分内容尚未实现,并以红色文本显示为 "not implemented"。
- JODConverter 也不起作用,我得到了一个生成的 PDF,其中一切都很好(只有很少的 formatting/styling 问题)但是图表没有显示。
- 最后,最接近的方法是使用 Apache POI:生成的 PDF 与我的 docx 文件相同,但仍然没有图表显示。
- 我已经知道 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");