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 項目是由 Plutext (www.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文檔使用 docx4j, docx4j 自動 反編排 的內容,每個XML部分一個強類型的Java對象樹( jaxbElement)。
同樣,如果/當你告訴 docx4j 保存這些 Java對象作為一個的docx, docx4j 自動 糾察 的 jaxbElement 在每一部分。
有時候你會希望自己的東西編組或解組。 類 org.docx4j.jaxb.Context 定義中使用的所有JAXBContexts docx4j:
Jc |
org.docx4j.wml
|
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
|
建築
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
* 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格式)。
當您打開該文檔中 docx4j, docx4j 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