2015-09-21 72 views
1

我使用最新的Apache POI 3.13-beta1版本。我得到一個錯誤,如:如何使用Apache poi保存word docx文件。更改爲saxon9he而不是saxon9pe

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. 它看起來像Apache poi與我們的saxon9pe lib需要許可證。 我可以設置一些東西來避免poi中的這個saxon9pe並使用saxon9he?

謝謝。

+0

的Apache POI應該只使用默認的Java XML解析器。如果您刪除了將默認設置更改爲撒克遜人的定製,會發生什麼情況? – Gagravarr

+0

它在我刪除它或者設置庫許可證時有效。但是這個項目的這部分不能使用saxon9pe。那麼我可以手動將默認的撒克遜分析器9pe更改爲9he變體嗎? – oakslist

+0

Apache POI只是問一個XML解析器的JVM,它並不知道撒克遜的任何信息。你需要閱讀撒克遜的安裝文檔,看看如何告訴它+ JVM使用哪一個 – Gagravarr

回答

3

在這裏,我如何打開和關閉docx文件:

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

感謝您的回答。它默認工作正常。但我有更具體的解析器,如saxon9pe,而不是需要許可證的saxon9he – oakslist

相關問題