# HTML to PDF Konventieren



## FsMarine (17. Aug 2005)

Hallo,

ich bin verzweifelt, ich muss ein Programm das möglichst fehlerfrei ein HTML Dokument interpretiert und diese Interpretation in eine PDF schreibt.

Als erstes habe ich mir dafür den Reportmanager sowie den PDF schreiber von http://big.faceless.org angesehen...
musste aber feststellen, das ein dummer roter demo stempel immmer in der Mitte auftaucht... (ist ansonsten nach mein geschmack eine echt schöne libary)...

dann habe ich auf der seite http://128.146.118.49/ etwas über das die klasse Html2pdf gelesen die auf Itext aufbaut...

Super dachte ich mir, hab es ausprobiert, funktionierte, hab eine etwas komplexere html datei (nein kein browserseitigen script, nicht mal css nur eine tabelle) und bumm es funktionierte nicht mehr richtig...

dann habe ich mir gedacht es selber zu programmieren... und zum reinschreiben die APIs von Itext zu benutzen...

da stellt sich aber auch noch die frage ob ich für diese aufgabe sax benutzen kann... html und xml sind ja miteinander verwand...

und das ganz große problem bei der aufgabe ist den einzelnen tags und attribute die eigenschaften zuzuordnen die sie besitzen... das sind ja schließlich zich, und für jeden eine Klasse schreiben und es dann kompatibel mit Itext zu machen omg...

also ich wäre zu jeglicher hilfe zu dem Problem Dankbar, und sorry wenn das das falsche Forum ist, wusste aber nicht wo ich es besser zuordnen kann, schließlich besitzt html und xml die gleiche struktur.


----------



## DP (17. Aug 2005)

jasperreports kann das und ist free


----------



## FsMarine (17. Aug 2005)

ja, es kann aus einer xml datei eine pdf html oder was weiß ich erzeugen, aber nicht aus einer html eine pdf...

zumindestens weiß ich nicht wie, und finden konnte ich auch nichts...

wenn es anders ist sagt bitte bescheid, und gibt ein Hinweis...
danke...


----------



## Guest (17. Aug 2005)

IText hilft zwar weiter, (hab gerade herausgefunden das es eine klasse namens HtmlParser gibt)


```
public static void main(String[] args) {
            	
        // Erzeugt eine Neue Dokument Instanz
        Document doc = new Document(PageSize.A4, 80, 60, 60, 60);
        

        
    	
    	try {
                       // Erzeugt ein PdfWriter in dem der Inhalt aus dem Dokument in die Datei xml3pdf.pdf   geschrieben wird

                        PdfWriter.getInstance(doc, new FileOutputStream("xml3pdf.pdf"));
                        // Parst die htmldatei und kopiert den Inhalt in die PDF
                        HtmlParser.parse(doc, "dasistWahr.htm");

               }
                catch (DocumentException e)
                {
                        e.printStackTrace();
                }
                catch(IOException e)
                {
                        e.printStackTrace();
                }
}
```

Das Problem ist das es nicht gerade flexibel ist mit dem HTML code, na ok das ist untertrieben...
der Interpretiert teilweise ganz anders als z.B. der InternetExplorer....

Beispiel:

```
<html>
<head>
<!-- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
!-->
</head>

<body>
<table width="200" border="0">
  <tr>
    <td>hier</td>
    <td>und</td>
  </tr>
  <tr>
    <td>da</td>
    <td><div align="center">das</div></td>
  </tr>
</table>
 ist [i]wahr haha [/i]
 <div align="center">das</div>
 <div align="right">[img]bla.JPG[/img]</img>
 </div>
</body>
</html>
```

Erstellt eine Tabelle die links orentiert ist eine Breite von 200 hat und kein Rand besitzt, direkt darunter ein text der 
unterschiedlich zentriert ist (die attribute in den div tags) und wiederrum dadrunter wird die datei "bla" eingespielt und rechts zentriert....

im PDF sieht das nun so anders aus...

die Tabellenbreite bezieht sich auf das ganze Formular (width wird nicht akzeptiert)
die ausrichtung des textes und der bilder wird ignoriert (probleme mit dem tag align)
und das merkwürdigste das bild ist über dem Text (keine erklärung dafür...)

Es muss doch ein brauchbaren HtmlInterpreter geben....


----------



## FsMarine (18. Aug 2005)

Kennt ihr vielleicht nicht eine möglichkeit vielleicht aus einer HTML Datei (mit css) eine XML mit passendender DTD zu erstellen...

Weil es ja genug libarys gibt die aus einer XML mit DTD eine PDF machen können...

wobei, das vermutlich auch nicht möglich ist, weil ich dann bestimmt schon was im netz gefunden hätte...


----------



## sourcemaker (24. Sep 2005)

Hi,

wenn du eine Lösung finden solltest, dann sag bitte bescheid 

Habe selbst alle gängigen mir bekannten Open-Source Projekte getestet,
wobei jedes mal das Ergebnis unbrauchbar wurde, sobald Tabellen im (X)HTML
Dokument vorhanden waren

Teilergebnisse sind möglich, sofern das XHTML über ein XSLT in ein 
FO gerendert wird, welches danach mit der Apache FOP library in 
ein PDF konvertiert werden kann.

Dieser Vorgang verbraucht allerdings extrem viel RAM und setzt vorraus,
dass alle XHTML Dokumente einen ähnlichen,  nämlich dem im XSLT
berücksichtigen Aufbau haben.

Gruss
Sourcemaker


----------



## Bleiglanz (25. Sep 2005)

unter Linux würde ich einfach html2ps | ps2pdf über System.exec nehmen, weil man dann nichts proggen muss und das Ergebnis eh nur ein erster Ansatz ist

HTML2PDF in Java auszuprogrammieren ist eine wirklich gewaltige Aufgabe, hat bisher noch keiner gelöst, obwohl alle nötigen bestandteile vorhanden wären (htmlparser, fop, usw.)

aber allein das handling von bilder mit FOP ist nicht ganz einfach...


----------

