使用 JODConveter 的 doc 到 docx 转换失败并出现错误代码:2074

Posted

技术标签:

【中文标题】使用 JODConveter 的 doc 到 docx 转换失败并出现错误代码:2074【英文标题】:doc to docx conversion using JODConveter failing with errorCode: 2074 【发布时间】:2016-10-19 15:21:12 【问题描述】:

我需要将 doc 转换为我正在使用 JODConveter (OpenOffice) 的 docx,但不幸的是,我的代码因错误代码 2074 而中断。任何人都可以更深入地了解这个 errorCode 的含义以及我如何修复它。

我的代码分享如下:

OfficeManager officeManager =
    new DefaultOfficeManagerConfiguration().setOfficeHome(
    new File("C:\\Program Files (x86)\\OpenOffice4")).buildOfficeManager();

officeManager.start(); 

OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager); 

DocumentFormat docx = converter.getFormatRegistry().getFormatByExtension("docx");
docx.setStoreProperties(DocumentFamily.TEXT,
                        Collections.singletonMap("FilterName",
                                                 "MS Word 2007 XML"));

converter.convert(new File("C:\\localFiles\\abc.doc"),
                  new File("C:\\localFiles\\abc_new.docx"));

officeManager.stop();

但是,如果我将预期文件的扩展名从 docx 更改为 pdf,则上述代码可以正常工作。

【问题讨论】:

@Brutal_JL 你能提供一些意见吗? 【参考方案1】:

您显然是在 Windows 上,因此有一个更稳定的解决方案,它还可以为您提供保真度更高的转换结果。

您必须安装任何版本的 Office(2007 或更高版本)或从 Microsoft 下载并安装兼容包(如果尚未完成)。然后,您可以使用以下命令轻松地将 .doc 转换为 .docx:

"C:\Program Files\Microsoft Office\Office12\wordconv.exe" -oice -nme <input file> <output file>

where 需要是完全限定的路径名​​。

该命令可以使用for轻松应用于多个文档:

for %F in (*.doc) do "C:\Program Files\Microsoft Office\Office12\wordconv.exe" -oice -nme "%F" "%Fx"

或者您可以从 Java 中调用命令:

Process p = Runtime.getRuntime().exec(
    new String[] 
        "C:\Program Files\Microsoft Office\Office12\wordconv.exe",
        "-oice",
        "-nme",
        "C:\\localFiles\\abc.doc",
        "C:\\localFiles\\abc_new.docx"
    );
int exitVal = p.waitFor();

【讨论】:

我需要在我的 Java 代码中将 doc 转换为 docx,因为我需要稍后通过将生成的 docx 转换为 XWPFDocument 文档来注入自定义属性。我不确定您提供的这些命令是否可以从代码中执行。 PS:我的 Windows 机器上安装了 Office。

以上是关于使用 JODConveter 的 doc 到 docx 转换失败并出现错误代码:2074的主要内容,如果未能解决你的问题,请参考以下文章

Windows批量查找文件

Just do it,一起来玩篮球吧

UDF函数 解码url

Rails 3中的tap方法 - 我是否正确理解了API Docs?

树枝上“做”标签的目的是什么?

爬虫利器pyquery使用介绍