docx4j Приступая к работе

Последняя версия этого документа всегда можно найти в docx4j svn in /docs (В Flat OPC XML формат Word 2007, HTML , А также PDF ).

Этот документ был переведен с английского языка с помощью Google Translate. Если вы можете улучшить перевод, пожалуйста, не стесняйтесь, присылайте в улучшенном варианте. Для последних, всегда относятся к английской версии.

Что такое docx4j?

docx4j это библиотека для распаковки Docx "пакета", и разбор WordprocessingML XML для создания в памяти представительство в Java . Последние версии docx4j также поддерживают файлы Powerpoint PPTX.

Он похож по своей концепции Microsoft OpenXML в SDK, который предназначен для. NET.

docx4j является открытым исходным кодом, доступный по Apache License (v2). Как проект с открытым исходным кодом, взносы приветствуются. Пожалуйста, обратитесь к docx4j форумом, на http://dev.plutext.org/forums/ для деталей.

docx4j в значительной степени зависит JAXB, Стандарт JCP для Java XML обязательным. Вы можете думать о docx4j как реализация JAXB системы (среди прочих):

* Открытое конвенций упаковки

* WordprocessingML (DOCX), часть Open XML

* Presentation ML (pptx) part of OpenXML

Библиотека предназначена для круглых файлов Docx поездки со 100% точностью, и поддерживает все WordML 2007. Поддержка новых функций Word 2010 будет добавлена в ближайшее время.

docx4j Проект спонсируется Plutext (www.plutext.com ).

Есть docx4j для вас?

docx4j для обработки Docx документов (и PPTX презентации) в Java.

Это не старый бинарный (. DOC) файлов. Для тех, посмотрите на HWPF Apache POI в. (На самом деле, docx4j использует HWPF основных преобразования. документ в. Docx)

Это не является для файлов RTF.

Если вы хотите, чтобы процесс Docx документов. Платформы NET, вам следует взглянуть на OpenXML SDK Microsoft вместо этого.

Альтернатива docx4j POI является Apache. Я особенно рекомендую для обработки документов Excel. Она также может быть использован для обработки документов Word, а так как он использует XMLBeans (не JAXB) может быть лучшим выбором, если вы хотите использовать XMLBeans.

Какие вещи можно делать с docx4j?

* Открыть существующий Docx (от файловой системы, SMB / CIFS, WebDAV использованием VFS)

* Создать новую Docx

* программно манипулировать Docx документа (конечно же)

* Template substitution; CustomXML binding

* Импорт бинарных документ (использует Apache POI HWPF)

* Продукция / потребляют в 2007 xmlPackage Word (PKG) формате

* Сохранить Docx к файловой системе Docx (например, молнии), или в СКВ (распакованные)

* Применение преобразований, в том числе простых фильтров

* Экспорт в HTML или PDF

* Diff / сравнить документы, пункты или сдт (содержание контроля)

* Поддержка шрифтов (подстановки шрифтов, а также использование любого шрифты, встроенные в документ)

Проекты с использованием 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/

В общем, мы предлагаем вам разработать в отношении в настоящее время ночных строить, так как последний официальный релиз часто может быть несколько месяцев назад.

Поддержка банках можно найти в. 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's Java 6 распределения, а не 1,5. Так что если вы используете 1,5 JDK, то вам нужно JAXB 2.1.x на вашем пути к классам.

Обрывки docx4j, Таких, как org.docx4j.wml и org.docx4j.dml был использован XJC в JAXB. Мы изменили 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 от источника

Командная строка - Быстрый Инструкции

"Быстрый", то есть если у вас есть специалист, и муравей установлен. Обратите внимание, что мы используем только специалист, чтобы захватить зависимости, а не делать фактического создания.

Создайте папку рабочего пространства, и сделайте его.

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

Это муравей команда создаст docx4j.jar и разместить его и всех его зависимостей расстояние реж.

Затмение

Предпосылки

* 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

* Создать новое место хранилище; Url является http://dev.plutext.org/svn/docx4j

* Выберите папку "trunk"И выберите docx4j; нажмите кнопку "Далее

* Вы хотите, чтобы проверить его как проект, настраиваются с помощью мастер создания проекта

* Затем выберите Java> Java проекта; нажмите кнопку Далее

* Выберите имя проекта (например, "docx4j '), затем нажмите кнопку Далее

* Нажмите кнопку Готово (мы определим Java построить настройки на более позднем этапе)

Через несколько других диалоговых окон, вы должны иметь новый проект в рабочей области.

Теперь мы должны настроить путь класса и т.д. в рамках Eclipse, чтобы он мог построить.

* Build Path> Настроить Build Path> Java Build Path> На вкладке Источник

* Нажмите на SRC, а затем нажмите кнопку Удалить

* Затем нажмите кнопку "Добавить папку" и перейти до 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.

По спецификации Microsoft Open Упаковка, каждый Docx документ состоит из нескольких частей файлов, застежку. Часть, как правило, XML, но не могли бы быть (часть изображения, например, это не так).

Введение в WordML выходит за рамки этого документа. Вы можете найти очень четким введения в 1-м издании Часть 3 (Primer) на 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 автоматически unmarshals содержание каждой части XML в сильно типа Java объект дерева ( jaxbElement).

Аналогичным образом, если / когда вы говорите docx4j , чтобы сохранить эти объекты, как Java DOCX, docx4j автоматически приставов jaxbElement в каждой части.

Иногда вам нужно будет маршала или unmarshal вещи самостоятельно. Класс 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 ручки вещей Упаковка конвенций уровень работы: разархивации Docx в WordprocessingMLPackage и набор объектов, унаследовав от части, позволяя частей для добавления / удаления; экономии Docx

Этот слой основывается первоначально на OpenXML4J (который также используется Apache POI).

Части, как правило, подклассов org.docx4j.openpackaging.parts.JaxbXmlPart

Части расположены в дерево. Если часть имеет потомков, он будет иметь org.docx4j.openpackaging.parts.relationships.RelationshipsPart которые определяются те потомок частей. Образца РагЬзЫзЬ (см. следующий раздел) показывает, как это работает.

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

Этот пакет основан на двух нижних слоев предоставляет дополнительные возможности, и постепенно развиваться и дальше.

Образцы

Пакет 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

Существуют также различные документы образца в / образец документов каталога; это наиболее легкий доступ, отметившись 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 в каталоге образцов показывает вам, как пройти представление о JAXB Docx.

Одна из раздражающих вещь 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) о). деЬУа ();

Создание новых 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:

/ / Допустим String содержит XML XML выше

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

Чтобы это работало, необходимо обеспечить, чтобы все пространства имен, заявил надлежащим образом в строке.

Добавление часть

Что делать, если вы хотите добавить новый раздел стили? Вот как:

/ / Создание стилей части

StyleDefinitionsPart stylesPart = new StyleDefinitionsPart();

/ / Заполнить его стилей по умолчанию

stylesPart.unmarshalDefaultStyles();

/ / Добавляем стили участие в основной части документа отношения

wordDocumentPart.addTargetPart(stylesPart);

Вы бы взять тот же подход для добавления колонтитулов.

Когда вы добавляете части таким образом, она будет автоматически добавлена в связи источник в части части.

Как правило, вам также необходимо добавить ссылку на ту часть (используя свои отношения ID) к основному документу части. Это относится к изображениям, верхние и нижние колонтитулы. (Комментарии, сноски и концевые сноски немного отличаются, в то, что вы добавить к основной части документа содержатся ссылки на отдельные комментарии и примечания / сноски).

Docx к (X) HTML

docx4j используется XSLT для преобразования Docx в XHTML:

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 FOP интегрирована в docx4j для создания PDF. (В ближайшее время мы будем менять вещи так, чтобы docx4j ПО генерирует для использования ваш любимый ПО визуализации, будь то FOP или коммерческие программы, такие как ХЕР).

Для создания PDF:

/ / Fonts тождественное отображение лучших на Microsoft Windows

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'S 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 основе W: Рис форме

<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 W: рисунок / WP: встроенные формы для Вас:

/ **

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

*, Которые могут быть связанные или внедренные в ш: п / ш: R / W: рисунок.

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

* Автоматически. См. Javadoc для других подписей.

* @ параметров filenameHint Любой текст, например, оригинальный файл

* @ параметров altText Как альтернативный текст HTML в

* @ параметров id1 уникальный идентификатор в документе

* @ параметров ID2 Другой уникальный идентификатор в документе

* @ параметров ссылка верно, если это будет связано не встроенных * /

public Inline createImageInline(String filenameHint, String altText,

int id1, int id2, boolean link)

который затем можно добавить к ш: R / W: рисунок.

Наконец, в docx4jВы можете конвертировать изображения из форматов не поддерживается Word (например, PDF), в PNG, который поддерживает формат. Для этого 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, для вывода текста в Writer.

Текст замещения

Текст замещения достаточно легко, при условии, строку, которую Вы ищете представлена в org.docx4j.wml.Text объект в форме вы ожидаете.

Однако это не обязательно будет так. Строка может быть нарушена через текст проходит по одной из следующих причин:

* часть слова отформатирован по-разному (например, выделены жирным шрифтом)

* орфография, грамматика

* Для редактирования (rsid)

docx4j в конечном счете учета этих случаев, но не сейчас.

С учетом этого, вы можете сделать текст замены разными способами, например:

* обход основной части документа, и, глядя на org.docx4j.wml.Text объектов

* маршала строки поиска / замены в этом, а затем снова unmarshall

docx4j ы XmlUtils также, содержит:

/ **

* Дайте строку WML, содержащих $ (key1), $ () ключ2, возвращение подходящих

* Объекта .* /

public static Object unmarshallFromTemplate(String wmlTemplateString,

java.util.HashMap <String, 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, и довольно печать части.

Другой способ сохранить Docx как Word 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 документы, часто бывает полезно, чтобы unmarshal фрагменты XML (например, String представляет пункт включить в документ).

Например, с учетом:

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

Вы можете просто:

/ / Допустим String содержит 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 );

Если вам нужно unmarshal, вы можете использовать:

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.

Дорожной карты

Word 2010 поддержки. Поддержка новых элементов XML / схем внес в Word 2010, а также для совместимости механизма. Это является основным обоснованием 3,0 этикетке.

HTML экспортеров: избавиться от старых; стандартизировать NG2. Идея заключается в удалить ", который я должен использовать 'смятение, и сосредоточить усилия / ноу-хау.

PDF экспортеров: стандартизировать viaXSLFO, и избавиться от viaIText и viaHTML. Как и в HTML, идея для удаления ", который я должен использовать 'смятение, и сосредоточить усилия / ноу-хау. docx4j может производить только XSL ПО, а также полагаться на пользователю иметь FOP или эквивалент на самом деле производят PDF. Это приведет к сокращению зависимостей, docx4j светлее. Цель будет заключаться в устранении фат банка (2.8M), PDF визуализации банку (1,6 м), iText банка (1.1M), а также основного визуализации (1M).

Шрифт-разгрузочные работы: удалить сходстве материал, так что нам не нужно подгонять FOP банку.

Макет модели / промежуточный формат: docx4j содержит DocumentModel, которые могут быть доработаны для поддержки:

* Поиск / замена

* Оценка по содержимому страницы

* XSLT, заключая разделы, списки

Вставка OLE объектов: так электронными таблицами, PDF-файлы и т.д. могут быть внедрены.

Отпечаток

Этот документ был написан в Word 2007, используя:

* XML довольно распечатаны на принтере http://www.softlion.com/webTools/XmlPrettyPrint/default.aspx или Package Explorer

* Java исходный код отформатирован http://www.java2html.de

PDF и HTML версии был использован docx4j (PDF с помощью XSL ПО и FOP).

Связаться 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 Update 10?), вам необходимо войти в сборки Путь для этого проекта, библиотеки вкладки JRE библиотечная система ", и добавить правило доступа" Доступное ** ".