2009-08-06 19 views
6

Bir süredir harika sonuçlarla Flying Saucer kullanıyorum. o Verilen URI göre tüm göreli css kaynakları vb çözecektir olarakUçan Saucer'i kullanarak bir xhtml dizesini PDF'ye dönüştürmenin en kolay yolu nedir?

Ben, güzel yani

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

gibi uri aracılığıyla bir belgeyi ayarlayabilirsiniz. Ancak, şimdi xhtml oluşturuyorum ve doğrudan bir PDF'ye (bir dosyayı kaydetmeden) render etmek istiyorum. ITextRenderer uygun yöntemler gibi görünüyor: Gördüğünüz gibi

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

, benim mevcut kod sadece uri verir ve ITextRenderer benim için Document yaratma çalışır.

Biçimlendirilmiş xhtml String sayfasından Document'u oluşturmanın en kısa yolu nedir? Var olan Uçan Saucer libs'larını başka bir XML ayrıştırma kavanozuna aktarmaya gerek kalmadan kullanmayı tercih ederim (sadece tutarlı hatalar ve işlevler uğruna).

cevap

5

aşağıdaki çalışır:

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

Daha önce, ben

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

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

denemiş ama (java kütüphanelerini için 503 's döndürür) http://www.w3.org HTML Doctype'ı indirmek için çalışır gibi bu başarısız olur. Burada

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

önemli farklılıklar bir boş URI'sında geçiyoruz ve ayrıca bir varlık resolverli DocumentBuilder'ı sağlanan:

+0

Tam olarak aradığım şey bu, teşekkürler. – Jared

1

Ben sorunsuz takip kullanın.

İlgili konular