Как и требование к приложению, я пытаюсь получить PDF от ftl (шаблон такой же, как html), но не удалось из-за исключения - PullRequest
0 голосов
/ 12 марта 2020

Ниже приведена ошибка при запуске проекта

 java.lang.NoSuchMethodError: org.xhtmlrenderer.layout.SharedContext: method <init>()V not found at org.xhtmlrenderer.pdf.ITextRenderer.<init>(ITextRenderer.java:107) at org.xhtmlrenderer.pdf.ITextRenderer.<init>(ITextRenderer.java:98)

Я пытаюсь запустить приложение в автономном режиме. Я добавил все необходимые банки в classpath.
Но не уверен, почему я получаю эту ошибку. Пожалуйста, предложите

Пожалуйста, найдите проект здесь https://github.com/anju051989/service-client.git

Ниже приведен фрагмент кода для преобразования шаблона в pdf

private byte[] convertFtlTOPdf(ByteArrayOutputStream fbos) throws PdfSystemException {
        //log.info("[pdfUtils.MPA base] start generating PDF");

        if(null !=fbos){
            //log.debug("File size is :"+ fbos.size()/1024/1024);
            }
        ByteArrayOutputStream pbos = new ByteArrayOutputStream();
        try {
            DocumentBuilderFactoryImpl factory = new DocumentBuilderFactoryImpl();
            // DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();


            factory.setIgnoringComments(true);
            factory.setValidating(false);
            factory.setNamespaceAware(true);
            factory.setFeature("http://xml.org/sax/features/namespaces", false);
            factory.setFeature("http://xml.org/sax/features/validation", false);
            factory.setFeature("http://apache.org/xml/features/dom/defer-node-expansion", false);
            factory.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
            factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);


            long start1 = System.currentTimeMillis();
            DocumentBuilder builder = factory.newDocumentBuilder();

             builder.setEntityResolver(new EntityResolver() {
                    public InputSource resolveEntity(String publicId, String systemId)
                            throws SAXException, IOException {
                        if (systemId.contains("foo.dtd")) {
                            return new InputSource(new StringReader(""));
                        } else {
                            return null;
                        }
                    }
                });
            Document doc = builder.parse(new ByteArrayInputStream(fbos.toByteArray()));

            //log.debug("end DocumentBuilder  " + "Total time: " + (System.currentTimeMillis() - start1)/1000 + "s");


            long start = System.currentTimeMillis();

            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocument(doc, null);
            renderer.layout();



            renderer.createPDF(pbos);

            //log.debug("end created pdf " + "Total time: " + (System.currentTimeMillis() - start)/1000 + "s");

            return pbos.toByteArray();
        } catch (Exception e) {
            throw new PdfSystemException(e);
        } finally {
            try {
                pbos.close();
            } catch (IOException e) {
                throw new PdfSystemException(e);
            }
            //log.info("[pdfUtils.MPA base] end of create PDF");
        }
    }

Также, если какой-либо рекомендуемый способ весенней загрузки для создания pdf с использованием шаблона ftl, пожалуйста, подскажите. Спасибо

...