我正在寻找一些“稳定”方法将DOCX文件从MS WORD转换为PDF。从现在开始,我已经将OpenOffice作为监听器使用,但它经常挂起。问题是我们遇到许多用户想要同时将SXW,DOCX文件转换为PDF的情况。还有其他可能吗?我尝试使用此站点中的示例:https://angelozerr.wordpress.com/2012/12/06/how-to-convert-docxodt-to-pdfhtml-with-java/但输出结果不好(转换后的文档有错误,布局已经完全修改)。
这里是使用docx4j转换的文档,文档中包含一些异常文本。此外,右上角的文字也丢失了。
这个是使用OpenOffice创建的PDF,从docx转换为pdf。有些文字缺少“右上角”
是否还有其他选项可以将docx转换为PDF格式的pdf?
答案 0 :(得分: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文件。