# HTML in PDF konvertieren?



## magic_halli (14. Mai 2008)

Hi,

ich habe einen String, welcher HTML-Tags beinhaltet. Ist es irgendwie möglich, HTML in leserliches PDF-Format zu konvertieren (mittels einer Java-API o.ä.)?

Danke und Gruß


----------



## lhein (14. Mai 2008)

Schau Dir mal iText an. Keine Ahnung ob es das beherrscht, aber ich denke schon.

lhe


----------



## magic_halli (14. Mai 2008)

Mit iText habe ich schon gearbeitet, aber meines Wissens geht das nicht dafür, denn der HTML-Content würde hierbei 1:1 als PDF geschrieben und nicht konvertiert! Will heißen: Ich sehe auch hierbei die HTML-Tags im PDF. Diese sollen aber, für den User, leserlich wie in einer HTML-Page umgewandelt und dann als PDF gespeichert werden!


----------



## lhein (14. Mai 2008)

Hier mal ein Ausschnitt aus einer Mailing Liste:



> MMarcavage (at) AndersonTechs.com wrote:
> > Is there a way to convert HTML files to a PDF doc using the iText Jar file?
> > I did not see any examples if you can
> 
> ...



und noch was:
Tutorial

evtl. auch das hier:
Apache FOP
wobei das soweit ich es auf den ersten Blick sehen konnte ein FO braucht als Input.

Vielleicht hilft es Dir ja. Sonst bleibt evtl. noch eine kommerzielle Lösung.

lhe


----------



## gizmo (14. Mai 2008)

Wie wärs mit http://www.allcolor.org/YaHPConverter/


----------



## magic_halli (14. Mai 2008)

Ich hab´s jetzt erstmal im groben gelöst - mittels *iText*! (wieder was dazugelernt  :###  )


```
String htmlString = "<h1>Ãœberschrift-h1</h1>
<h4>Ãœberschrift-h4</h4>" +
    						"<table border=1><tr><td>Testzeile1</td></tr><tr><td>Testzeile2</td></tr></table>" +
    						"Text ohne HTML-Tags
" +
    						"[url="http://www.cad.de"]Link[/url]

" +
    						"<HTML>" +
    						"<HEAD><TITLE>Foren auf CAD.de, Pro ENGINEER</title>" +
    						"<META HTTP-EQUIV=Content-Type CONTENT=text/html; charset=ISO-8859-1>" +
    						"</HTML>";
    		
    	// create the document
    	com.lowagie.text.Document document = new com.lowagie.text.Document(PageSize.A4, 80, 50, 30, 65 );
    	
    	// get mem stream
    	FileOutputStream fos = new FileOutputStream( "C:\...\test.pdf" );
	    BufferedOutputStream ms = new BufferedOutputStream(fos);
    	
    	// need the PdfWriter for some settings
    	PdfWriter myWriter = PdfWriter.getInstance(document, ms);
    	
    	// this is for letting the memory stream open when closing the document
    	myWriter.setCloseStream(false);
    	
    	document.open();
    	
    	HTMLWorker worker = new HTMLWorker(document);
    	StringReader sReader = new StringReader(htmlString);
    	
    	// get the list of tags in the html document
    	ArrayList list = HTMLWorker.parseToList(sReader,null);
    	PdfContentByte byt = myWriter.getDirectContent();
    	
    	// need columnText to automatically jump to a new line if end of Line is reached
    	ColumnText text = new ColumnText(byt);
    	text.setSimpleColumn( document.left(),document.bottom(),document.right(),document.top() );
    	for(int i = 0; i<list.size() ; i++){
    		text.addElement((com.lowagie.text.Element)list.get(i));
    	}
    	
    	// write the elements to the documentâ€¦
    	text.go();
    	document.close();
```
Das Grundgerüst habe ich, ziemlich unangepasst, im Netz gefunden und dann etwas umgeschrieben. Somit erzeugt es mir aus einem InputString eine PDF, in der die HTML-Tags konvertiert ausgegeben werden. Toll.  :wink:

Danke und Gruß


----------



## magic_halli (16. Mai 2008)

Also der Code funktioniert erstmal, ABER:
Wenn mein Eingangsstring mehr Text als eine A4-Seite beinhaltet, wird keine 2. Seite erstellt!
Ich bekomme immer nur ein PDF mit einer Seite heraus - der restliche Text wird dann einfach unterschlagen!

Hat jemand ne Ahnung, wie ich mehrere Seiten erstellen kann??? Ich finde dazu einfach keinerlei Doku bzw. Erklärungen.  :cry: 

Danke und Gruß


----------



## lhein (16. Mai 2008)

```
// need columnText to automatically jump to a new line if end of Line is reached
       ColumnText text = new ColumnText(byt);
       text.setSimpleColumn( document.left(),document.bottom(),document.right(),document.top() );
       for(int i = 0; i<list.size() ; i++){
          text.addElement((com.lowagie.text.Element)list.get(i));
       }
```

Denke mal, dass Du den Seitenumbruch irgendwie mit erstellen musst.
Im Moment scheinst Du ja einfach nur 1:1 alles auf die erste Seite zu kippen, egal ob es
drauf passt oder nicht.


----------



## magic_halli (16. Mai 2008)

> Denke mal, dass Du den Seitenumbruch irgendwie mit erstellen musst.
> Im Moment scheinst Du ja einfach nur 1:1 alles auf die erste Seite zu kippen, egal ob es
> drauf passt oder nicht.


Genau so ist es wahrscheinlich!

Weiß jemand wie ich in iText überhaupt irgendwie nen Seitenumbruch mache bzw. das Schlagwort für Seitenumbruch, damit ich mir die Infos ggf. aus der Doku ziehen kann???


Gruß


----------



## meinereiner (2. Aug 2008)

Hallo,

hat jemand Erfahrungen mit URLs in PDF umwandeln?
Ich habe es schon mit diversen Libs probiert, allerdings mirt mäßigem Erfolg, da diese alle nicht 100%ig HTML-konform sind.
Es gibt ja noch eine Anzahl weiterer die selbige Funktionen zur Verfügung stellen sollen. Allerdings bringe ich es nicht hin. Selbst bei http://www.google.de bekomme ich Fehler. Ich vermute das liegt daran, dass der Parser (in den meisten Fällen SAX) zu sensibel ist. 

Hat jemand eine andere Lösung?

Gruß
meinereiner


----------



## noushenri (23. Mai 2011)

Zur Umwandlung von DOC, XLS und PPT können Sie mit dieser Lösung: DOC to PDF with Java
 kann auch HTML in PDF, sondern nur klassische HTML, keine Unterstützung für CSS.


----------

