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

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

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

Спасибо

вот что-то, что использовал кто-то, кто этим занимался какое-то время - jroller.com/rickard/entry/word_to_html_in_java

anjanb 23.10.2008 00:33
theserverside.com/news/thread.tss?thread_id=41942#216880 - раньше у меня это работало достаточно хорошо
anjanb 23.10.2008 00:17

Вот несколько отправных точек для вас. Удачи. На веб-сайте Microsoft вы можете найти документацию для формат .doc, а на веб-сайте ECMA - для формат .docx. У Microsoft есть категория для Java в своем блоге разработчиков OpenXML, в том числе сообщение о преобразовании OpenXML в XHTML в Java.

lewinski 22.10.2008 23:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
24
3
71 606
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

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

Вы когда-нибудь смотрели спецификацию? (Поцарапайте это, вы когда-нибудь исследовали несоответствия между файлом .rtf, содержащим спецификацию, указанному формату?) - Это невыполнимо, слишком много работы, пока доступны другие решения.

Arafangion 27.03.2009 05:17

Я сказал, что это сложно, а спецификации часто бывают неполными, и посоветовал этого не делать.

DavidG 09.04.2009 13:26

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

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

Я успешно использовал следующий подход в производственных системах, где новый формат 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.

Ответ принят как подходящий

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

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

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

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

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

Это проще сделать в новом документе 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

Начиная с версии 3.5, Apache POI поддерживает более новые версии Word.

Madison Caldwell 01.11.2010 23:08

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

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

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

Я пробовал этот способ, и он работает со мной с этого сайта 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);

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

Пожалуйста, поделитесь самим решением, а не размещайте на него ссылку.

SaeX 15.06.2015 10:33

вы можете использовать офис миксофт

во-первых, по запросу на стороне сервера https://view.officeapps.live.com/op/view.aspx?src='your doc file online url '

затем используйте jsoup, чтобы проанализировать результат html

при доступе с мобильного телефона html будет обернут рамкой.

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