【发布时间】:2021-12-24 20:16:12
【问题描述】:
我希望使用 Java 或 Kotlin 将 .XPS 文件转换为文本。
Aspose 对我来说太贵了。
我找到了Java-AXP,它应该可以完成这项工作,但我没有找到任何文档或示例代码。
我设法将 Java-AXP 核心添加到 IntelliJ 中的项目库中。我现在可以从我的项目中访问这些文件。但实际上了解如何使用该库来进行文本转换是我无法理解的。
我发现 here 唯一尝试使用带有示例代码的库:
File b =new File("D:\\Chemia\\Clients\\Clients\\Docs\\Equipment\\CCP\\XPSOCRDemo.xps");
IXPSAccess access = new XPSFileAccessImpl(b);
IXPSFileAccess xpsFileAccess = access.getFileAccess();
XPSDocumentAccessImpl xpsimpl=new XPSDocumentAccessImpl(access);
int docunum = xpsimpl.getFirstDocNum();
IDocumentStructure structure=xpsimpl.getDocumentStructure(docunum);
List<IOutlineEntry> list=(List<IOutlineEntry>)
structure.getDocumentStructureOutline().getDocumentOutline().getOutlineEntry(
);
list.stream().forEach(restu->{
System.out.println( restu.getOutlineTarget());
});
但是,我确实得到了与 OP 相同的空指针异常,但我无法修复它。我需要一个有效的示例代码才能自己继续。
那么我该如何使用 Java-AXP?还是有替代库?我愿意使用任何东西。
感谢您的帮助。
编辑:
@Abra 谢谢。
Exception in thread "main" java.lang.IllegalStateException: structure must not be null
at MainKt.main(main.kt:80)
at MainKt.main(main.kt)
73 | val structure = xpsimpl.getDocumentStructure(0)
80 | val list = structure.documentStructureOutline?.documentOutline?.outlineEntry as List<IOutlineEntry>?
xpsimpl.getDocumentStructure(docunum) 为空
我不能将网站用于我的目的,因为 XPS 文件包含敏感信息。
编辑:这是我找到的解决方案。
我找到了使用 Java-AXP 的this repo。但是,我使用的 java-axp-core.jar 似乎有些不同 Google Code
所以我将javaaxp folder 复制到我的项目中。
它需要 Apache Tika,所以我从 Apache Tika 下载了 tika-app-2.1.0.jar,并通过 Project Structure 菜单将其包含在我的项目中。
在 XPSZipFileAccess.java 中,我对 IOUtils 的导入有误,因此我进行了更改
import org.apache.tika.io.IOUtils;
到
import org.apache.commons.io.IOUtils;
现在 Java-AXP 可以解析所有引用。
然后我将XPSParser.java 复制到我的项目的根目录,并确保所有导入都正常工作。
在第 90 行的 DocSaver.java 中,我找到了使用 XPSParser 的位置,并调整了代码,以便将 XPS 文件转换为文本:
val xpsFile = File(path + "filename.xps")
val inputStream = FileInputStream(xpsFile)
val metadata = Metadata()
val handler = BodyContentHandler()
XPSParser().parse(inputStream, handler, metadata, ParseContext())
val docContents = handler.toString()
println(docContents)
inputStream.close()
希望对某人有所帮助。
【问题讨论】:
-
您好,欢迎您! 1. 识别空值。 2.抓住或修复它! (stackoverflow.com/q/218384/592355)
-
@xerx593 谢谢。结构为空,因此我没有获取文件内容。