2014-06-18 109 views
0

我對docx4j很陌生。安裝完所有東西之後,我嘗試創建一個空的.docx文件,然後在其中寫入文本。下面的代碼:創建Word文檔時損壞的文件

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage(); 
wordMLPackage.getMainDocumentPart().addParagraphOfText("Hello Word!"); 
wordMLPackage.save(new java.io.File("HelloWord1.docx")); 

文件被創建成功,但是當我嘗試使用Word 2010中打開它,我得到一個錯誤信息,說文件已損壞。但是,當我用寫字板打開它時,一切都很好,並且文本在那裏。我能做些什麼來解決這個問題,並用Word 2010打開我創建的文檔?

編輯:我轉換損壞的文件壓縮,這裏的document.xml中:

<?xml version="1.0" encoding="UTF-8" standalone="true"?> 

-<w:document mc:Ignorable="w14 w15" xmlns:ns32="http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas" xmlns:ns31="http://schemas.openxmlformats.org/drawingml/2006/compatibility" xmlns:ns30="http://schemas.openxmlformats.org/officeDocument/2006/bibliography" xmlns:odgm="http://opendope.org/SmartArt/DataHierarchy" xmlns:odi="http://opendope.org/components" xmlns:oda="http://opendope.org/answers" xmlns:odq="http://opendope.org/questions" xmlns:odc="http://opendope.org/conditions" xmlns:odx="http://opendope.org/xpaths" xmlns:ns23="http://schemas.microsoft.com/office/2006/coverPageProps" xmlns:ns21="urn:schemas-microsoft-com:office:powerpoint" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:ns17="urn:schemas-microsoft-com:office:excel" xmlns:dsp="http://schemas.microsoft.com/office/drawing/2008/diagram" xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture" xmlns:dgm="http://schemas.openxmlformats.org/drawingml/2006/diagram" xmlns:ns12="http://schemas.openxmlformats.org/drawingml/2006/chartDrawing" xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:ns9="http://schemas.openxmlformats.org/schemaLibrary/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> 


-<w:body> 


-<w:p w14:textId="bde3dbce" w14:paraId="bde3dbce"> 


-<w:pPr> 

<w15:collapsed w:val="false"/> 

</w:pPr> 


-<w:r> 

<w:t>Hello Word!</w:t> 

</w:r> 

</w:p> 


-<w:sectPr> 

<w:pgSz w:w="12240" w:code="1" w:h="15840"/> 

<w:pgMar w:left="1440" w:bottom="1440" w:right="1440" w:top="1440"/> 

</w:sectPr> 

</w:body> 

</w:document> 

編輯2:所以小時後抓我的頭,以解決這個問題,我完全地卸載和刪除的所有引用docx4j時,重新添加了JAR文件。出於某種原因,之後再也沒有問題了。

+0

下面的答案可能是我的問題的解決方案。但有誰知道我可以如何編程地更改我的XML文件中的獨立屬性?任何解決方法將不勝感激,以及... – ArcDexx

回答

0

我運行了這個確切的代碼,使用當前穩定版本的docx4j(v3.1),沒有問題。在MS Word 2010中創建並打開了一個文檔。下面是我的測試類的完整內容,它在C驅動器的「測試」目錄中創建了一個Word文件(顯然適用於您的機器/操作系統):

經審查
public class PlayDocx4J { 

    public static void main(String[] args) { 

     try { 
      WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage(); 
      wordMLPackage.getMainDocumentPart().addParagraphOfText("Hello Word!"); 
      wordMLPackage.save(new java.io.File("c:/test/helloword.docx")); 
     } catch (Docx4JException e) { 
      System.err.println("ERROR " + e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 
} 

更新重新XML您提供的document.xml文件的內容,這個問題是在有XML聲明。就目前而言,它在Word中引發了一個損壞的文檔錯誤。 Word還會告訴你問題是什麼(第1行第54列中的錯誤)。如果您刪除standalone="true"屬性,然後將編輯的document.xml粘貼回zip文件,它將打開時沒有任何問題。

這引發了問題爲什麼您的生成文件包含此聲明(它不應該,我相信在任何情況下適當的值是standalone="yes")。答案必須在於Java實現中使用的XML轉換器。

(你可以在這裏閱讀更多關於這個聲明:http://www.xmlplease.com/xml/xmlquotations/standalone)。

+0

這真的很奇怪。該文件已創建,並且它看起來很好,因爲寫字板打開它沒有問題。它可能是我的MS Word版本嗎?我嘗試清理項目,重新啓動Eclipse和計算機...因爲這似乎不是一個代碼問題,我真的不知道如何解決這個問題。 – ArcDexx

+0

奇怪。我在Word 2010中打開文件就好了。你使用的是什麼版本的docx4j?你的代碼有錯誤嗎?你可以做的一件事是:將文件擴展名改爲.zip,打開壓縮文件,在其中打開'word'文件夾,並提取'document.xml' - 將其內容粘貼爲原始問題中的代碼,我們來看看 - 如果這個文件確實腐敗,那麼它應該是明顯的。 – Ben

+0

我也在運行docx4j的最新版本。你是什​​麼意思的錯誤陷阱?我粘貼了document.xml的內容,希望你能從那裏找到解決方案。 – ArcDexx