Docx в HTML poi java.lang.NoSuchMethodError

Я хочу преобразовать docx в html с помощью poi. Я использую следующий код

...
  XWPFDocument document = new XWPFDocument(is);
  XHTMLOptions options = XHTMLOptions.create();
  OutputStream out = new FileOutputStream(htmlFile);
  XHTMLConverter.getInstance().convert(document, out, options);
...

в последней строке я получил исключение

java.lang.NoSuchMethodError: org.apache.poi.xwpf.usermodel.XWPFHyperlinkRun.<init>(Lorg/openxmlformats/schemas/wordprocessingml/x2006/main/CTHyperlink;Lorg/openxmlformats/schemas/wordprocessingml/x2006/main/CTR;Lorg/apache/poi/xwpf/usermodel/XWPFParagraph;)V

Я использую следующие библиотеки:

POI 3.10Final
org.apache.poi.xwpf.converter.core 1.0.4.jar
org.apache.poi.xwpf.converter.xhtml 1.0.4.jar

Проблема в том, что библиотеки core и xhtml используют POI версии 3.09, где есть конструктор XWPFHyperlinkRun(гиперссылка CTHyperlink, запуск CTR, XWPFParagraph p), но версия 3.10 имеет конструктор XWPFHyperlinkRun(гиперссылка CTHyperlink, запуск CTR, IRunBody p).

Я не могу сделать даунгрейд poi, потому что я использую функционал 3.10 в другом месте, а библиотеки core/xhtml не имеют более новых версий, чем 1.0.4. Я пытался использовать библиотеку docx4j, но у меня есть некоторые проблемы с ней, но я бы предпочел, чтобы была возможность использовать poi вместо другой библиотеки.

есть вариант решить эту проблему?

спасибо за ответы


person Markusin    schedule 15.12.2014    source источник
comment
Apache POI не предоставляет какие-либо банки с именами вроде org.apache.poi.xwpf.converter — откуда на самом деле берутся эти банки?   -  person Gagravarr    schedule 15.12.2014
comment
Не уверен, где коллега нашел их (версия 1.0.0 была там до того, как я попытался обновить их до версии 1.0.4) mvnrepository.com/artifact/fr.opensagres.xdocreport/ mvnrepository.com/artifact/fr.opensagres.xdocreport/   -  person Markusin    schedule 16.12.2014
comment
Это не часть Apache POI, это какая-то внешняя группа. Вам нужно будет связаться с ними и попросить их создать новую версию/загрузить исходный код и перекомпилировать. 3.9 до 3.10/3.11 совместим с исходным кодом, но несколько битов (например, это) несовместимы с двоичным кодом, поэтому вам нужно перекомпилировать   -  person Gagravarr    schedule 16.12.2014


Ответы (2)


Итак, 21.01.2015 создана новая версия библиотек:

org.apache.poi.xwpf.converter.core 1.0.5.jar
org.apache.poi.xwpf.converter.xhtml 1.0.5.jar

которые совместимы с версией

POI 3.10Final

и это решает эту проблему.

person Markusin    schedule 30.01.2015
comment
Apache POI 3.11 вышла около месяца назад, поэтому получение версии, совместимой с ней, будь лучше, если сможешь! - person Gagravarr; 30.01.2015
comment
То же решение для poi-ooxml 3.15, поэтому предположим, что оно будет работать и для 3.11. - person rob2universe; 07.10.2016

На данный момент нет org.apache.poi.xwpf.converter.core или PDF, совместимых с POI 3.17, которые я мог бы найти. Вы должны вернуться к xdocreport 2.0.1 и классам fr.sagres.poi.xwpf.converter.pdf.PdfConverterPdfOptions, отличным от Apache, и они совместимы с пакетом POI 3.17.

Я надеюсь, что это сэкономит кому-то несколько часов, которые мне потребовались, чтобы понять это.

person HD-us-Fl    schedule 28.03.2018