6

Flying Saucerをしばらく使用していますが、素晴らしい結果が得られています。

そのように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 文字列からを作成する最短の方法は何ですか? 別の XML 解析 jar をインポートせずに、既存の Flying Saucer ライブラリを使用することをお勧めします (一貫したバグと機能のためだけに)。

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);

ここでの主な違いは、null URI を渡すことと、DocumentBuilder にエンティティ リゾルバーを提供することです。

于 2009-11-08T22:03:10.090 に答える