docx4j 入門

最新版本的這個文件總是可以找到 docx4j svn in /docs (在 Flat OPC XML 格式為 Word 2007, HTML ,和 PDF )。

這份文件是從英文翻譯使用谷歌翻譯。 如果你能提高翻譯,請隨時發送給你的改進版。 對於最近的報告,總是指英文版本。

什麼是 docx4j

docx4j 是一個解壓縮庫的docx“包”,並解析WordprocessingML XML創建一個內存中的代表性 Java 最近版本 docx4j 也支援PowerPoint pptx文件。

它是在概念上類似於微軟的OpenXML SDK,它是對的。NET。

docx4j 是開源的,可以按照Apache許可證(2版)。 作為一個開放源碼項目,歡迎踴躍投稿。 請參閱 docx4j 論壇 http://dev.plutext.org/forums/ 了解詳情。

docx4j 嚴重依賴 JAXB,JCP的標準 XML綁定的Java。 你能想到的 docx4j 作為一個 JAXB的實施(其中包括):

* 打開包裝公約

* WordprocessingML(docx)的,部分的Open XML

* Presentation ML (pptx) part of OpenXML

該圖書館的目的是往返docx文件100%的保真度,並支持所有2007 WordML中。 支持新的Word 2010功能,我們會盡快添加。

docx4j 項目是由 Plutextwww.plutext.com )。

docx4j 為你?

docx4j 負責處理的docx文件(和pptx介紹)在爪哇。

這不是舊的二進制(。doc)格式文件。 針對這一情況,看看在Apache的POI的HWPF。 (事實上, docx4j 使用HWPF基本轉換。文件,以。docx)的

它也不是為 RTF文件。

如果你想處理的docx文件在。NET平台,你應該看看微軟的OpenXML SDK的代替。

一種替代方法 docx4j 是Apache的POI。 我特別建議,對於處理 Excel文件。 它也可以用來處理 Word文檔,而且由於它使用XMLBeans的(不使用JAXB)它可能是一個更好的選擇,如果你想使用XMLBeans。

什麼種類的東西可以做 docx4j

* 打開現有的docx(從文件系統,SMB / CIFS通訊,使用WebDAV的VFS的)

* 創建新的docx

* 編程操縱的docx文件(當然)

* Template substitution; CustomXML binding

* 導入二進制文檔(使用Apache的POI HWPF)

* 生產/消費的Word 2007的xmlPackage(封裝)格式

* 保存的docx,以文件系統作為一個的docx(即壓縮),或的JCR(解壓)

* 申請轉換,包括常用的過濾器

* 導出為HTML或PDF

* 漫射/比較文件,段落或特殊和差別待遇(內容控制)

* 支持字體(字體替換,和使用任何字體嵌入到文檔)

項目使用 docx4j

Docx4all是基於 Swing的文字處理器。

Plutext協作為 Word 2007使用 docx4j 在服務器上,以切碎成小塊的Word文件,可獨立版本。

請聯繫 Plutext如果您希望您的項目在這裡列出。

什麼它支持Word文檔?

docx4j 可以讀 /寫的docx文件創建或Word 2007或早期版本,具有兼容包安裝。

有關部分 docx4j 從 ECMA的生成模式。

它不能讀 /寫的Word 2003 XML文檔。 主要的問題是,這些不同的XML命名空間。

docx4j 支持的Word 2010的docx文件。

運用 docx4j 二進制文件

你可以下載最新版本的 docx4j http://dev.plutext.org/docx4j/

一般來說,我們建議您開發針對目前每晚構建,因為最新的正式版本通常可以數個月大。

支持jar文件中可以找到的。tar.gz的版本,或者在有關的子目錄。

運用 docx4j 通過 Maven

Maven POM 可在 http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/m2/org/docx4j/docx4j

JDK版本

你需要使用 Java 1.5+

這是因為JAXB的 1 如果您必須使用1.4,retrotranslator可以 使據說 它的工作。

關於 JAXB的一個詞

docx4j 使用JAXB的馬歇爾和unmarshall的關鍵部件在WordprocessingML文件,包括主要文件的一部分,風格的一部分,主題的一部分,性能部分。

JAXB是包含在Sun的Java 6中的分佈,而不是1.5。 因此,如果您使用的是1.5的JDK,你將需要在您的JAXB 2.1.x類路徑。

位的 docx4j org.docx4j.wml org.docx4j.dml 產生了使用JAXB的XJC。 我們修改了wml.xsd架構,尤其是這樣產生的,關鍵是一類多一點人友好的(即不是所有的開始與 CT_和ST_)。

Log4j的

docx4j 使用log4j的日誌記錄。 要啟用日誌記錄,您需要一個 log4.properties或log4j.xml您的類路徑。 例如見 http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/src/main/resources/log4j.xml

Javadoc

Javadoc中在線瀏覽或下載,可以在目錄中找到 http://dev.plutext.org/docx4j/

docx4j 源代碼

要獲得一個複製的電流源代碼:

svn co http://dev.plutext.org/svn/docx4j/trunk/docx4j docx4j

或者,你可以瀏覽它的在線,網址為:

http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/

建築 docx4j 從源

命令行 - 快捷操作

“快”,即只要你有Maven和Ant安裝。 請注意,我們只是使用Maven來獲取依賴,不求實際的建設。

創建一個目錄稱為工作區,和CD進去。

svn co http://dev.plutext.org/svn/docx4j/trunk/docx4j docx4j

開放的pom.xml,找到一行字:

<systemPath>/usr/lib/jvm/java-6-sun/jre/lib/rt.jar</systemPath>

並編輯它來適應你的系統。

mvn install

ant dist

這 ant命令將創建 docx4j.jar並把它和所有它的依賴在dist目錄。

日食

先決條件

* Eclipse的安裝

* 安裝一個Eclipse插件,例如顛覆 http://subclipse.tigris.org/update_1.2.x

* 安裝 Maven and the Eclipse plugin

而且,正如上面討論:

* Java 1.5或6

* JAXB的: 包括執行的JAXB的Java 6中, 在2.x的參考實現。 (這是價格支持無論是在運行時)

說明

* File > New "Project .." > SVN > Checkout Projects from SVN

* 創建一個新的存儲庫的位置;網址是 http://dev.plutext.org/svn/docx4j

* 點擊文件夾 "trunk",並選擇 docx4j;點擊下一步

* 您要檢查它作為一個項目的配置使用的新建項目嚮導

* 然後選擇Java> Java項目,請點擊下一頁

* 選擇一個項目名稱(例如,'docx4j'),然後單擊下一步

* 點擊完成(我們將定義的Java構建設置在後面的步驟)

後一對夫婦的其他對話框,你應該有新的項目在您的工作區。

現在,我們需要配置 類路徑 等,以便它在Eclipse可以建立。

* 生成路徑>“配置構建路徑> Java構建路徑>源標籤

* 點擊鋼骨混凝土,然後按刪除按鈕

* 然後點擊“添加文件夾”,並瀏覽到src /主/ Java和剔的Java'

* 然後添加 src/svg, src/diffx and src/pptx4j/java 以及

在Maven位:

* 請確保您有安裝Maven和它的插件-見上面的先決條件。

* 安裝在運行mvn docx4j 您從一個命令提示符(以防萬一)

* 右擊項目“>的Maven 2>”啟用

該項目現在應該在Eclipse工作沒有錯誤2

打開一個現有的docx文件

org.docx4j.openpackaging.packages. WordprocessingMLPackage 代表一個 docx文檔。

要加載的文件,所有您需要做的是:

WordprocessingMLPackage wordMLPackage =
WordprocessingMLPackage.load(new java.io.File(inputfilepath));

這種方法還可以加載平板的OPC XML文件。

然後,您可以得到的主要文件的一部分(字/ document.xml):

MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();

在此之後,您可以操作的內容。

WordML中的概念

做任何事情遠遠超出這一點,你需要有一個基本了解WordML中的概念。

根據微軟開放包裝規格,每個 docx文檔是由一個數部分文件,壓縮了。 通常是XML的一個部分,但未必是(1圖像的一部分,例如,是不是)。

一個介紹WordML中超出了範圍本文件。 你可以找到一個非常可讀的介紹,在1 第3版(底漆)在 http://www.ecma-international.org/publications/standards/Ecma-376.htm http://www.ecma-international.org/news/TC45_current_work/TC45_available_docs.htm (一更好的聯繫,因為它不是壓縮了)。

JAXB的:編組和解組

docx4j 包含一個類代表每個部分。 例如,有一個 MainDocumentPart 類。 XML的部分繼承 JaxbXmlPart ,其中包含一個成員叫 jaxbElement 當您要使用的內容的一部分,你的工作與jaxbElement。

當你打開一個 docx文檔使用 docx4jdocx4j 自動 反編排 的內容,每個XML部分一個強類型的Java對象樹( jaxbElement)。

同樣,如果/當你告訴 docx4j 保存這些 Java對象作為一個的docx, docx4j 自動 糾察 jaxbElement 在每一部分。

有時候你會希望自己的東西編組或解組。 org.docx4j.jaxb.Context 定義中使用的所有JAXBContexts docx4j

Jc

org.docx4j.wml
org.docx4j.dml

org.docx4j.dml.picture

org.docx4j.dml.wordprocessingDrawing

org.docx4j.vml
org.docx4j.vml.officedrawing

org.docx4j.math

jcThemePart

org.docx4j.dml

jcDocPropsCore

org.docx4j.docProps.core

org.docx4j.docProps.core.dc.elements

org.docx4j.docProps.core.dc.terms

jcDocPropsCustom

org.docx4j.docProps.custom

jcDocPropsExtended

org.docx4j.docProps.extended

jcXmlPackage

org.docx4j.xmlPackage

jcRelationships

org.docx4j.relationships

jcCustomXmlProperties

org.docx4j.customXmlProperties

jcContentTypes

org.docx4j.openpackaging.contenttype

jcPML

org.docx4j.pml
org.docx4j.dml

org.docx4j.dml.picture

建築

docx4j 有3個層次:

1。 org.docx4j.openpackaging

OpenPackaging處事在開放式打包約定級別:解壓縮1的docx成 WordprocessingMLPackage 和一組從第對象繼承;允許部分被添加/刪除;保存的docx

這一層本來是基於對 OpenXML4J(這也是使用由Apache的POI)。

一般子類零件 org.docx4j.openpackaging.parts.JaxbXmlPart

零件都被排列在一棵樹上。 如果部分後裔,將有 org.docx4j.openpackaging.parts.relationships.RelationshipsPart 其中確定的後裔部分。 該示例PartsList(見下一節)告訴您如何工作的。

阿JaxbXmlPart有一個內容樹:

public Object getJaxbElement() {
return jaxbElement;
}

public void setJaxbElement(Object jaxbElement) {
this.jaxbElement = jaxbElement;
}

2。 JAXB的 內容樹 是第二個層面的三層模型。

大部分地區(包括MainDocumentPart,樣式,頁眉/頁腳,註釋, 尾注 /腳註)的使用 org.docx4j.wml (WordprocessingML); WML的 提述 org.docx4j.dml 圖形處理(DrawingML)作為必要的。

這些類都從打開 XML模式

3。 org.docx4j.model

這個軟件包的基礎上降低2層,提供額外的功能,並正在逐步進一步發展。

樣品

該軟件包包含例子org.docx4j.samples如何做事與 docx4j 這些措施包括:

基礎知識

* CreateWordprocessingMLDocument

* DisplayMainDocumentPartXml

* OpenAndSaveRoundTripTest

* OpenMainDocumentAndTraverse

輸出 /轉型

* CreateHtml

* CreatePdf

扁平的OPC XML的

* ExportInPackageFormat

* ImportFromPackageFormat

圖像處理

* AddImage

* ConvertEmbeddedImageToLinked

第一部分處理

* CopyPart

* ImportForeignPart

* PartsList

* StripParts

雜項

* CompareDocuments

* CreateDocxWithCustomXml

* CustomXmlBinding

* DocProps

* Filter

* HyperlinkTest

* NumberingRestart

* UnmarshallFromTemplate

如果您安裝了源代碼,你就會有這個包了。

如果你沒有,你可以瀏覽它的在線,在

http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/src/main/java/org/docx4j/samples

此外,還有各種 樣本文件 在/採樣docs目錄,這些是最容易進入的檢查出 docx4j 使用svn。

零件清單

為了更好地了解如何 docx4j 工程和結構的docx文檔你可以運行 PartsList 樣本上的docx(或pptx)。 如果這樣做,它會列出等級的零件用在這個包。 它會告訴你哪個類是用來表示每個部分,如該部分是一個JaxbXmlPart,它還會告訴你什麼階層的 jaxbElement 的。

例如:

Part /_rels/.rels [org.docx4j.openpackaging.parts.relationships.RelationshipsPart]
containing JaxbElement:org.docx4j.relationships.Relationships

Part /docProps/app.xml [org.docx4j.openpackaging.parts.DocPropsExtendedPart]
containing JaxbElement:org.docx4j.docProps.extended.Properties

Part /docProps/core.xml [org.docx4j.openpackaging.parts.DocPropsCorePart]
containing JaxbElement:org.docx4j.docProps.core.CoreProperties

Part /word/document.xml [org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart]
containing JaxbElement:org.docx4j.wml.Document

Part /word/settings.xml [ org.docx4j.openpackaging.parts.WordprocessingML .DocumentSettingsPart]
containing JaxbElement:org.docx4j.wml.CTSettings

Part /word/styles.xml [ org.docx4j.openpackaging.parts.WordprocessingML .StyleDefinitionsPart]
containing JaxbElement:org.docx4j.wml.Styles

Part /word/media/image1.jpeg [ org.docx4j.openpackaging.parts.WordprocessingML .ImageJpegPart]

遍歷的docx

OpenMainDocumentAndTraverse.java 在樣本目錄顯示您如何遍歷一個的docx JAXB的代表性。

關於 JAXB的一個惱人的事,是一個對象說一個表可以表示為 org.docx4j.wml.Tbl (如您所期望的)。 或者它可能被包裝在一個 javax.xml.bind.JAXBElement在這種情況下,我得到了真正的表,你必須做的是這樣的:

if ( ((JAXBElement)o).getDeclaredType().getName().equals( "org.docx4j.wml.Tbl" ) )

org.docx4j.wml.Tbl任務型=(org.docx4j.wml.Tbl)((JAXBElement)海外)。的getValue();

創建一個新的docx

要創建一個新的docx:

/ /創建包

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();

/ /保存它

wordMLPackage.save(new java.io.File("helloworld.docx") );

就是這樣。

createPackage() 是一個方便的方法,它的作用:

/ /創建包

WordprocessingMLPackage wordMLPackage = new WordprocessingMLPackage();

/ /創建主文檔的一部分(字/ document.xml)

MainDocumentPart wordDocumentPart = new MainDocumentPart();

/ /創建主文檔的一部分內容

ObjectFactory factory = Context.getWmlObjectFactory();

org.docx4j.wml.Body body = factory .createBody();

org.docx4j.wml.Document wmlDocumentEl = factory .createDocument();

wmlDocumentEl.setBody(body);

/ /把內容的部分

wordDocumentPart.setJaxbElement(wmlDocumentEl);

/ /添加主文檔的一部分,該程序包的關係

/ /(創造,如果有必要)

wmlPack.addTargetPart(wordDocumentPart);

添加一個段落的文字

MainDocumentPart 包含一個方法:

public org.docx4j.wml.P addStyledParagraphOfText(String styleId, String text)

您可以使用該方法添加一個段落,使用指定的樣式。

我們正在尋找的XML創建將是這樣的:

< w:p xmlns:w ="http://schemas.openxmlformats.org/wordprocessingml/2006/main" >
< w:r >
< w:t > Hello world </ w:t >
</ w:r >
</ w:p >

addStyledParagraphOfText 生成的JAXB對象結構的方式,並將其添加到文檔中。

ObjectFactory factory = Context.getWmlObjectFactory();

/ /創建該段

org.docx4j.wml.P para = factory.createP();

/ /創建文本元素

org.docx4j.wml.Text t = factory.createText();

t.setValue(simpleText);

/ /創建運行

org.docx4j.wml.R run = factory.createR();

run.getRunContent().add(t);

para.getParagraphContent().add(run);

/ /現在我們添加到文檔的正文段

Body body = this.jaxbElement.getBody();

Body.getEGBlockLevelElts().add(para)

或者,您可以創建段的編組的XML:

/ /假設字符串的XML包含XML以上

org.docx4j.wml.P para = XmlUtils.unmarshalString(xml);

對於這個工作,你必須確保所有命名空間聲明正確的字符串。

添加部分

如果你想添加一個新的風格的一部分? 具體方法如下:

/ /創建一個樣式的一部分

StyleDefinitionsPart stylesPart = new StyleDefinitionsPart();

/ /填充它的默認樣式

stylesPart.unmarshalDefaultStyles();

/ /添加樣式的一部分主文檔部分的關係

wordDocumentPart.addTargetPart(stylesPart);

你會採取同樣的方法添加頁眉或頁腳。

當您添加一個這樣的一部分,它會自動添加到源部分的關係的一部分。

一般來說,您還需要添加一個引用的部分(使用的關係身份證)到主文檔的一部分。 這適用於圖像,標題和頁腳。 (註釋,腳註和尾注有一點不同,就是你添加到主文檔的一部分是參照個人意見 /腳註 /尾注)。

的docx到(X)HTML的

docx4j 使用XSLT的docx轉換為 XHTML 1:

AbstractHtmlExporter exporter = new HtmlExporterNG2();

/ /注意:* 2 *有

/ /寫入 StreamResult(在這種情況下,輸出流)

OutputStream os = new java.io.FileOutputStream(inputfilepath + ".html" );

javax.xml.transform.stream.StreamResult result
= new javax.xml.transform.stream.StreamResult(os);

exporter.html(wordMLPackage, result,

inputfilepath + "_files" );

你會發現生成的HTML是乾淨的。

docx4j 使用Java的XSLT擴展函數做繁重,所以對 XSLT本身就是盡量簡單。

的docx為 PDF

docx4j 生產的XSL的,它可以反過來用於創建 PDF。

目前,維克多被集成到Apache的 docx4j 用於創建 PDF格式。 (不久,我們將改變這麼多的事 docx4j 生成的,使用您的首選的渲染,不管是維克多,或商業工具,如XEP)。

要創建一個 PDF:

/ /字體身份映射最好在微軟視窗

wordMLPackage.setFontMapper( new IdentityPlusMapper());

/ /設置轉換器

org.docx4j.convert.out.pdf.PdfConversion c
= new org.docx4j.convert.out.pdf.viaXSLFO.Conversion(wordMLPackage);

/ /寫入到輸出流

OutputStream os = new java.io.FileOutputStream(inputfilepath + ".pdf" );

c.output(os);

圖像處理

當您添加一個圖像文檔在Word 2007中,一般增加一條,作為一個新的部分(即你會發現一個組成部分,在造成的docx,包含圖像基地64格式)。

當您打開該文檔中 docx4jdocx4j will create an image part representing it.

它也可以創建一個鏈接的圖像。 在這種情況下,圖像不是嵌入的docx包,而是在其引用的外部位置。

docx4j BinaryPartAbstractImage 類包含的方法,使您可以同時創建嵌入和鏈接的圖像(連同適當的關係)。

/ **

*創建一個圖像的一部分從所提供的字節數組,將其附加到

*主要文件的一部分,並返回它.* /

public static BinaryPartAbstractImage createImagePart(WordprocessingMLPackage wordMLPackage,

byte [] bytes)

/ **

*創建一個圖像的一部分從所提供的字節數組,將其附加到源的一部分

*(如主文件的一部分,一個頭的一部分等),並返回它.* /

public static BinaryPartAbstractImage createImagePart(WordprocessingMLPackage wordMLPackage,

Part sourcePart, byte [] bytes)

/ **

*創建一個鏈接的圖像的一部分,並附它作為一個相對的指定來源的一部分

*(例如一個頭的一部分) * /

public static BinaryPartAbstractImage createLinkedImagePart(
WordprocessingMLPackage wordMLPackage, Part sourcePart, String fileurl)

對於一個圖像顯示在文檔中,也需要有適當的XML文件中的主要部分。 這個 XML可以採取 2基本形式:

* 在Word 2007 瓦特:繪製 表格

<w:p>

<w:r>

<w:drawing>

<wp:inline distT ="0" distB ="0" distL ="0" distR ="0" >

<wp:extent cx ="3238500" cy ="2362200" / >

<wp:effectExtent l ="19050" t ="0" r ="0" b ="0" / >

:

<a:graphic >

<a:graphicData .. >

<pic:pic >

:

<pic:blipFill>

< a:blip r:embed ="rId5" / >

:

< / pic:blipFill>

:

< / pic:pic>

< / a:graphicData>

< / a:graphic>

< / wp:inline>

< / w:drawing>

< / w:r>

< / w:p>

* 在Word 2003的VML的 瓦特:的PICT 格式

<w:p>

<w:r>

<w:pict>

<v:shapetype id ="_x0000_t75" coordsize ="21600,21600" .. >

<v:stroke joinstyle ="miter" / >

<v:formulas>

:

< / v:formulas>

:

< / v:shapetype>

<v:shape .. style ="width:428.25pt;height:321pt" >

< v:imagedata r:id ="rId4" o:title ="" / >

< / v:shape>

< / w:pict>

< / w:r>

< / w:p>

docx4j 可以創建Word 2007 瓦特:繪圖/可濕性粉劑:內聯 形式為您:

/ **

* Create a <wp:inline> element suitable for this image,

*它可以鏈接或嵌入在W:對 /瓦特:讀 /寫:繪圖。

* If the image is wider than the page, it will be scaled

*自動。 查看Javadoc的其他簽名。

* @帕拉姆庫馬拉 filenameHint任何文本,例如原始文件名

* @帕拉姆庫馬拉 altText像HTML的替代文字

* @帕拉姆庫馬拉 分化抑制因子ID1一個id獨一無二的文件

* @帕拉姆庫馬拉 id2另一名獨一無二的文件

* @帕拉姆庫馬拉 鏈接 ,如果這是真的要 聯繫不嵌入 * /

public Inline createImageInline(String filenameHint, String altText,

int id1, int id2, boolean link)

然後您可以添加到 瓦特:讀/寫:繪圖。

最後, docx4j,你可以轉換圖像格式,不支持從由Word(如PDF),向巴新,這是一個支持的格式。 為此, docx4j 使用 ImageMagick的 因此,如果您想使用此功能,您需要安裝ImageMagick的。 docx4j 調用 ImageMagick的使用:

Process p = Runtime.getRuntime().exec( "imconvert -density " + density + " -units PixelsPerInch - png:-" );

注意名稱 imconvert ,這是用來讓我們沒有提供一個完整路徑執行官。 您需要容納的。

文本提取

一個快速的方法來提取文本從的docx,是使用 TextUtils

public static void extractText(Object o, Writer w)

其中糾察的對象是通過傳遞一個 SAX ContentHandler的,為了輸出文本的作家。

文本替換

文本替換很容易,只要您正在搜索的字符串代表的是一個 org.docx4j.wml.Text 對象的表格您的期望。

不過,這並不一定是如此。 該字符串可以被打破跨文本運行任何理由如下:

* 部分的字是不同的格式(如粗體)

* 拼寫/語法

* 編輯命令(rsid)

docx4j 最終將容納這些案件,但不是現在。

除這一點,你可以做文字在各種替代方式,例如:

* 遍歷主文檔的一部分,並期待在 org.docx4j.wml.Text 對象

* 元帥為一個字符串,搜索/替換,那麼和解組再次

docx4j s XmlUtils還包括:

/ **

*給一個字符串包含WML的$(key1),)$(key2,返回一個合適的

*對象 .* /

public static Object unmarshallFromTemplate(String wmlTemplateString,

的java.util.HashMap <String,字符串映射)

見 UnmarshallFromTemplate例如,經營上一個包含:

<w:p>

<w:r>

<w:t> My favourite colour is ${colour} . < / w:t>

< / w:r>

< / w:p>

<w:p / >

<w:p>

<w:r>

<w:t> My favourite ice cream is ${icecream} . < / w:t>

< / w:r>

< / w:p>

提示和技巧

與平面的OPC XML格式

當你想看看裡面一個 docx文檔,它是一個有點痛苦要解壓縮它要看看有關部分。

有2種方式解決這個問題。

一個是 http://www.codeplex.com/PackageExplorer ,可以解壓縮的docx,和漂亮的打印部分。

另一種方法是保存為 Word的docx XML文檔(*. xml的)。 這將產生一個 XML文件,您可以打開一個 XML編輯器,如XPontus。

docx4j 可以打開單位的OPC XML文件,並保存它們。

要打開一個平面的OPC XML文件:

WordprocessingMLPackage wordMLPackage =
WordprocessingMLPackage.load(new java.io.File(inputfilepath));

為了保存為扁平的OPC的XML:

wordMLPackage.save(new java.io.File(outputfilepath));

在這兩種情況下,平OPC的代碼將被用於當且僅當文件擴展名是。xml的。

記住 UnmarshalFromString

當你操縱的docx文件,它是很有用的解組片段的XML(如字符串,表示一個段落要插入到文檔)。

例如,給定:

< w:p xmlns:w ="http://schemas.openxmlformats.org/wordprocessingml/2006/main" >
< w:r >
< w:t > Hello world </ w:t >
</ w:r >
</ w:p >

您可以簡單:

/ /假設字符串的XML包含XML以上

org.docx4j.wml.P para = XmlUtils.unmarshalString(xml);

克隆

要克隆一個 JAXB對象,使用下列方法之一在XmlUtils:

/ **克隆這個 JAXB對象,使用默認 JAXBContext。 * /

public static <T> T deepCopy(T value)

/ **克隆這個 JAXB對象 * /

public static <T> T deepCopy(T value, JAXBContext jc)

@XmlRootElement

最常用的對象有一個 @ XmlRootElement 註釋,這樣他們就可以被整理和unmarshalled。

在某些情況下,您可能會發現這個註釋丟失。

如果您不能添加到JAXB註釋的源代碼,另一種是 馬歇爾 它使用代碼是明確的擔憂由此產生的QName。 例如,XmlUtils包含:

/ **元帥到W3C的文件,供對象

*缺少@ XmlRootElement註解。 * /

public static org.w3c.dom.Document marshaltoW3CDomDocument(Object o, JAXBContext jc,
String uri, String local, Class declaredType)

你可以使用這像這樣:

CTFootnotes footnotes =
wmlPackage.getMainDocumentPart().getFootnotesPart().getJaxbElement().getValue();

CTFtnEdn ftn = footnotes.getFootnote().get(1);

/ /沒有 @ XmlRootElement上CTFtnEdn,所以..

Document d = XmlUtils.marshaltoW3CDomDocument( ftn,

Context.jc, Namespaces.NS_WORD12, "footnote" , CTFtnEdn. class );

如果您需要解組,您可以使用:

public static Object unmarshalString(String str, JAXBContext jc, Class declaredType)

docx4j 論壇

自由的社會中提供的支持 docx4j 座談會上,在 http://dev.plutext.org/forums/

這種討論通常是在英國。 如果你可以自願到中度一個論壇,你的語言,請讓我們知道。

其他支持選項

如果免費提供的社區支援 docx4j 論壇不能滿足您的需求,或者您只是想外包一些編碼,歡迎您購買節目,諮詢和優先支持 http://www.plutext.com/m/index.php/docx4j-support.html

通過購買服務的Plutext,你支持繼續發展 docx4j

路線圖

2010字的支持。 支持新的XML元素/模式介紹與Word 2010,並兼容機制。 這是主要的理由為3.0標籤。

網頁出口商: 擺脫舊的,規範的NG2的。 這樣做是為了消除任何'是我應該用'混亂,並集中精力/訣竅。

PDF格式出口商: 規範viaXSLFO,並擺脫viaIText和viaHTML。 由於使用HTML,這個想法是消除任何'我應該用'混亂,並集中精力/訣竅。 docx4j 唯一可能產生的XSL的,並依靠維克多的用戶有實際生產或同等學歷的PDF。 這將減少依賴性,使 docx4j 打火機。 這樣做的目的是要消除的fop罐(280萬),PDF格式渲染罐(160萬),iText的罐(1.1米),且核心渲染器(100萬)。

字體處理: 刪除潘糖的東西,所以我們並不需要一個定制的維克多罐子。

佈局模型/中級格式docx4j 包含DocumentModel,可以進一步發展,以支持:

* 搜索/替換

* 估算網頁內容

* 樣式,關閉部分,列出了

插入OLE對象:這樣的電子表格,PDF文件等可以嵌入。

版本說明

這個文件是寫在Word 2007中,使用:

* 漂亮的打印使用的XML http://www.softlion.com/webTools/XmlPrettyPrint/default.aspx 或包資源管理器

* Java源代碼格式化使用 http://www.java2html.de

PDF和HTML版本的使用產生 docx4j (PDF格式和通過的XSL的維克多)。

聯繫 Plutext

除非你付出的支持,我怎麼類型一般問題應直接向被張貼 docx4j forum Plutext可以張貼到論壇的任何問題,它應該通過電子郵件接收已指示了座談會。

Plutext可以在任何聯繫 jason@plutext.org jharrop@plutext.com

1 http://forums.java.net/jive/thread.jspa?threadID=411

2 ,如果你得到錯誤'的訪問限制:該類型 是由於無法訪問所需的庫rt.jar中限制'(可能使用一些組合的Eclipse 3.4和/或JDK 6更新10?),你需要進入生成路徑工程,圖書館標籤,選擇JRE的系統庫,並添加一個訪問規則,“無障礙,**”。