2009-08-06 13 views
6

Ich benutze seit einer Weile Flying Saucer mit tollen Ergebnissen.Was ist der einfachste Weg, eine XHTML-Zeichenkette mit Fliegende Untertasse in PDF zu konvertieren?

kann ich ein Dokument über uri gesetzt wie so

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

das ist schön, da es alle relativen CSS-Ressourcen usw. in Bezug auf die gegebene URI aufgelöst wird. Allerdings erzeuge ich jetzt das xhtml und möchte es direkt in ein PDF rendern (ohne eine Datei zu speichern). Die entsprechenden Methoden in ITextRenderer zu sein scheinen:

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

Wie Sie sehen können, meine vorhandenen Code gibt nur die uri und ITextRenderer macht die Arbeit von den Document für mich zu schaffen.

Was ist der kürzeste Weg zum Erstellen der Document von meinem formatierten xhtml String? Ich würde es vorziehen, die vorhandenen Flying Saucer-Bibliotheken zu verwenden, ohne ein weiteres XML-Parsing-JAR importieren zu müssen (nur um konsistente Fehler und Funktionen zu vermeiden).

Antwort

5

Die folgenden Werke:

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

Zuvor hatte ich

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

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

aber das fehlschlägt, da es die HTML docType von http://www.w3.org herunterladen versucht (die 503 ist für die Java-Libs zurückgibt).

+0

Dies ist genau das, was ich gesucht habe, danke. – Jared

1

Ich benutze folgende ohne Problem:

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

Die wichtigsten Unterschiede sind hier in einem Null vorbei URI, und stellte auch das Document mit einem Unternehmen Resolver.

Verwandte Themen