如何将MS doc转换为pdf

mag*_*agh 45 java pdf ms-word

如何使用java api将doc转换为pdf.其中document包含各种格式,如ms中的表格.使用iText转换为pdf时.实际文件看起来与转换后的pdf不同.请提供任何api而不是安装转换的exe.必须是开源的

Mic*_*mlk 46

这是一项相当艰巨的任务,如果你想要完美的结果(不可能不使用Word)就更难了,因为在纯Java中为你完成这一切的API的数量是开源的我认为是零(更新:我错了) ,见下文).

您的基本选项如下:

  1. 使用JNI/C#Web服务/ etc脚本MS Office(仅100%完美结果的选项)
  2. 使用可用的API脚本打开Office(90 +%完美)
  3. 使用Apache POI和iText(非常大的工作,永远不会是完美的).

更新 - 2016-02-11 这是我关于此主题的博客文章的简要副本,其中概述了支持Java中的Word-to-PDF的现有产品.

将Microsoft Office(Word,Excel)文档转换为Java中的PDF

我所知道的三种产品可以呈现Office文档:

yeokm1/docs-to-pdf-converter 不规则维护,纯Java,开源 将许多库捆绑在一起执行转换.

xdocreport 积极开发,纯Java,开源 它是Java API,用于将使用MS Office(docx)或OpenOffice(odt)创建的XML文档,LibreOffice(odt)与Java模型合并生成报告,并在需要其他格式时将其转换( PDF,XHTML ......).

Snowbound Imaging SDK 封闭源代码,Pure Java Snowbound似乎是100%Java解决方案,成本超过2,500美元.它包含描述如何在评估下载中转换文档的示例.

OpenOffice API 开源,非纯Java - 需要安装Open Office OpenOffice是一个支持Java API的本机Office套件.这支持阅读Office文档和编写PDF文档.SDK包含文档转换中的示例(examples/java/DocumentHandling/DocumentConverter.java).要编写PDF,您需要传递"writer_pdf_Export"编写器而不是"MS Word 97"编写器.或者您可以使用包装器API JODConverter.

JDocToPdf - 死于2016-02-11 使用Apache POI读取Word文档和iText编写PDF.完全免费,100%Java但有一些限制.


Sat*_*hia 9

Docx4j 是开源的,是将 Docx 转换为 pdf 的最佳 API,无需任何对齐或字体问题。

Maven 依赖项

<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j-JAXB-Internal</artifactId>
    <version>8.0.0</version>
</dependency>
<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j-JAXB-ReferenceImpl</artifactId>
    <version>8.0.0</version>
</dependency>
<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j-JAXB-MOXy</artifactId>
    <version>8.0.0</version>
</dependency>
<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j-export-fo</artifactId>
    <version>8.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

代码

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;

import org.docx4j.Docx4J;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;

public class DocToPDF {

    public static void main(String[] args) {
        
        try {
            InputStream templateInputStream = new FileInputStream("D:\\\\Workspace\\\\New\\\\Sample.docx");
            WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(templateInputStream);
            MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();

            String outputfilepath = "D:\\\\Workspace\\\\New\\\\Sample.pdf";
            FileOutputStream os = new FileOutputStream(outputfilepath);
            Docx4J.toPDF(wordMLPackage,os);
            os.flush();
            os.close();
        } catch (Throwable e) {

            e.printStackTrace();
        } 
    }

}
Run Code Online (Sandbox Code Playgroud)


小智 8

您可以使用JODConverter来实现此目的.它可用于在不同的办公室格式之间转换文档.如:

  1. Microsoft Office to OpenDocument,反之亦然
  2. 任何PDF格式
  3. 并且还支持更多转换
  4. 它还可以将MS Office 2007文档转换为PDF以及几乎所有格式

有关它的更多详细信息,请访问:http: //www.artofsolving.com/opensource/jodconverter


Zha*_*uzz 6

已经是 2019 年了,我不敢相信仍然没有最简单、最方便的方法将 Java 世界中最流行的 Micro$oft Word 文档转换为 Adob​​e PDF 格式。

我几乎尝试了上面答案提到的所有方法,我发现最好的也是唯一能满足我的要求的方法是使用 OpenOffice 或 LibreOffice。其实我不太清楚它们之间的区别,似乎它们都提供soffice命令行。

我的要求是:

  1. 它必须运行在Linux上,更具体地说是CentOS,而不是Windows上,因此我们无法在其上安装Microsoft Office;
  2. 它必须支持汉字,所以ISO-8859-1字符编码不是一个选择,它必须支持Unicode。

首先想到的是doc-to-pdf-converter,但它缺乏维护,上次更新发生在 4 年前,我不会使用无人维护的解决方案。Xdocreport似乎是一个有前途的选择,但它只能转换docx,但不能转换doc二进制文件,这对我来说是强制性的。使用Java调用OpenOffice API看起来不错,但是对于如此简单的需求来说太复杂了。

最后我找到了最好的解决方案:使用 OpenOffice 命令行来完成工作:

Runtime.getRuntime().exec("soffice --convert-to pdf -outdir . /path/some.doc");
Run Code Online (Sandbox Code Playgroud)

我始终相信最短的代码就是最好的代码(当然应该是可以理解的),就是这样。


Sud*_*SMD 5

查看github上的docs-to-pdf-converter.它是一个轻量级的解决方案,专门用于将文档转换为pdf.

为什么?

我想要一个简单的程序,可以将Microsoft Office文档转换为PDF,但不需要像LibreOffice或昂贵的专有解决方案那样的依赖项.看到转换每种格式的代码和库如何分散在Web上,我决定将所有这些解决方案组合到一个单独的程序中.在此过程中,我也决定添加ODT支持,因为我也遇到了代码.