opensagres / xdocreport

XDocReport means XML Document reporting. It's Java API to merge XML document created with MS Office (docx) or OpenOffice (odt), LibreOffice (odt) with a Java model to generate report and convert it if you need to another format (PDF, XHTML...).

Home Page:https://github.com/opensagres/xdocreport

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

OpenPDF converter fails with java.lang.NoSuchFieldError: list

andreldm opened this issue · comments

Documents with lists are not properly converted by either PDF converters. The iText-based one will not render bullet points, even the characters as plain text are missing, I think this has been reported in the past. The one based on OpenPDF fails with java.lang.NoSuchFieldError: list, I can workaround this by replacing lists with bullet point characters but it's very annoying.

Sample document: sample.odt

Any contribution are welcome!

Do you have a full stack trace for this error?
Which version of OpenPDF?

Do you have a full stack trace for this error?

Caused by: java.lang.NoSuchFieldError: list
	at fr.opensagres.odfdom.converter.pdf.internal.stylable.StylableList.addElement(StylableList.java:185)
	at fr.opensagres.odfdom.converter.pdf.internal.stylable.StylableList.addElement(StylableList.java:93)
	at fr.opensagres.odfdom.converter.pdf.internal.ElementVisitorForIText.addITextContainer(ElementVisitorForIText.java:848)
	at fr.opensagres.odfdom.converter.pdf.internal.ElementVisitorForIText.addITextContainer(ElementVisitorForIText.java:836)
	at fr.opensagres.odfdom.converter.pdf.internal.ElementVisitorForIText.visit(ElementVisitorForIText.java:606)
	at org.odftoolkit.odfdom.dom.element.text.TextListItemElement.accept(TextListItemElement.java:198)
	at fr.opensagres.odfdom.converter.core.ElementVisitorConverter.visit(ElementVisitorConverter.java:83)
	at fr.opensagres.odfdom.converter.pdf.internal.ElementVisitorForIText.addITextContainer(ElementVisitorForIText.java:845)
	at fr.opensagres.odfdom.converter.pdf.internal.ElementVisitorForIText.addITextContainer(ElementVisitorForIText.java:836)
	at fr.opensagres.odfdom.converter.pdf.internal.ElementVisitorForIText.visit(ElementVisitorForIText.java:595)
	at org.odftoolkit.odfdom.dom.element.text.TextListElement.accept(TextListElement.java:188)
	at fr.opensagres.odfdom.converter.core.ElementVisitorConverter.visit(ElementVisitorConverter.java:83)
	at org.odftoolkit.odfdom.dom.DefaultElementVisitor.visit(DefaultElementVisitor.java:2605)
	at fr.opensagres.odfdom.converter.pdf.internal.ElementVisitorForIText.visit(ElementVisitorForIText.java:258)
	at org.odftoolkit.odfdom.dom.element.office.OfficeTextElement.accept(OfficeTextElement.java:805)
	at fr.opensagres.odfdom.converter.pdf.PdfConverter.processBody(PdfConverter.java:138)
	at fr.opensagres.odfdom.converter.pdf.PdfConverter.doConvert(PdfConverter.java:66)
	at fr.opensagres.odfdom.converter.pdf.PdfConverter.doConvert(PdfConverter.java:44)
	at fr.opensagres.odfdom.converter.core.AbstractODFConverter.convert(AbstractODFConverter.java:42)
	at fr.opensagres.xdocreport.converter.odt.odfdom.itext.ODF2PDFViaITextConverter.convert(ODF2PDFViaITextConverter.java:62)

Which version of OpenPDF?

I'm using XDocReport 2.0.6 which I believe transitively brings in OpenPDF 1.3.18. The latest release which is compatible with XDocReport is 1.3.36, same error happens, the latest Java 8-compatible release is 1.3.43 but there are breaking changes.

That's really odd, while debugging it seems like the field exists and is accessible:
image

I have created an empty maven project in Intellij, the only dependencies are:

<dependency>
  <groupId>fr.opensagres.xdocreport</groupId>
  <artifactId>xdocreport</artifactId>
  <version>2.0.6</version>
</dependency>

<dependency>
  <groupId>fr.opensagres.xdocreport</groupId>
  <artifactId>fr.opensagres.odfdom.converter.pdf.openpdf</artifactId>
  <version>2.0.6</version>
</dependency>

And the code is:

public class Main {
    public static void main(String[] args) throws Exception {
        InputStream in = Files.newInputStream(Paths.get("sample.odt"));
        OutputStream out = Files.newOutputStream(Paths.get("sample.pdf"));
        Options options = Options.getFrom(ODT).to(PDF);
        ConverterRegistry.getRegistry().getConverter(options).convert(in, out, options);
    }
}

I executed the application passing -verbose:class, there is only one com.lowagie.text.List class loaded and it comes from openpdf-1.3.18.jar.

@angelozerr @andreldm

I created a simple reproducible example for this problem: https://github.com/asolntsev/xdocreport-openpdf-demo

@andreasrosdal It doesn't depend on OpenPDF version.

Thank you for reporting and making the test case.
How can we solve this? Is the bug in OpenPDF or xdocreport?

@andreasrosdal I don't know, judging by the stack trace, it's more likely a xdocreport bug