package org.netevolved.reporting; import java.io.ByteArrayOutputStream; import java.io.OutputStreamWriter; import java.io.StringReader; import java.io.Writer; import org.openedit.OpenEditException; import org.openedit.WebPageRequest; import org.openedit.generators.BaseGenerator; import org.openedit.generators.Output; import org.openedit.page.Page; import org.openedit.page.PageRequestKeys; import org.openedit.page.manage.PageManager; import org.openedit.util.RequestUtils; import org.openedit.util.URLUtilities; import com.itextpdf.text.Document; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.tool.xml.XMLWorkerHelper; public class HtmlPdfGenerator extends BaseGenerator { protected PageManager fieldPageManager; protected RequestUtils fieldRequestUtils; public PageManager getPageManager() { return fieldPageManager; } public void setPageManager(PageManager inPageManager) { fieldPageManager = inPageManager; } public RequestUtils getRequestUtils() { return fieldRequestUtils; } public void setRequestUtils(RequestUtils inRequestUtils) { fieldRequestUtils = inRequestUtils; } @Override public boolean canGenerate(WebPageRequest inReq) { return inReq.getPage().getName().endsWith(".pdf"); } @Override public void generate(WebPageRequest inReq, Page inPage, Output inOut) throws OpenEditException { Document document = new Document(); try { URLUtilities urlUtil = (URLUtilities) inReq.getPageValue(PageRequestKeys.URL_UTILITIES); WebPageRequest req = getRequestUtils().createVirtualPageRequest("/test.html", inReq.getUser(),inReq.getUserProfile());//, urlUtil); req.putProtectedPageValue(PageRequestKeys.HOME, urlUtil.relativeHomePrefix()); ByteArrayOutputStream scapture = new ByteArrayOutputStream(); Writer capture = null; capture = new OutputStreamWriter(scapture, inPage.getCharacterEncoding()); Output out = new Output(capture, scapture); String fullpath = inPage.getPath(); String alternative = fullpath.replace(".pdf", ".html"); alternative = alternative.replace("/pdf/", "/"); Page map = getPageManager().getPage(alternative); map.generate(req, out); String output = scapture.toString(); PdfWriter writer = PdfWriter.getInstance(document, inOut.getStream()); document.open(); XMLWorkerHelper.getInstance().parseXHtml(writer, document, new StringReader(output)); } catch (Exception e) { throw new OpenEditException(e); } finally{ try{ document.close(); }catch(Exception e){ e.printStackTrace(); } } } }