用java将简单的word文档换成pdf文档的方式很多,因为很多都没有实际测试过,所以这里就先泛泛的说一下
整体上来看分两种:
1.纯java代码实现,有很多优秀的开源软件可以用,比如poi,itext,xdocreport,docx4j等等。主要缺点是只能处理简单的文档
2.通过在操作系统安装转换软件,在java代码中调用软件命令来实现转换。常用的有OpenOffice,Pandoc,Jacob(限于Windows环境)等软件,优点是对于复杂的文档也能很好的处理。缺点是会麻烦一点,有的不能跨平台,速度上可能也会慢一点
这里主要说一下我用xdocreport将word文档转成pdf文档的代码,xdocreport其实是对poi和itext的封装,进一步简化代码。下面看我的maven依赖
<!--Maven依赖,只多不少--> <dependency> <groupId>commons-codec</groupId> <artifactId>common-codec</artifactId> <version>1.5</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>fr.opensagres.xdocreport</groupId> <artifactId>fr.opensagres.xdocreport.itext.extension</artifactId> <version>1.0.4</version> </dependency> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>ooxml-schemas</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>fr.opensagres.xdocreport</groupId> <artifactId>org.apache.poi.xwpf.converter.core</artifactId> <version>1.0.4</version> </dependency> <dependency> <groupId>fr.opensagres.xdocreport</groupId> <artifactId>org.apache.poi.xwpf.converter.pdf</artifactId> <version>1.0.4</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>javax.xml.stream</groupId> <artifactId>stax-api</artifactId> <version>1.0-2</version> </dependency> <dependency> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> <version>3.0.0</version> </dependency>
maven依赖的版本很多都比较老了,但这不重要,能实现功能就是好的,要是换成其他更高的版本可能会报错,另外里面可能有个别依赖不是必须的,你有兴趣可以自己试一试。下面上代码
import org.apache.poi.xwpf.converter.pdf.PdfConverter; import org.apache.poi.xwpf.converter.pdf.PdfOptions; import org.apache.poi.xwpf.usermodel.XWPFDocument; import java.io.*; import java.util.HashMap; import java.util.Map; public class WordToPDF { /** * 将word文档, 转换成pdf, 中间替换掉变量 * @param source 源为word文档, 必须为docx文档 * @param target 目标输出 * @throws Exception */ public static void wordConverterToPdf(InputStream source, OutputStream target) throws Exception { XWPFDocument doc = new XWPFDocument(source); PdfOptions options = null;//因为是简单处理,该参数就设置成了null,有需要的可以研究一下 PdfConverter.getInstance().convert(doc, target, options); } //测试 public static void main(String[] args) { String filepath = "F:\\temp\\test.docx"; String outpath = "F:\\temp\\test.pdf"; InputStream source; OutputStream target; try { source = new FileInputStream(filepath); target = new FileOutputStream(outpath); Map<String, String> params = new HashMap<String, String>(); wordConverterToPdf(source, target); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
至此就算实现了将简单word文档转成pdf文档的功能。最后再说一下注意的地方,
1.如果你改变了maven依赖的版本可能会有报错,
2.注意word文档中汉字的字体
这里会显示你文档的汉字字体名称,其中有一些字体在转换的时候会消失,不能显示,就我知道有"宋体(正文)",注意它不同于“宋体”。
有错误欢迎指出,有好代码希望能分享一下。
附上参考资料地址:https://github.com/opensagres/xdocreport/wiki/DocxReportingJavaMainConverter
原文地址:https://www.cnblogs.com/coffee9527/p/9463742.html
时间: 2024-10-11 22:08:59