2012-02-01 109 views
3

我需要能够使用java将docx转换为pdf。我尝试使用docx4j,但虽然它非常好,但我拥有的docx比它能处理的要复杂得多(格式化)。我决定看看一台PDF打印机是否可以处理它们,尽管它们并不完美,但它们是可以接受的。现在我面临着如何从JAVA自动化的问题,我发现唯一的解决方案是与MS Word的COM(我尝试使用Open Office API,它也无法处理DOCX格式)。Docx到PDF转换在java

我发现了几个COM的映射为java,如jacob,并尝试了他们,但我似乎无法找到合适的Word命令打印。代码我使用(I堆栈数块,我发现在网上一起)是:

 String sInputDoc = "fi.docx"; 
     boolean tVisible = false; 
     ActiveXComponent oWord = new ActiveXComponent("Word.Application"); 
     oWord.setProperty("Visible", new Variant(tVisible)); 
     Object oDocuments = oWord.getProperty("Documents").toDispatch(); 
     Object oDocument = Dispatch.call((Dispatch)oDocuments, "Open", sInputDoc).toDispatch(); 

     Dispatch oSelection = oWord.getProperty("Selection").toDispatch(); 
     Dispatch oFind = oWord.call(oSelection, "Find").toDispatch(); 
     Dispatch oWordBasic = (Dispatch) Dispatch.call(oWord, "WordBasic").getDispatch(); 
     Dispatch.call(oWordBasic, "FilePrint"); 

此代码然而,仅导致程序来尝试并保存文件,而不是打印(不知道为什么)。

现在可能的问题是:如何将打印操作发送给Word? (我做了我的研究,但大多数时候评论基本上都是开放性的文字和打印到PDF,但从来没有如何实际打印)如果有更好的选择,它们是什么?我很乐意与拥有免费许可证的任何产品合作。

在此先感谢。

+0

关于docx4j的更新:现在,除了基于开源XSL FO的转换之外,还有一种高保真度的非FO商业选择。请参阅http://www.docx4java.org/forums/pdf-output-f27/higher-fidelity-pdf-output-now-available-t2117.html – JasonPlutext 2015-10-21 05:19:18

回答

0

您可以尝试ODF转换器和JOD转换器的组合。 ODF转换器可以为ODT转换提供合理的DOCX,JOD转换器可以为pdf输出提供合理的ODT。印刷是另一回事,但我认为你只需要印制,因为你正在尝试的特定解决方案。

+0

怀疑您需要ODF Converter部分;最近的OO可以愉快地打开docx。所以只需使用JOD转换器。 – JasonPlutext 2012-11-01 18:53:55

+0

到目前为止,内置的DocX转换功能相当差劲。 ODFConverter在几个月前取得了长足的进步。我没有评估过最新版本。 – 2012-11-02 13:53:52