# HTML Seite als PDF



## Stroker89 (28. Jan 2011)

Hallo 

Ich suche eine Möglichkeit eine HTML Seite (ist die Ausgabe) über ein Servlet (als Beispiel) direkt als PDF umzuwandeln.

Gibt es da irgendwelche Möglichkeiten? Meine suche hat bis jetzt kein Ergebnis gebracht 

Gruß Martin


----------



## RoNa (29. Jan 2011)

Hi, ich würde jasperreports benutzen.

Gruß,

Robert

Creating Reports with iReports and JasperReports - Setting up the Webapp

ImageServlet (JasperReports 4.0.0 API)


----------



## Stroker89 (29. Jan 2011)

Danke  werd's mir anschauen.

Gruß Martin


----------



## RoNa (29. Jan 2011)

Stroker89 hat gesagt.:


> Danke  werd's mir anschauen.
> 
> Gruß Martin



Dafür gibt's auch den 'Denke'-Button ;-)


----------



## Noctarius (29. Jan 2011)

robertnac hat gesagt.:


> 'Denke'-Button


----------



## Stroker89 (29. Jan 2011)

Den Button hab ich noch nicht gefunden, aber dafür hab ich mal auf "Danke" gedrückt :lol:


----------



## nocturne (29. Jan 2011)

Ich benutze folgendes Servlet:

```
package org.bla;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.net.URL;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;

import org.apache.pdfbox.PDFBox;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.PrettyXmlSerializer;
import org.htmlcleaner.TagNode;
import org.w3c.dom.Document;
import org.xhtmlrenderer.pdf.ITextRenderer;
import org.xml.sax.InputSource;

import com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl;

public class PDFServlet extends HttpServlet {

	DocumentBuilderFactoryImpl dbfi = new DocumentBuilderFactoryImpl();

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		try {
			resp.setContentType("application/pdf");

			HttpServletResponse response = (HttpServletResponse) resp;
			HtmlCleaner cleaner = new HtmlCleaner();

			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			OutputStreamWriter osw = new OutputStreamWriter(baos);

			URL url = new URL(req.getRequestURL() + ".jsp?" + req.getQueryString());
			InputStream t = (InputStream) url.openStream();
			TagNode node = cleaner.clean(t);
			t.close();
			node.serialize(new PrettyXmlSerializer(cleaner.getProperties()), osw);
			osw.close();

			String xhtml = baos.toString("utf8");
			System.out.println(xhtml);
			StringReader contentReader = new StringReader(xhtml);
			InputSource source = new InputSource(contentReader);

			DocumentBuilder dbi = dbfi.newDocumentBuilder();
			Document xhtmlContent = dbi.parse(source);

			ITextRenderer renderer = new ITextRenderer();

			renderer.getFontResolver().addFont(getClass().getResource("/wingding.ttf") + "", false);
			renderer.setDocument(xhtmlContent, "");
			renderer.layout();

			PDFBox box = new PDFBox();

			ByteArrayOutputStream pdfdata = new ByteArrayOutputStream();
			renderer.createPDF(pdfdata);
			pdfdata.close();

			PDFParser p = new PDFParser(new ByteArrayInputStream(pdfdata.toByteArray()));
			p.parse();

			PDDocument doc = new PDDocument(p.getDocument());
			PDDocumentInformation info = doc.getDocumentInformation();

			info.setAuthor("Author");
			info.setKeywords("Keywords");
			info.setTitle("Title");
			info.setTrapped("False");
			info.setCustomMetadataValue("", "");
			info.setCreator("Creator");
			info.setSubject("Subject");
			info.setProducer("Producer");
			doc.setDocumentInformation(info);

			doc.save(resp.getOutputStream());
			doc.close();

		} catch (Exception e) {
			e.printStackTrace();
			resp.setContentType("text/plain");
			e.printStackTrace(resp.getWriter());
		}
	}

}
```


----------

