6

我已经使用飞碟一段时间了,效果非常好。

我可以像这样通过uri设置文档

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

这很好,因为它将解析所有相对于给定 URI 的相关 css 资源等。但是,我现在正在生成 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 解析 jar(只是为了保持一致的错误和功能)。

4

2 回答 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()));

但这失败了,因为它尝试从 http://www.w3.org下载 HTML docType (它为 java 库返回 503)。

于 2009-08-11T08:21:58.423 回答
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 提供了一个实体解析器。

于 2009-11-08T22:03:10.090 回答