使用Java/Kotlin实现XPS文件转文本的方法及示例
用Java/Kotlin实现XPS文件转文本的方案
我希望使用Java或者Kotlin将.XPS文件转换为文本。
Aspose的定价对我来说过高,无法承担。我找到了Java-AXP库理论上可以实现该需求,但找不到对应的官方文档或示例代码。我已经把Java-AXP Core引入到IntelliJ项目的依赖库中,可以在项目内访问库的类和方法,但不知道怎么调用该库实现文本转换功能。
我仅找到一段该库的使用示例代码:
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()); });
但运行后我和原帖发布者遇到了相同的空指针异常,无法修复,需要可运行的示例代码才能继续开发。想知道该如何正确使用Java-AXP,或者有没有其他替代方案,我可以接受任何可用的离线处理方案,因为XPS文件包含敏感信息,无法使用在线网站处理。
运行时抛出的异常如下:
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)返回了null。
已验证的可行解决方案
我找到了一个使用Java-AXP的开源项目代码,和我从公开渠道下载的java-axp-core.jar存在部分差异,所以我采用了以下步骤完成配置:
- 直接拷贝该开源项目中的javaaxp文件夹到我的项目源码目录下
- 该库依赖Apache Tika,下载tika-app-2.1.0.jar并引入到项目依赖中
- 修正XPSZipFileAccess.java中的错误导入:
将import org.apache.tika.io.IOUtils;修改为import org.apache.commons.io.IOUtils;
修正后Java-AXP的所有引用都可以正常解析 - 拷贝该项目中的XPSParser.java到我的项目根目录,确认所有导入正常
之后我参考该项目中DocSaver.java的XPSParser调用方法,改编后得到以下可正常运行的XPS转文本代码(Kotlin写法):
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()
该方案可以离线完成XPS文件的文本提取,不会泄露敏感数据。
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

