2010-04-21 22 views
8

Busco una utilidad de código abierto que permitirá a mí para generar archivos PDF desde XML o HTML bastante simple. Puede haber imágenes enlazadas, así como texto sin formato. No habrá CSS o JavaScript. Idealmente, me gustaría que el PDF generado sea analizable, es decir, para que el contenido no sea una imagen. Buscando en Google veo que hay iText y PDFBox.una biblioteca Java para la conversión de XML/HTML a PDF

¿Hay algo que recomendar uno sobre el otro?

+0

Necesitaba representar los informes html generados existentes en formato PDF. Debido al presupuesto y a los límites de tiempo, la única manera era encontrar un convertidor que se ejecutara sobre HTML generado. Probé alrededor de 4 bibliotecas y obtuve los mejores resultados con: http://pd4ml.com –

+0

¿Alguien conoce algunas bibliotecas nuevas? Estos parecen estar un poco obsoletos – dege

Respuesta

6

Apache FOP es una biblioteca Java que se encubierta de XSL Formatting Objects (XSL-FO) a PDF

+3

, debes explicar que este usa XSL-FO, no simple html. – Bozho

+0

ok gracias.XSL_FO es nuevo para mí, pero bien podría ser algo que podría usar –

+0

descripción ampliada y señaló el artículo de Wikipedia señalado por ilikeorangutans en su respuesta –

6

También puede considerar una combinación de Flying Saucer (XHTMLRenderer) y el conocido iText.

puede encontrar un blog con ejemplos de código here.

0

No cumple con sus restricciones por ser de código abierto, y puedo ver cómo eso sería un factor decisivo, pero si puede pagarlo, Prince es absolutamente excelente en esta tarea. Y si también lo necesita para hacer CSS para un diseño y diseño más avanzados, puede hacerlo fácilmente. Actualmente lo estoy usando para una aplicación web Java y funciona extremadamente bien.

-4

miré por un largo tiempo, y la mejor solución que encontré fue:

WKHTMLTOPDF.

sólo tiene que descargar el instalador desde aquí download.

y desde la línea de comandos: wkhtmltopdf http://www.google.com google.png

+0

ruby ​​tiene un complemento excelente envoltorio para esta aplicación llamada wicked-pdf, pero java no tiene ninguna envoltura de este tipo aún en mi limitado conocimiento. Si alguien conoce alguna envoltura, entonces por favor actualízame. :) – prashu132

+0

@ prashu132 ¿por qué necesitas una envoltura? Simplemente ejecute una línea de comentario – Dejell

+0

en ruby ​​podemos generar pdf directamente desde un archivo de vista sin ir a la línea de comandos – prashu132

2

JWT ha añadido recientemente un HTML decente/CSS a PDF renderering motor: ver el ejemplo en http://jwt.emweb.be/jwt-gallery/gallery/media/pdf-output para un ejemplo

Se está mejorando rápidamente para llegar a cumplir, y ya admite combinaciones arbitrarias de flotantes, tablas, contenido en bloque y en línea, posicionamiento absoluto/relativo y procesamiento de hoja de estilos CSS (en la versión de git).

2

pienso en más idea es convertir HTML a PDF es una . Primero convierta el archivo .html al archivo .xhtml usando la biblioteca jtidy b. En segundo lugar convertido resultó archivo .xhtml al archivo .pdf utilizando itextrender

Aquí está el código

a.

FileInputStream fis = null; 
try 
{ 
    fis = new FileInputStream("D://Html//junitnoframes.html"); 
} 
catch (java.io.FileNotFoundException e) 
{ 
    System.out.println("File not found: "); 
} 
    Tidy tidy = new Tidy(); 
    tidy.setShowWarnings(false); 
    tidy.setXmlTags(false); 
    tidy.setInputEncoding("UTF-8"); 
    tidy.setOutputEncoding("UTF-8"); 
    tidy.setXHTML(true);// 
    tidy.setMakeClean(true); 
    Document xmlDoc = tidy.parseDOM(fis, null); 
try 
{ 
    tidy.pprint(xmlDoc,new FileOutputStream("D://Html//msc.xhtml")); 
} 
catch(Exception e) 
{ 
} 

b.

public static void main(String[] args) 
    throws IOException, DocumentException { 
    String inputFile = "D://Html//msc.xhtml"; 
    String url = new File(inputFile).toURI().toURL().toString(); 
    String outputFile = "D://Html//secondsdoc.pdf"; 
    OutputStream os = new FileOutputStream(outputFile); 

    ITextRenderer renderer = new ITextRenderer(); 
    renderer.setDocument(url); 
    renderer.layout(); 
    renderer.createPDF(os); 

    os.close(); 
    } 
Cuestiones relacionadas