API создания документов Word в Java

Я хотел бы создать документ word с помощью шаблона, заменить некоторые переменные (поля) и сохранить его как новый документ word.

Я думал использовать Apache POI,http://poi.apache.org/ является ли это лучшим для этой цели? можете поделиться своими впечатлениями?

8 ответов


Я работал с POI раньше, и он, безусловно, способен генерировать документы Word. Но дьявол кроется в деталях.

Word имеет тысячи функций: вы можете поместить нумерованные списки, начиная с #13 с отрицательными отступами в две соединенные ячейки таблицы, включенной в другую таблицу, которая сама является частью списка маркеров... вы поняли идею. Когда документация POI говорит, что они находятся в процессе работы, это отражает то, что, вероятно, будет вечным состоянием попыток догнать (нам, недокументированным) спецификация слова.

документы с разумно "нормальным" набором используемых функций хорошо поддерживаются POI, чьи интерфейсы и методы разумны и последовательны, но иногда требуют немного работы. Но, как говорит Паскаль, документы с не слишком непомерным набором функций также поддерживаются RTF. У меня почти нет опыта "делать" RTF, но это, вероятно, немного проще, чем работать с POI.

Если вы работаете в среде, или для клиент, который настаивает, чтобы ваши документы были .DOC, а не .RTF, тогда POI-ваш единственный выбор, если вы не можете ввести шаг, на котором вы используете немного автоматизации Office для преобразования RTF в DOC.

обновление: тем временем у меня появилась еще пара идей.

использование POI или создание RTF-документов-это то, что вы можете сделать практически на любой платформе. На моей работе все серверы, выполняющие такую обработку, работают Например, Linux.

однако, в вероятном случае, если ваши программы будут работать под Windows, есть еще одна альтернатива:Яков http://www.land-of-kain.de/docs/jacob/

Джейкоб COM интерфейс для Java; он по существу позволяет "дистанционно управлять" программами Windows, такими как Word и Excel. Документ, на который я ссылался выше, относится не к собственному сайту Джейкоба, а к одной странице с рецептами "cookie cutter" для использования Джейкоба. Этот сам проект находится на SourceForge:http://sourceforge.net/projects/jacob-project/ но люди утверждают, и справедливо, что документации немного не хватает.

Джейкоб имеет преимущество перед всеми другими решениями, которые вы имеете дело с" реальным " словом и, следовательно,все возможности Word доступны для вас. Это было бы альтернативой, если есть подробные аспекты вашего документа, которые просто не могут быть обработаны с помощью POI или через RTF формат.


Это, очевидно, слишком поздно, но с 2013 года существует гораздо лучшее, более гибкое решение для создания документа word.

http://www.docx4java.org/trac/docx4j

Мне повезло с docx4j гораздо больше, чем когда-либо с POI.


Если вы используете шаблон и не хотите создавать документ word с нуля, для того, что я знаю, POI-довольно хорошее решение. Откройте шаблон и выберите зоны, которые необходимо заменить.

Они говорят, что POI все еще является developpement, но я использую его в производственной среде, и на данный момент он работает довольно хорошо.


Я не уверен в точном статусе поддержки документов Word в POI, но, согласно веб-сайту POI, работа все еще продолжается (не могу сказать, что это означает точно). Поэтому в настоящее время я бы не использовал POI, а скорее попытался создать RTF-документ. Для этого вы могли бы:

  • использовать RTFTemplate который является rtf для RTF Engine, который может генерировать RTF-документ в результате слияния RTF-модели и данных.
  • использовать iText что простой генератор PDF, но также может генерировать RTF.
  • Создайте свое собственное решение (но я бы этого не сделал).

Я бы пошел на iText.


Я знаю, что этот вопрос немного староват, но я думаю, что многие люди все еще находят это с поисковыми системами, поэтому я размещаю еще одну возможность сделать то, что вы хотите прямо здесь:

Если единственная цель состоит в том, чтобы иметь шаблон Word и заменить в нем некоторые значения, вы можете сохранить шаблон Word как один xml (не docx), а затем обработать его с помощью простой Java и без какой-либо структуры. Если вы хотите сделать больше (например, создать списки или таблицы), вы также можете рассмотреть понимание формат xml и написание собственных помощников перед загрузкой фреймворка, такого как POI.

вот пример того, как это сделать: http://dev-notes.com/code.php?q=10

Это быстрая версия, если вы хотите хорошую версию, вы можете попробовать использовать XML-процессор.

PS: пользователи могут заметить, что расширение файла не doc, а xml, и они могут обвинить вас в этом, но это нормально... просто переименуйте его в doc, word распознает формат, и все снова счастлив ;)


вы должны посмотреть в Aspose.Компоненты слов. Недавно они начали предоставлять Java-версию компонента.

см. следующую ссылку:Aspose.Слово для Java

Это поддерживает автоматизацию Word, создание и расширенные функции, такие как слияние почты без необходимости экземпляра Microsoft Word на компьютере. Реальные преимущества заключаются в том, что вы можете работать в контексте фактического документа word и не идти на компромисс путем создания RTFs и т. д.

версия Java в настоящее время не так полнофункциональна, как версия .Net, но основная функциональность ядра есть, и они очень сильно хотят иметь эквивалентную версию функции в ближайшее время.

кроме того, если вы покупаете версию Java, вы получаете бесплатные обновления / поддержку лет по мере создания новых выпусков.


Если вы работаете с документами docx, docx4j является опцией. Как POI, его открытым исходным кодом.


Я создал и использую это:http://code.google.com/p/java2word