У меня есть новое приложение, над которым я буду работать, где мне нужно создать документ Word, содержащий таблицы, графики, оглавление и текст. Какой хороший API для этого использовать? Насколько вы уверены, что он поддерживает графики, ToC и таблицы? Какие скрытые подводные камни при их использовании?
Некоторые пояснения:
Было бы неплохо, если бы я мог начать с шаблона документа и просто заполнить некоторые пробелы таблицами, графиками и т. д.
Обновлено: несколько хороших ответов ниже, каждый со своими недостатками в моей текущей ситуации. Трудно выбрать из них «окончательный ответ». Думаю, я оставлю его открытым и надеюсь, что будут созданы лучшие решения.
Обновлено: проект OpenOffice UNO кажется наиболее близким к тому, о чем я просил. Хотя POI, безусловно, более распространен, он слишком незрел для того, что я хочу.
на случай, если кому-то понадобится полный обзор доступного java api esupu.com/open-source-office-document-java-api-review
Вы можете взглянуть на docxtemplater, https://github.com/edi9999/docxtemplater/, библиотеку, которую я создал для создания docx из шаблонов docx.
Вопрос следует снова открыть. Вопрос был изменен, чтобы соответствовать правилам, поэтому я хотел бы вызвать тому, кто имеет право снова открыть этот вопрос. Раньше вопрос был таков: какой хороший Java API для создания документов Word? Теперь вопрос: существует ли Java API, который может создавать богатые документы Word? Теперь вопрос четко указывает на то, чего хочет спрашивающий: создание документов Word с графиками, ToC и таблицами. Вопрос также больше не требует «хорошего» Java API. Добро у всех разное.




Я думаю, что POI Apache справится с этой задачей. Возможная проблема в зависимости от цели использования может быть вызвана тем, что HWPF все еще находится на ранней стадии разработки.
HWPF is the set of APIs for reading and writing Microsoft Word 97(-XP) documents using (only) Java.
Есть ли какие-нибудь знания о возможностях графиков и таблиц? Как насчет оглавления? У кого-нибудь есть реальный опыт выполнения этих задач в POI?
Глядя на документацию для POI, кажется, что этот HWPF находится на очень ранней стадии разработки, в основном позволяя читать текст из .doc, а не для динамического создания «сложных» документов.
Я не верю, что он обрабатывает более сложные графики / таблицы и т. д.
POI или docx4j? stackoverflow.com/questions/15013837/…
Вы можете использовать мост Java COM, например ДЖЕЙКОБ. Если это со стороны клиента, другим вариантом будет использование Javascript.
Спасибо, но похоже, что это потребует запуска на машине с Windows, не так ли? После прочтения я разъяснил ОС хост-машины, но спасибо за информацию.
Использование JACOB на компьютере с веб-сервером потребует установки на нем самого Microsoft Word, поскольку создание и управление документами Word через интерфейс COM требует запуска реальных экземпляров приложения Word. В общем, такое использование Word + COM на многопользовательском сервере довольно проблематично, потому что Word не предназначен для такого использования - например, дублирование частей документа традиционно выполняется с помощью объекта Selection и буфера обмена Windows, что немыслимо в Интернете. установка серверной машины. я был очень обожжен этим (хотя нашел некоторые настройки)
Я использовал Aspose.Words для слияния почты в .NET. Я считаю, что у них тоже есть Java-версия.
Раньше я разрабатывал текстовые файлы на чистом XML. Я использовал .NET, но язык не имеет значения, поскольку это настоящий XML. Это было не из легких дел (пару лет назад был проект, который требовал этого). Они работают только в Word 2007 или более поздних версиях, но все, что вам нужно, - это технический документ Microsoft, в котором описывается, что делает каждый тег. Вы можете делать все, что хотите, с помощью тегов так же, как если бы вы использовали Word (конечно, поначалу немного сложнее).
После небольшого исследования я наткнулся на iText, API для создания PDF- и RTF-файлов. Я думаю, что могу использовать генерацию RTF для создания файла, читаемого в формате Doc, который затем можно редактировать с помощью Doc и повторно сохранять.
У кого-нибудь есть опыт использования iText таким образом?
Я использовал iText для экспорта в RTF, и это немного нестабильно: например, TOC не работает так хорошо, и его действительно не очень легко использовать (отсутствует документация)
Еще одна возможность, поскольку это веб-приложение.
Мне удалось отобразить HTML-страницу с типом MIME, установленным на «application / msword», что привело к тому, что браузер запустил Word, который импортировал html просто отлично, позволяя редактировать и сохранять так же, как если бы я выводил настоящий документ Word.
Таблицы работают нормально, но изображения у меня еще не появились. Это может быть так же просто, как просто тег в HTML, или мне, возможно, придется передать отдельную часть ответа, содержащую данные изображения в двоичном формате, или какой-либо другой метод, который я еще не придумал. :)
В 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, в пакете. Доступен Комплект для разработки программного обеспечения OpenOffice (SDK), содержащий примеры приложений и Руководство разработчика UNO.
Я не исследовал, может ли последняя версия OpenOffice UNO создавать форматы документов MS-Office 2007 Open XML.
Важными особенностями OpenOffice UNO являются:
Вот несколько полезных веб-сайтов:
Пока что это наиболее совместимый с набором инструментов, который я просил. Я отмечу его как принятый. Хотя я полностью осознаю, что POI является более распространенным явлением, у него пока нет той функциональности, которую я хочу.
Попробуйте Aspose.Words для java.
Aspose.Words for Java is an advanced (commercial) class library for Java that enables you to perform a great range of document processing tasks directly within your Java applications.
Aspose.Words for Java supports DOC, OOXML, RTF, HTML and OpenDocument formats. With Aspose.Words you can generate, modify, and convert documents without using Microsoft Word.
Есть инструмент под названием JODConverter, который подключается к открытому офису, чтобы открыть конвертеры формата файлов, есть версии, доступные в виде веб-приложения (находится в tomcat), которое вы публикуете, и инструмент командной строки. Я использовал html и успешно конвертировал его в .doc и pdf, это в довольно большом проекте, еще не запущен, но я думаю, что собираюсь его использовать. http://sourceforge.net/projects/jodconverter/
docx4j или poi, оба из которых являются ASL v2
@wondersofcomputing: iText на самом деле бесплатен и имеет открытый исходный код.
iText действительно прост в использовании.
Если вам требуются файлы doc, вы можете вызвать слово (бесплатный легкий текстовый процессор с несколькими ОС) из командной строки, у него есть несколько параметров преобразования формата преобразования.
After a little more research, I came across iText, a PDF and RTF-file creation API. I think I can use the RTF generation to create a Doc-readable file that can then be edited using Doc and re-saved.
Anyone have any experience with iText, used in this fashion?
Билл, POI и iText API очень похожи с точки зрения программирования. Я работал с обоими в прошлом и нашел их простыми в использовании и хорошо задокументированными.
Используя iText, вы получаете возможность переключаться между форматами (RTF и PDF) с незначительными изменениями кода. Если я правильно помню, контент размещается с использованием тех же вызовов, а затем устанавливается в формате PDF или RTF с использованием нескольких строк кода.
Однако я считаю, что форматирование в RTF ограничено по сравнению с DOC. Я не знаю, сможете ли вы реализовать расширенные функции, которые вы ищете (таблицы, встроенные изображения), без приличных хлопот, если вообще.
Учитывая то, что вы сказали о том, что HWPF не имеет достаточной функциональности для ваших нужд (я имел дело только со стороной Excel для POI), ваш Лучше всего убедить сильных мира сего, что PDF - лучшая технология для работы..
Попробуйте Aspose.Words для Java, он работает в любой ОС, где установлена Java.
Он выведет документ в DOC, DOCX или RTF, если вам нужен выходной формат MS Word. Все поддерживаются одинаково хорошо.
Используя этот API, вы можете создать документ с нуля, буквально из узлов, и задать их свойства форматирования. Вы также можете использовать DocumentBuilder, который предоставляет методы более высокого уровня, такие как создание строки таблицы, вставка поля и т. д. Или вы можете копировать / присоединять / перемещать части между существующим предварительно созданным документом, скажем, вы хотите собрать контракт, просто возьмите и скопируйте части из нескольких документов, и Aspose.Words правильно объединит стили, форматирование списка и т. д. в итоговый документ.
Вы сможете вставить поле оглавления с помощью Aspose.Words, но на сегодняшний день поле оглавления потребует обновления поля при открытии документа в Microsoft Word. Однако мы собираемся выпустить полную поддержку полей TOC в начале 2010 года. он построит полное оглавление, как это делает MS Word.
Я в команде Aspose.Words.
Он был упомянут лишь кратко один раз, поэтому я хотел бы назвать библиотеку docx4j, так как с docx4j я добился большего успеха, чем с чем-либо еще. Поддержка Apache POI для документов Word не очень хороша. Кроме того, в отличие от Aspose.Words, docx4j - это библиотека с открытым исходным кодом.
Единственный недостаток заключается в том, что с docx4j вам нужно создавать документы в формате Office Open XML (docx), а не документы в формате на основе OLE2 (doc). Это формат по умолчанию для Word 2007, но пользователям Word 2003 и более ранних версий потребуется установить пакет совместимости.
Несмотря на то, что это намного позже запроса, это может помочь другим. Докмос предоставляет Java API для создания документов в формате doc, pdf, odt с использованием документов в качестве шаблонов. Он использует OpenOffice в качестве движка для преобразования формата. Манипуляция документами и заполнение осуществляется самим Docmosis.
Вы можете использовать это: 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
Вы тестировали его, используя настоящий MS Word? Мне удалось создать файлы, которые OpenOffice и LibreOffice могут читать, но не MSWord в Windows. (Я сообщил об этой проблеме на code.google.com/p/java2word/issues/detail?id=16)
Я не могу открыть файлы, созданные java2word, с помощью OpenOffice? Прекрасно работает с Office 2010
Поддерживает ли он создание файлов .docx? @Leonardo
Новый дом проекта: github.com/leonardoanalista/java2word
Не знаю, как закрыть этот вопрос через 30 месяцев после его последнего редактирования и через 3 года после того, как он был задан изначально, будет очень продуктивным. Если я изменил заголовок на «Как мне создать многофункциональные документы Word с помощью Java API?» это исправит это?