Преобразование Freemarker в PDF

Я разрабатываю отчеты с помощью freemarker, у меня возникла проблема, когда мне нужен обработанный вывод в формате PDF.

Что я хочу сделать, так это передать шаблон fremarker HTML + CSS в механизм freemarker и вывести обработанный HTML в виде PDF. Текущая проблема, с которой я столкнулся, заключается в том, как преобразовать обработанный файл freemarker в PDF.

    try {
        Configuration cfg = new Configuration();
        Template tpl = cfg.getTemplate("example.ftl");
        OutputStreamWriter output = new OutputStreamWriter(System.out);

        Map testHashMap = new HashMap();
        testHashMap.put("test", "testValue");

        tpl.process(testHashMap, output);

    } catch (Exception e) {
        e.printStackTrace();
    }

При поиске в Интернете я не смог найти никакой информации по этой теме, но я узнал о структуре iText.

try {
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document doc = builder.parse(new StringBufferInputStream(buf.toString()));
    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocument(doc, null);
    renderer.layout();
    OutputStream os = response.getOutputStream();
    renderer.createPDF(os);
    os.close();
} catch (Exception ex) {
    ex.printStackTrace();
}

Теперь проблема в том, как мне объединить эти два фрагмента кода для создания PDF-файла?

Вся помощь очень ценится

С уважением, МилиндаД.


person MilindaD    schedule 15.04.2011    source источник


Ответы (3)


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

Данные -> Преобразователь Freemarker -> HTML

Данные -> преобразователь iText -> pdf

или вы можете использовать XSLT в html и использовать XSL-FO, например Apache FOP, но мне это кажется излишним.

person Riccardo Cossu    schedule 15.04.2011

Я бы НЕ рекомендовал использовать iText, так как он распространяется под лицензией AGPL.

Если вы предоставляете услугу на основе программного обеспечения, полученного по лицензии AGPL, вам необходимо предоставить бесплатный доступ ко всему программному обеспечению для этой услуги (вероятно, с ограничениями, подразумеваемыми концепцией «простой агрегации»).

Вы можете использовать openhtmtopdf в коммерческих целях, а также бесплатно, так как он предоставляется под лицензией LGPL.

person AConsumer    schedule 05.12.2019

Кукольник кажется хорошим вариантом. Вы можете запустить отдельный процесс узла для доступа к вашему API и печати.

https://blog.risingstack.com/pdf-from-html-node-js-puppeteer/

person Joshua Samuel    schedule 23.07.2020