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

6

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

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

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

Что хорошо, так как он разрешит все относительные ресурсы CSS и т. Д. Относительно данного URI. Однако я сейчас создаю 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 без необходимости импортировать еще один XML-файл для разбора (только из-за постоянных ошибок и функциональности).

Ваш Ответ

2   ответа
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 'для Java-библиотек).

Это именно то, что я искал, спасибо.
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 распознавателя сущностей.

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