Pregunta

He estado usando platillo volante desde hace un tiempo con resultados impresionantes .

puedo configurar un documento a través de URI como tal

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

cual es bueno, ya que va a resolver todos los recursos relativos css, etc relativas a la URI dada. Sin embargo, ahora estoy generando el XHTML, y quieren hacerla directamente a un archivo PDF (sin guardar un archivo). Los métodos adecuados de ITextRenderer parecen ser:

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

Como se puede ver, mi código existente simplemente da uri y ITextRenderer hace el trabajo de creación de la Document para mí.

¿Cuál es la manera más corta de la creación de la Document de mi cadena con formato XHTML? Yo prefiero usar las librerias platillo volante existentes sin tener que importar otro frasco análisis XML (por el simple hecho de errores consistentes y funcionalidad).

¿Fue útil?

Solución

Las siguientes obras:

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

Anteriormente, había intentado

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

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

pero eso no funciona, ya que intenta descargar el código HTML http://www.w3.org (que devuelve de 503 para los libs Java).

Otros consejos

Yo uso la siguiente sin ningún problema:

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

Las diferencias claves aquí pasen en un nulo URI, y también proporcionaron la DocumentBuilder con una resolución de entidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top