docx4j (只能是docx)word转pdf 【增加:中文宋体(中文正文)类型转换乱码】

直接用java代码进行 word 转pdf ,测试没有问题

docx4j 依赖的库:


    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

java 代码如下:

/**
 * docx文档转换为PDF
 *
 * @param pdfPath PDF文档存储路径
 * @throws Exception 可能为Docx4JException, FileNotFoundException, IOException等
 */
public static void convertDocxToPDF(String docxPath, String pdfPath) throws Exception {
    OutputStream os = null;
    try {
        InputStream is = new FileInputStream(new File(docxPath));
        WordprocessingMLPackage mlPackage = WordprocessingMLPackage.load(is);
        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);

        os = new java.io.FileOutputStream(pdfPath);

        FOSettings foSettings = Docx4J.createFOSettings();
        foSettings.setWmlPackage(mlPackage);
        Docx4J.toFO(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);

    }catch(Exception ex){
        ex.printStackTrace();
    }finally {
        IOUtils.closeQuietly(os);
    }
}

 

你可能感兴趣的:(JAVA)