Есть ли API Java, который может создавать документы Word?

У меня есть новое приложение, над которым я буду работать, где мне нужно будет создать документ Word, содержащий таблицы, графики, оглавление и текст. Какой хороший API использовать для этого? Насколько вы уверены, что он поддерживает графики, таблицы задач и таблицы? Каковы некоторые скрытые ошибки в их использовании?

Некоторые уточнения:

  • Я не могу вывести PDF, им нужен документ Word.
  • Они используют MS Word 2003 (или 2007), а не OpenOffice
  • Приложение работает на *nix app-сервере

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

Изменить: несколько хороших ответов ниже, каждый со своими ошибками, насколько моя текущая ситуация. Трудно выбрать "окончательный ответ" от них. Думаю, я оставлю это открытым и надеюсь, что будут найдены лучшие решения.

Редактировать: проект OpenOffice UNO, кажется, ближе всего к тому, что я просил. Хотя POI, безусловно, является более распространенным явлением, оно слишком незрелое для того, что я хочу.

16 ответов

Решение

В 2007 году мой проект успешно использовал интерфейс универсальных сетевых объектов (UNO) OpenOffice.org для программного генерирования документов, совместимых с MS-Word (*.doc), а также соответствующих документов PDF из веб-приложения Java (среда Struts/JSP).

OpenOffice UNO также позволяет создавать совместимые с MS-Office диаграммы, электронные таблицы, презентации и т. Д. Мы смогли динамически создавать сложные документы Word, включая диаграммы и таблицы.

Мы упростили процесс, используя шаблоны документов MS-Word со вставками закладок, в которые программное обеспечение вставляло контент, однако вы можете создавать документы полностью с нуля. Цель состояла в том, чтобы программное обеспечение генерировало отчетные документы, которые могли бы быть переданы конечным пользователям для дальнейшей настройки, а затем преобразовать их в PDF для окончательной доставки и архивирования.

При желании вы можете создавать документы в форматах OpenOffice, если хотите, чтобы пользователи использовали OpenOffice вместо MS-Office. В нашем случае пользователи хотят использовать инструменты MS-Office.

UNO входит в комплект OpenOffice. Мы просто связали наше Java-приложение с UNO-связанными библиотеками в комплекте. Доступен пакет разработки программного обеспечения OpenOffice (SDK), содержащий примеры приложений и Руководство разработчика UNO.

Я не исследовал, может ли последняя версия OpenOffice UNO генерировать форматы документов MS-Office 2007 Open XML.

Важные вещи об OpenOffice UNO:

  1. Это бесплатно
  2. Он поддерживает несколько языков (например, Visual Basic, Java, C++ и другие).
  3. Он не зависит от платформы (Windows, Linux, Unix и т. Д.).

Вот несколько полезных веб-сайтов:

Я думаю, что Apache POI может сделать эту работу. Возможная проблема в зависимости от использования, к которому вы стремитесь, может быть вызвана тем фактом, что HWPF все еще находится на ранней стадии разработки.

HWPF - это набор API для чтения и записи документов Microsoft Word 97(-XP) с использованием (только) Java.

Вы можете использовать это: http://code.google.com/p/java2word

Я реализовал этот API под названием Java2Word. с помощью нескольких строк кода вы можете создать один документ Microsoft Word.

Например.:

IDocument myDoc = new Document2004();
myDoc.getBody().addEle(new Heading1("Heading01"));
myDoc.getBody().addEle(new Paragraph("This is a paragraph...")

Есть несколько примеров, как использовать. В основном вам понадобится один файл jar. Дайте мне знать, если вам нужна дополнительная информация, как его настроить.

* Я написал это, потому что у нас была одна реальная необходимость в проекте. Больше в моем блоге:

http: //leonardo-pinho.blogspot.com/2010/07/java2word-word-document-generator-from.html *

ура Леонардо

Изменить: Проект по ссылке перемещен на https://github.com/leonardoanalista/java2word

Попробуйте Aspose.Words для Java, он работает на любой ОС, где установлена ​​Java.

Он выведет документ в формат DOC, DOCX или RTF, если вам нужен формат вывода MS Word. Все поддерживаются одинаково хорошо.

С помощью этого API вы можете создавать документы с нуля, буквально из узлов и устанавливать их свойства форматирования. Вы также можете использовать DocumentBuilder, который предоставляет методы более высокого уровня, такие как создание строки таблицы, вставка поля и т. Д. Или вы можете копировать / объединять / перемещать части между существующим предварительно созданным документом, например, хотите собрать контракт, просто захватите и скопируйте части из нескольких документов и Aspose.Words будут объединять стили, форматирование списка и т. д. должным образом в итоговый документ.

Вы сможете вставить поле оглавления, используя Aspose.Words, но на сегодняшний день поле оглавления потребует обновления поля при открытии документа в Microsoft Word. Тем не менее, мы собираемся выпустить полную поддержку полей TOC в начале 2010 года. Например, он построит полное TOC, как это делает MS Word.

Я в команде Aspose.Words.

Попробуйте Aspose.Words для Java.

Aspose.Words for Java - это расширенная (коммерческая) библиотека классов для Java, которая позволяет вам выполнять широкий спектр задач по обработке документов непосредственно в ваших Java-приложениях.

Aspose.Words для Java поддерживает форматы DOC, OOXML, RTF, HTML и OpenDocument. С Aspose.Words вы можете создавать, изменять и преобразовывать документы без использования Microsoft Word.

Это было упомянуто лишь кратко один раз, поэтому я хотел бы вызвать библиотеку docx4j, поскольку у меня был больший успех с docx4j, чем с чем-либо еще. Поддержка Apache POI для документов Word не очень хорошая. Кроме того, в отличие от Aspose.Words, docx4j является библиотекой с открытым исходным кодом.

Единственный недостаток docx4j заключается в том, что вы должны создавать документы в формате Office Open XML (docx), а не документы в формате OLE2 (doc). Это формат по умолчанию для Word 2007, но пользователям Word 2003 и более ранних версий необходимо установить пакет совместимости.

Я использовал Aspose.Words для слияния почты в.NET. Я считаю, что у них также есть версия Java.

iText действительно прост в использовании.

Если вы запрашиваете файлы документов, которые вы можете вызвать из командной строки abiword (бесплатный текстовый процессор multi-os), у него есть несколько вариантов конвертирования формата преобразования.

Вы можете использовать Java COM-мост, такой как JACOB. Если это со стороны клиента, другой вариант будет использовать Javascript.

Есть инструмент под названием JODConverter, который подключается к открытому офису для демонстрации конвертеров форматов файлов, есть версии, доступные в виде веб-приложения (в tomcat), которое вы публикуете, и инструмент командной строки. Я запускаю html и успешно преобразую в.doc и pdf, это довольно большой проект, еще не запущенный, но я думаю, что буду его использовать. http://sourceforge.net/projects/jodconverter/

docx4j или poi, оба из которых являются ASL v2

@wondersofcomputing: iText на самом деле является бесплатным и открытым исходным кодом

В прошлом я разрабатывал файлы слов на основе чистого XML. Я использовал.NET, но язык не должен иметь значения, поскольку это действительно XML. Это было не самое простое (сделать проект, который требовал этого пару лет назад). Они работают только в Word 2007 или более поздней версии, но все, что вам нужно, - это документ Microsoft, в котором описано, что делает каждый тег. С помощью тегов вы можете выполнять все, что хотите, так же, как если бы вы использовали Word (изначально немного более болезненно).

После небольшого исследования я наткнулся на iText, API для создания PDF и RTF-файлов. Я думаю, что могу использовать поколение RTF для создания файла, который можно читать в Doc, который затем можно редактировать с помощью Doc и заново сохранять.

У кого-нибудь есть опыт использования iText, используемого таким образом?

Билл, POI и iText API очень похожи с точки зрения программирования. Я работал с обоими в прошлом и нашел их простыми в использовании и хорошо документированными.

С iText вы получаете преимущество возможности переключения между форматами (RTF и PDF) с незначительными изменениями в коде. Если я правильно помню, контент выкладывается с использованием тех же вызовов, а затем устанавливается в формате PDF или RTF с использованием нескольких строк кода.

Однако я считаю, что форматирование в RTF ограничено по сравнению с DOC. Я не знаю, сможете ли вы реализовать расширенные функции, которые вы ищете (таблицы, встроенные изображения), без особых хлопот, если вообще.

Учитывая то, что вы сказали, что у HWPF недостаточно функциональности для ваших нужд (я имел дело только со стороной POI в Excel), лучше всего убедить вас в том, что PDF - лучшая технология для работы.

Еще одна возможность, так как это веб-приложение.

Мне удалось отобразить HTML-страницу с типом MIME, установленным в "application/msword", что привело к тому, что браузер порождал Word, который импортировал HTML просто отлично, позволяя редактировать и сохранять, как если бы я выводил настоящий документ Word.

Таблицы работают нормально, но изображения, которые я еще не получил, работают. Это может быть так же просто, как просто тег в HTML, или мне может потребоваться передать отдельную часть ответа, содержащую данные изображения в двоичном виде, или какой-то другой метод, который я еще не придумал.:)

Хотя это намного позже, чем запрос, он может помочь другим. Docmosis предоставляет Java API для создания документов в формате doc,pdf,odt с использованием документов в качестве шаблонов. Он использует OpenOffice в качестве движка для выполнения преобразований формата. Манипулирование документами и заполнение выполняется самим Docmosis.

После небольшого исследования я наткнулся на iText, API для создания PDF и RTF-файлов. Я думаю, что могу использовать поколение RTF для создания файла, который можно читать в Doc, который затем можно редактировать с помощью Doc и заново сохранять.

У кого-нибудь есть опыт использования iText, используемого таким образом?

Другие вопросы по тегам