Использование летающей тарелки и docx4j в одном проекте
У меня есть проект, в котором я хочу иметь возможность форматировать документы xhtml как в формате PDF, так и в формате Docx.
Я использовал flyingsaucer для форматирования документов PDF в течение некоторого времени, и мне всегда приходилось использовать более старую версию iText для совместимости. Теперь, когда я использую docx4j, мне нужно обновить iText до более новой версии, иначе он не будет работать.
FlyingSaucer (xhtmlrenderer R8pre2) использует iText 2.0.8
docx4j 2.8.0 использует iText 2.1.7
Я могу использовать только одну библиотеку iText, но какую бы библиотеку я ни использовал, у меня возникают проблемы с совместимостью либо с летающей тарелкой, либо с docx4j.
На данный момент проблема сводится к одному конкретному методу (com.lowagie.text.pdf.BaseFont.getCharBBox
) который в одной версии занимает char
параметр, а в другом требуется int
параметр.
Я думаю, что мне, возможно, придется скачать исходники для flyingsaucer или iText (я думаю, что они оба с открытым исходным кодом) и исправить это самостоятельно (не то, что я делал раньше, но я думаю, что смогу справиться), но я могу представить, что я не первый человек, который столкнется с этой проблемой, и, возможно, есть другой способ обойти ее, или кто-то другой уже разработал один из проектов для решения такого рода проблемы.
1 ответ
Раскрытие информации: работаю над проектом docx4j
docx4j 2.8.0 использует только iText, потому что это требуется нашим форком Flying Saucer, который выполняет импорт XHTML.
В этой ветке я добавил материал, связанный с docx, и удалил некоторые вещи, которые нам не нужны. Вполне возможно, что в будущем мы предложим это "Летающей тарелке" - это вопрос времени.
В то же время, для полноты, я упоминаю, что вы можете иметь настоящую Летающую тарелку и наш форк одновременно на вашем пути к классам, поскольку наш форк перепакован.
Возвращаясь к вашему вопросу, теперь FlyingSaucer имеет ту же зависимость 2.1.7, поэтому, если вы можете использовать текущие источники, это должно решить проблему, которую вы подняли.