1. 集成步骤

引入相关依赖 args4j

args4j

2.32

org.docx4j

docx4j

3.2.1

fr.opensagres.xdocreport

org.apache.poi.xwpf.converter.pdf

1.0.6

fr.opensagres.xdocreport

org.odftoolkit.odfdom.converter.pdf

1.0.6

com.googlecode.jaxb-namespaceprefixmapper-interfaces

JAXBNamespacePrefixMapper

2.2.4

runtime

com.sun.xml.bind

jaxb-impl

2.2.11

com.sun.xml.bind

jaxb-core

2.2.11

org.apache.xmlbeans

xmlbeans

2.6.0

org.apache.poi

poi

3.14

org.apache.poi

poi-scratchpad

3.14

org.apache.poi

poi-ooxml

3.14

转换工具类

``` public class Word2PdfUtils {

/**

* docx文档转换为PDF

*

* @param pdfPath PDF文档存储路径

* @throws Exception 可能为Docx4JException, FileNotFoundException, IOException等

*/

public void convertDocxToPdf(String docxPath, String pdfPath) throws Exception {

FileOutputStream fileOutputStream = null;

try {

File file = new File(docxPath);

fileOutputStream = new FileOutputStream(new File(pdfPath));

WordprocessingMLPackage mlPackage = WordprocessingMLPackage.load(file);

setFontMapper(mlPackage);

Docx4J.toPDF(mlPackage, new FileOutputStream(new File(pdfPath)));

}catch (Exception e){

e.printStackTrace();

// log.error("docx文档转换为PDF失败"); }finally { IOUtils.closeQuietly(fileOutputStream); } }

private static void setFontMapper(WordprocessingMLPackage mlPackage) throws Exception {

Mapper fontMapper = new IdentityPlusMapper();

fontMapper.put("隶书", PhysicalFonts.get("LiSu"));

fontMapper.put("宋体", PhysicalFonts.get("SimSun"));

fontMapper.put("微软雅黑", PhysicalFonts.get("Microsoft Yahei"));

fontMapper.put("黑体", PhysicalFonts.get("SimHei"));

fontMapper.put("楷体", PhysicalFonts.get("KaiTi"));

fontMapper.put("新宋体", PhysicalFonts.get("NSimSun"));

fontMapper.put("华文行楷", PhysicalFonts.get("STXingkai"));

fontMapper.put("华文仿宋", PhysicalFonts.get("STFangsong"));

fontMapper.put("宋体扩展", PhysicalFonts.get("simsun-extB"));

fontMapper.put("仿宋", PhysicalFonts.get("FangSong"));

fontMapper.put("仿宋_GB2312", PhysicalFonts.get("FangSong_GB2312"));

fontMapper.put("幼圆", PhysicalFonts.get("YouYuan"));

fontMapper.put("华文宋体", PhysicalFonts.get("STSong"));

fontMapper.put("华文中宋", PhysicalFonts.get("STZhongsong"));

mlPackage.setFontMapper(fontMapper);

}

}

3. 测试

@Test

void convertDocxToPdf() throws Exception {

String docxPath = "/Users/zsz/Project/demo/2020year/4yue/word2pdf/mytest.docx";

String pdfPath = "/Users/zsz/Project/demo/2020year/4yue/word2pdf/word2pdf.pdf";

Word2PdfUtils word2PdfUtils = new Word2PdfUtils();

word2PdfUtils.convertDocxToPdf(docxPath,pdfPath);

}

```

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐