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

111

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

Некоторые пояснения:

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

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

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

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

billjamesdev
источник
26
Не знаю, как закрыть этот вопрос через 30 месяцев после его последнего редактирования и через 3 года после того, как он был задан изначально, будет очень продуктивным. Если я изменил заголовок на «Как создать многофункциональные документы Word с помощью Java API?» это исправит это?
billjamesdev
1
на случай, если кому-то понадобится полный обзор доступного java api esupu.com/open-source-office-document-java-api-review
Supun Sameera
Вы можете взглянуть на docxtemplater, https://github.com/edi9999/docxtemplater/, который является библиотекой, которую я создал для создания docx из шаблонов docx
edi9999
1
Вопрос следует снова открыть. Вопрос был изменен, чтобы соответствовать правилам, поэтому я хотел бы позвонить любому, у кого есть право повторно открыть этот вопрос. Раньше вопрос был таков: какой хороший Java API для создания документов Word? Теперь вопрос: существует ли Java API, который может создавать богатые документы Word? Теперь вопрос четко указывает на то, чего хочет спрашивающий: создание документов Word с графиками, ToC и таблицами. Вопрос также больше не требует «хорошего» Java API. Добро у всех разное.
Sjoerd Pottuit

Ответы:

56

В 2007 году мой проект успешно использовал интерфейс универсальных сетевых объектов OpenOffice.org (UNO) для программного создания документов, совместимых с 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, в пакете. Доступен пакет разработки программного обеспечения (SDK) OpenOffice, содержащий примеры приложений и Руководство разработчика UNO.

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

Важными особенностями OpenOffice UNO являются:

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

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

Счастливый
источник
1
Пока что это наиболее совместимый с набором инструментов, который я просил. Я помечу его как "принято". Хотя я полностью осознаю, что POI более распространен, у него пока нет той функциональности, которую я хочу.
billjamesdev
30

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

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

Хорхе Феррейра
источник
Есть какие-нибудь знания о возможностях графиков и таблиц? Как насчет оглавления? У кого-нибудь есть реальный опыт выполнения этих задач в POI?
billjamesdev
1
Глядя на документацию для POI, кажется, что этот HWPF находится на очень ранней стадии разработки, в основном позволяя читать текст из .doc, а не для динамического создания «сложных» документов.
billjamesdev
Я не верю, что он обрабатывает более сложные графики / таблицы и т. Д.
Брайан Агнью,
POI или docx4j? stackoverflow.com/questions/15013837/…
JasonPlutext
9

Вы можете использовать это: 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

Leonardo
источник
1
Вы тестировали его, используя настоящий MS Word? Мне удалось создать файлы, которые OpenOffice и LibreOffice могут читать, но не MSWord в Windows. (Я сообщил об этой проблеме на code.google.com/p/java2word/issues/detail?id=16 )
Stein G. Strindhaug
2
Я не могу открыть файлы, созданные java2word, с помощью OpenOffice? Прекрасно работает с Office 2010
Ашика Уманга Умагилия
Поддерживает ли он создание файлов .docx? @Leonardo
MaheshVarma
Домашняя страница нового проекта: github.com/leonardoanalista/java2word
vhunsicker
4

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

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

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

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

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

Ромеок
источник
4

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

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

Джошуа Борн
источник
3

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

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

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

Секи
источник
2

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

Гульзар Назим
источник
Спасибо, но похоже, что это потребует запуска на машине с Windows, не так ли? Прочитав это, я уточнил ОС хост-машины, но спасибо за информацию.
billjamesdev
Использование JACOB на компьютере с веб-сервером потребует установки на нем самого Microsoft Word, поскольку создание и управление документами Word через интерфейс COM требует запуска реальных экземпляров приложения Word. В общем, такое использование Word + COM на многопользовательском сервере довольно проблематично, потому что Word не предназначен для такого использования - например, дублирование частей документа традиционно выполняется с помощью объекта Selection и буфера обмена Windows, что немыслимо в Интернете. установка серверной машины. я был очень обожжен этим (хотя нашел некоторые хитрости)
hello_earth
2

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

tvanfosson
источник
2

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

Эндрю Хэнкокс
источник
2

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

Если вам требуются файлы doc, вы можете вызвать abiword (бесплатный легкий текстовый процессор с несколькими ОС ) из командной строки, у него есть несколько параметров преобразования формата преобразования.

cam2574
источник
1

docx4j или poi, оба являются ASL v2

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

JasonPlutext
источник
1

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

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

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

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

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

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

Джеймс МакМахон
источник
1

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

schmoopy
источник
0

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

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

billjamesdev
источник
Я использовал iText для экспорта в RTF, и это немного нестабильно: например, TOC работает не так хорошо, и его действительно не очень просто использовать (отсутствует документация)
AlfaTeK
0

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

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

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

billjamesdev
источник
0

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

Пол Джоуэтт
источник