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());
}
}
}