首页 文章

使用Java将docx文件转换为PDF

提问于
浏览
5

我正在寻找一些"stable"方法将DOCX文件从MS WORD转换为PDF . 从现在开始,我已经将OpenOffice作为监听器使用,但它经常挂起 . 问题是我们遇到许多用户想要同时将SXW,DOCX文件转换为PDF的情况 . 还有其他可能吗?我尝试使用此站点中的示例:https://angelozerr.wordpress.com/2012/12/06/how-to-convert-docxodt-to-pdfhtml-with-java/但输出结果不好(转换后的文档有错误,布局已经完全修改) .

这是"source" docx文件:
enter image description here

这里是用docx4j转换的文档,文档中有一些异常文本 . 此外,右上角的文字也丢失了 .

enter image description here

这个是使用OpenOffice创建的PDF,从docx转换为pdf . 有些文字缺少“右上角”

enter image description here

是否有其他选项将docx转换为PDF格式的pdf?

1 回答

  • 2

    有很多方法可以进行转换使用的方法之一是使用POI和DOCX4j

    InputStream is = new FileInputStream(new File("your Docx PAth"));
                WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage
                        .load(is);
                List sections = wordMLPackage.getDocumentModel().getSections();
                for (int i = 0; i < sections.size(); i++) {
                    wordMLPackage.getDocumentModel().getSections().get(i)
                            .getPageDimensions();
                }
                Mapper fontMapper = new IdentityPlusMapper();
                PhysicalFont font = PhysicalFonts.getPhysicalFonts().get(
                        "Comic Sans MS");//set your desired font 
                fontMapper.getFontMappings().put("Algerian", font);
                wordMLPackage.setFontMapper(fontMapper);
                PdfSettings pdfSettings = new PdfSettings();
                org.docx4j.convert.out.pdf.PdfConversion conversion = new org.docx4j.convert.out.pdf.viaXSLFO.Conversion(
                        wordMLPackage);
                //To turn off logger
                List<Logger> loggers = Collections.<Logger> list(LogManager
                        .getCurrentLoggers());
                loggers.add(LogManager.getRootLogger());
                for (Logger logger : loggers) {
                    logger.setLevel(Level.OFF);
                }
                OutputStream out = new FileOutputStream(new File("Your OutPut PDF path"));
                conversion.output(out, pdfSettings);
                System.out.println("DONE!!");
    

    这完美,甚至尝试了多个DOCX文件 .

相关问题