Программное преобразование документа Word в HTML на Java

Мне нужно преобразовать документ Word в файл (ы) HTML на Java. Функция будет вводить текстовый документ, а на выходе будет html файл (ы) на основе количества страниц, которые имеет текстовый документ, т.е. если текстовый документ имеет 3 страницы, то будет создано 3 html файла с требуемым разрывом страницы.

Я искал API с открытым исходным кодом / некоммерческие API, которые могут конвертировать документы в HTML, но безрезультатно. Любой, кто делал такую ​​работу раньше, пожалуйста, помогите.

Спасибо


person kaychaks    schedule 22.10.2008    source источник
comment
Вот несколько отправных точек для вас. Удачи. На веб-сайте Microsoft вы можете найти документацию для формата .doc и на веб-сайт ECMA в формате .docx. У Microsoft есть категория для Java в своем блоге разработчиков OpenXML, в том числе сообщение о преобразовании OpenXML в XHTML в Java.   -  person lewinski    schedule 22.10.2008
comment
theserverside.com/news/thread.tss?thread_id=41942#216880 - раньше у меня это работало достаточно хорошо   -  person anjanb    schedule 23.10.2008
comment
вот что-то, что использовал кто-то, кто этим занимался какое-то время - jroller.com/rickard/entry/ word_to_html_in_java   -  person anjanb    schedule 23.10.2008


Ответы (11)


Мы используем tm-extractors (http://mvnrepository.com/artifact/org.textmining/tm-extractors) и вернуться к коммерческому Aspose (http://www.aspose.com/). У обоих есть собственные Java API.

person Chase Seibert    schedule 22.10.2008

Я рекомендую JODConverter, он использует OpenOffice.org, который предоставляет, возможно, лучшие фильтры импорта / экспорта для Форматы OpenDocument и Microsoft Office доступны уже сегодня.

В JODConverter есть множество документов, скриптов и руководств, которые могут вам помочь.

person Fisher    schedule 23.06.2011

Я успешно использовал следующий подход в производственных системах, где новый формат MS Word XML недоступен:

Создайте процесс, который делает что-то похожее на:

http://www.oooninja.com/2008/02/batch-command-line-file-conversion-with.html

Вы, вероятно, захотите запустить openoffice один раз при запуске вашей программы и вызывать скрипт python столько раз в течение вашей программы, сколько вам нужно (с какой-то проверкой, чтобы гарантировать, что процесс ooffice всегда там).

Другой вариант - запускать команду следующего вида каждый раз, когда вам нужно выполнить преобразование:

ooffice -headless "macro: //‹ путь к макросу ooffice vb для преобразования, с параметром, указывающим на файл ›"

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

Хотя существуют механизмы для выполнения этого через MS Word, они непросты для Java, и для работы с MS Word через OLE требуются другие программы поддержки.

Раньше я тоже использовал abiword, который хорошо работает для многих документов, но меня путают с более сложными документами (ooffice, кажется, обрабатывает все, что я ему бросил). Abiword имеет немного более простой интерфейс командной строки для преобразования, чем ooffice.

person Jamie Love    schedule 22.10.2008

Если это docx, вы можете использовать docx4j (ASL v2). Это использует XSLT для создания HTML.

Однако это даст вам единый HTML-код для всего документа.

Если вам нужен HTML-код для каждой страницы, вы можете сделать что-нибудь с тегом lastRenderedPageBreak, который Word помещает в docx (при условии, что вы использовали Word для его создания).

person JasonPlutext    schedule 27.03.2009

Это проще сделать в новом документе MS word docx, так как он имеет формат XML. Вы можете использовать XSL для преобразования документа Word из формата XML в формат HTML.

Однако если ваш документ Word находится в старой версии, вы можете использовать библиотеку POI http://poi.apache.org/, а затем получить к нему доступ и сгенерировать объект Java, и с этого момента вы можете легко преобразовать его в формат HTML с помощью библиотеки HTML java.

http://www.dom4j.org/dom4j-1.4/apidocs/org/dom4j/io/HTMLWriter.html

person Community    schedule 10.04.2009
comment
Начиная с версии 3.5, Apache POI поддерживает более новые версии Word. - person Madison Caldwell; 01.11.2010

Я вижу, что эта ветка появляется во внешних ссылках и иногда в ней появляются сообщения, поэтому я решил опубликовать обновление (надеюсь, никто не возражает). OpenOffice продолжает развиваться, и в версии 3.2 снова улучшены фильтры импорта и экспорта слов. OpenOffice и Java могут работать на многих платформах, поэтому системы Java могут использовать OpenOffice UNO API напрямую для импорта / управления / экспорта документов во многих форматах (включая word и pdf) или использовать библиотеку, например JODReports или Docmosis для облегчения. У обоих есть бесплатные / открытые варианты.

person Paul Jowett    schedule 11.06.2010

Я пробовал этот способ, и он работал со мной с этого сайта http://code.google.com/p/xdocreport/wiki/XWPFConverterXHTML

Это работает только с docx, чтобы преобразовать его в HTML-изображения внутри этого текстового документа.

    // 1) Load DOCX into XWPFDocument
    InputStream doc = new FileInputStream(new File("c:/document.docx"));
    XWPFDocument document = new XWPFDocument(doc);

   // 2) Prepare XHTML options (here we set the IURIResolver to load images from a "word/media" folder)
            XHTMLOptions options = XHTMLOptions.create(); //.URIResolver(new FileURIResolver(new File("word/media")));;

            // 3) Extract image
            String root = "target";
            File imageFolder = new File( root + "/images/" + doc );
            options.setExtractor( new FileImageExtractor( imageFolder ) );
            // 4) URI resolver
            options.URIResolver( new FileURIResolver( imageFolder ) );


            OutputStream out = new FileOutputStream(new File("c:/document.html"));
            XHTMLConverter.getInstance().convert(document, out, options);

Надеюсь, это решит вашу проблему

person Yusuf D.Kutni Z Felemban    schedule 15.06.2015
comment
Пожалуйста, поделитесь самим решением, а не размещайте на него ссылку. - person SaeX; 15.06.2015

Вам нужно будет найти спецификацию документа MS Word (поскольку это в основном двоичный дамп всего, что есть в слове в этот момент времени) и медленно пройти через него элемент за элементом, преобразовывая слово ms word «объекты / состояния» в html эквивалент Возможно, вы сможете найти сценарий, который сделает это за вас, так как это действительно неинтересная работа, и я бы не советовал от нее (преобразование форматов файлов или даже чтение из коммерческих файлов самостоятельно всегда сложно и часто неполно). PS: просто google doc2html < / а>

person DavidG    schedule 22.10.2008
comment
Вы когда-нибудь смотрели спецификацию? (Поцарапайте это, вы когда-нибудь исследовали несоответствия между файлом .rtf, содержащим спецификацию, и указанному формату?) - Это невыполнимо, слишком много работы, пока доступны другие решения. - person Arafangion; 27.03.2009
comment
Я сказал, что это сложно, а спецификации часто бывают неполными, и посоветовал этого не делать. - person DavidG; 09.04.2009

Если вы ориентируетесь на файлы Word 2007 с использованием формата ooxml, тогда эта статья может помочь. И есть проект Ooxml4j, который реализует ooxml для библиотеки Java.

Однако если вы нацелены на двоичные файлы ... это еще одна проблема.

person Vincent Ramdhanie    schedule 22.10.2008

import officetools.OfficeFile; // package available at www.dancrintea.ro/doc-to-pdf/
...
FileInputStream fis = new FileInputStream(new File("test.doc"));
FileOutputStream fos = new FileOutputStream(new File("test.html"));
OfficeFile f = new OfficeFile(fis,"localhost","8100", true);
f.convert(fos,"html");

Все возможные преобразования:

документ -> PDF, HTML, TXT, RTF

xls -> pdf, html, csv

ppt -> pdf, swf

HTML -> PDF

person Community    schedule 05.02.2009

вы можете использовать офис Майкрософт в Интернете

сначала при запросе на стороне сервера https://view.officeapps.live.com/op/view.aspx?src= 'URL-адрес вашего файла документа в Интернете'

затем используйте jsoup для анализа результата html

при доступе с мобильного устройства HTML-код будет заключен в рамку.

person Seven4X    schedule 27.01.2019