Вопрос по pdf, rendering, xhtmlrenderer, xhtml, flying-saucer – Какой самый простой способ преобразования строки xhtml в PDF с помощью Flying Saucer?

6

мы использовалиЛетающая тарелка какое-то время сейчас с потрясающими результатами.

Я могу установить документ через URI, так

ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(xhtmlUri);

Что хорошо, так как он разрешит все относительные ресурсы CSS и т. Д. Относительно данного URI. Однако я'm теперь генерирует xhtml и хочет визуализировать его непосредственно в PDF (без сохранения файла). Соответствующие методы вITextRenderer похоже:

private Document loadDocument(final String uri) {
    return _sharedContext.getUac().getXMLResource(uri).getDocument();
}

public void setDocument(String uri) {
    setDocument(loadDocument(uri), uri);
}

public void setDocument(Document doc, String url) {
    setDocument(doc, url, new XhtmlNamespaceHandler());
}

Как вы можете видеть, мой существующий код просто дает URI иITextRenderer делает работу по созданиюDocument для меня.

Какие'самый короткий способ созданияDocument из моей отформатированной строки xhtml? Я'я предпочел бы использовать существующие библиотеки Flying Saucer без необходимости импортировать еще один jar-файл для разбора XML (только ради согласованных ошибок и функциональности).

Ваш Ответ

2   ответа
1

    final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    documentBuilderFactory.setValidating(false);
    DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
    builder.setEntityResolver(FSEntityResolver.instance());
    org.w3c.dom.Document document = builder.parse(new ByteArrayInputStream(doc.toString().getBytes()));

    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocument(document, null);
    renderer.layout();
    renderer.createPDF(os);

Ключевыми различиями здесь является передача пустого URI, а также предоставление DocumentBuilder распознавателя сущностей.

5

Document document = XMLResource.load(new ByteArrayInputStream(templateString.getBytes())).getDocument();

Ранее я пытался

final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setValidating(false);

final DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
Document document = documentBuilder.parse(new ByteArrayInputStream(templateString.getBytes()));

но это не удается, так как он пытается загрузить HTML DocType изhttp://www.w3.org (который возвращает 503 's для java libs).

Это именно то, что я искал, спасибо. Jared

Похожие вопросы