Java 如何使用ApachePOI保存word docx文件。换成萨克森9HE而不是萨克森9PE

Java 如何使用ApachePOI保存word docx文件。换成萨克森9HE而不是萨克森9PE,java,apache,ms-word,apache-poi,docx,Java,Apache,Ms Word,Apache Poi,Docx,我使用最新的ApachePOI3.13-beta1版本。我得到一个错误,比如: Exception in thread "main" org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : null at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPac

我使用最新的ApachePOI3.13-beta1版本。我得到一个错误,比如:

Exception in thread "main" org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : null
at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:507)
at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1441)
at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:202)
Caused by: java.lang.NullPointerException
    at com.saxonica.config.Verifier.loadLicense(Verifier.java:141)
    at com.saxonica.config.ProfessionalConfiguration.loadLicense(ProfessionalConfiguration.java:391)
    at com.saxonica.config.ProfessionalConfiguration.isLicensedFeature(ProfessionalConfiguration.java:367)
    at net.sf.saxon.IdentityTransformer.transform(IdentityTransformer.java:36)
    at org.apache.poi.openxml4j.opc.StreamHelper.saveXmlInStream(StreamHelper.java:80)
    at org.apache.poi.openxml4j.opc.internal.marshallers.ZipPartMarshaller.marshallRelationshipPart(ZipPartMarshaller.java:174)
    at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:468)
我的代码非常简单:

String filePath = "d:\\doc\\file1.docx"
try {
    FileInputStream fis = new FileInputStream(filePath);
    XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));

    System.out.println("here I can read my file and work on it");

    String filePathOut = filePath.replace("file", "file_result");
    xdoc.write(new FileOutputStream(new File(filePathOut)));
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} catch (InvalidFormatException e) {
    e.printStackTrace();
}
我想替换并保存我的文件

编辑1。 看起来ApachePOI与需要许可证的saxon9pe库配合使用。 我可以设置一些避免poi中的saxon9pe并使用saxon9he吗


谢谢。

这里是我如何打开和关闭docx文件的:

final XWPFDocument docx = new XWPFDocument(new FileInputStream(new File(inFileNameString)));
final FileOutputStream out = new FileOutputStream(outFileNameString); docx.write(out);
out.close();
docx.close();

以下是如何打开和关闭docx文件:

final XWPFDocument docx = new XWPFDocument(new FileInputStream(new File(inFileNameString)));
final FileOutputStream out = new FileOutputStream(outFileNameString); docx.write(out);
out.close();
docx.close();

谢谢你的回答。默认情况下,它工作正常。但是我有更具体的解析器,比如saxon9pe,而不是saxon9he,它需要许可证谢谢你的回答。默认情况下,它工作正常。但是我有更具体的解析器,比如saxon9pe,而不是saxon9he,它需要许可证apachepoi应该只使用默认的javaxml解析器。如果删除将默认设置更改为saxon的自定义设置,会发生什么情况?当我删除自定义设置或设置库许可证时,它会起作用。但是项目的这一部分不能使用saxon9pe。那么,我可以手动将默认的saxon解析器9pe更改为9he变体吗?ApachePOI只是向JVM请求一个XML解析器,它对saxon一无所知。您需要阅读saxon的安装文档,并了解如何告诉JVM使用哪种apachepoi应该只使用默认的javaxml解析器。如果删除将默认设置更改为saxon的自定义设置,会发生什么情况?当我删除自定义设置或设置库许可证时,它会起作用。但是项目的这一部分不能使用saxon9pe。那么,我可以手动将默认的saxon解析器9pe更改为9he变体吗?ApachePOI只是向JVM请求一个XML解析器,它对saxon一无所知。您需要阅读saxon的安装文档,并了解如何告诉它+JVM使用哪个