LibreOffice
一个选项是libreoffice/openoffice 处于无头模式(确保所有其他 libreoffice 实例首先关闭):
libreoffice --headless --convert-to "txt:Text (encoded):UTF8" mydocument.doc
有关详细信息,请参阅例如此链接:http://ask.libreoffice.org/en/question/2641/convert-to-command-line-parameter/
有关 libreoffice 过滤器列表,请参阅 http://cgit.freedesktop.org/libreoffice/core/tree/filter/source/config/fragments/filters
由于 openoffice 命令行语法有点过于复杂,所以有一个方便的包装器可以使过程更容易:unoconv。
Apache POI
另一个选项是Apache POI — 一个得到很好支持的 Java 库,它与 antiword 不同,它可以读取、创建和转换 .doc、.docx、.xls、.xlsx、.ppt、.pptx 文件。
以下是将.doc 或.docx 文档转换为纯文本的最简单的Java 代码:
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import org.apache.poi.POITextExtractor;
import org.apache.poi.extractor.ExtractorFactory;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.xmlbeans.XmlException;
public class WordToTextConverter {
public static void main(String[] args) {
try {
convertWordToText(args[0], args[1]);
} catch (ArrayIndexOutOfBoundsException aiobe) {
System.out.println("Usage: java WordToTextConverter <word_file> <text_file>");
}
}
public static void convertWordToText(String src, String desc) {
try {
FileInputStream fs = new FileInputStream(src);
final POITextExtractor extractor = ExtractorFactory.createExtractor(fs);
FileWriter fw = new FileWriter(desc);
fw.write(extractor.getText());
fw.flush();
fs.close();
fw.close();
} catch (IOException | OpenXML4JException | XmlException e) {
e.printStackTrace();
}
}
}
# Maven dependencies (pom.xml):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.wordconv</groupId>
<artifactId>my.wordconv.converter</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.17</version>
</dependency>
</dependencies>
</project>
注意:您需要将 apache poi 库添加到类路径中。在 ubuntu/debian 上,这些库可以使用sudo apt-get install libapache-poi-java 安装——这会将它们安装在/usr/share/java 下。对于其他系统,您需要download 库并将存档解压缩到您应该使用的文件夹而不是/usr/share/java。如果您使用 maven/gradle(推荐选项),则包括 org.apache.poi dependencies,如代码 sn-p 所示。
相同的代码适用于.doc 和.docx,因为将通过检查二进制流来选择所需的转换器实现。
编译上面的类(假设它在默认包中,并且apache poi jars在/usr/share/java下):
javac -cp /usr/share/java/*:. WordToTextConverter.java
运行转换:
java -cp /usr/share/java/*:. WordToTextConverter doc.docx doc.txt
一个clonable gradle project,它提取所有必要的依赖项并生成包装器外壳脚本(使用gradle installDist)。