2012-05-08 28 views
9

Ich muss meiner Website einige Exportfunktionen wie CSV oder PDF anbieten. Gibt es ein leistungsstarkes und kostenloses Tool für Java, um HTML-Seiten in das PDF-Format zu konvertieren?Wie HTML-Seite in PDF-Format exportieren?

+1

Mögliche doppelte: http://stackoverflow.com/questions/633780/converting-html-files-to-pdf – David

Antwort

27

Mit Flying Saucer API mit iText PDF können Sie HTML-Inhalte in PDF konvertieren.
Die folgenden Beispiele helfen Ihnen, die Umwandlung von XHTML in PDF zu einem gewissen Grad zu verstehen. Mit Flying Saucer API

Beispiele:
Sie benötigen folgende Bibliotheken:

  • Kern-renderer.jar
  • iText-2.0.8.jar

Sie können diese finden Ressourcen in flyingsaucer-R8.zip.

Beispiel 1: Verwenden von XML-Ressource:

// if you have html source in hand, use it to generate document object 
Document document = XMLResource.load(new ByteArrayInputStream(yourXhtmlContentAsString.getBytes())).getDocument(); 

ITextRenderer renderer = new ITextRenderer(); 
renderer.setDocument(document, null); 

renderer.layout(); 

String fileNameWithPath = outputFileFolder + "PDF-XhtmlRendered.pdf"; 
FileOutputStream fos = new FileOutputStream(fileNameWithPath); 
renderer.createPDF(fos); 
fos.close(); 
System.out.println("File 1: '" + fileNameWithPath + "' created."); 

Beispiel 2: Verwenden von XHTML direkte Eingabe Dokument:

ITextRenderer renderer = new ITextRenderer(); 

// if you have html source in hand, use it to generate document object 
renderer.setDocumentFromString(yourXhtmlContentAsString); 
renderer.layout(); 

String fileNameWithPath = outputFileFolder + "PDF-FromHtmlString.pdf"; 
FileOutputStream fos = new FileOutputStream(fileNameWithPath); 
renderer.createPDF(fos); 
fos.close(); 

System.out.println("File 2: '" + fileNameWithPath + "' created."); 

Beispiele iText API verwenden:
Sie benötigen folgende Bibliotheken :

  • Kern-renderer.jar
  • itextpdf-5.2.1.jar

Sie diese Ressourcen bei here finden.

Example3: Verwenden von HTML Worker:

com.itextpdf.text.Document document = 
     new com.itextpdf.text.Document(com.itextpdf.text.PageSize.A4); 
String fileNameWithPath = outputFileFolder + "PDF-HtmlWorkerParsed.pdf"; 
FileOutputStream fos = new FileOutputStream(fileNameWithPath); 
com.itextpdf.text.pdf.PdfWriter pdfWriter = 
     com.itextpdf.text.pdf.PdfWriter.getInstance(document, fos); 

document.open(); 

//********************************************************** 
// if required, you can add document meta data 
document.addAuthor("Ravinder"); 
//document.addCreator(creator); 
document.addSubject("HtmlWoker Parsed Pdf from iText"); 
document.addCreationDate(); 
document.addTitle("HtmlWoker Parsed Pdf from iText"); 
//**********************************************************/ 

com.itextpdf.text.html.simpleparser.HTMLWorker htmlWorker = 
     new com.itextpdf.text.html.simpleparser.HTMLWorker(document); 
htmlWorker.parse(new StringReader(sb.toString())); 

document.close(); 
fos.close(); 

System.out.println("File 3: '" + fileNameWithPath + "' created."); 
+0

leid für eine späte Antwort .. ... htmlWorker.parse (neuer StringReader (sb.toString())); Ich erhalte eine JSP-Ausgabe ... wie wandle ich das in HTML um. Ich denke, sb ist der XHTML/HTML-Inhalt. Ist das richtig? – Harry

+0

Arabische Buchstaben werden nicht mit Ihrem Code angezeigt. Gibt es einen Weg ? – user4757345

+0

@ user4757345: Haben Sie gesehen, dass der Inhaltstyp "html" auf "text/html; charset = utf-8" gesetzt ist? Grundsätzlich ist es der HTML-Befehl, so dass der Parser das gleiche versteht und verwendet, während er die PDF-Seite erstellt. –