/*
* Created on May 13, 2003
*/
package com.idega.block.pdf.servlet;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.idega.builder.servlet.IBMainServlet;
import com.idega.idegaweb.IWConstants;
import com.idega.presentation.IWContext;
import com.idega.servlet.util.StringBufferWriter;
import com.lowagie.text.Document;
import com.lowagie.text.PageSize;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.xml.XmlParser;
/**
* A servlet that takes in a idegaWeb page id as a parameter and makes all elements output<br>
* in iText compatible xml and then uses it to generate pdf's. iText is brilliant piece of software<br>
* that can be used for many things but mainly for doing JAVA to PDF. http://www.lowagie.com/iText/
* @author <a href="mailto:eiki@idega.is>Eirikur Hrafnsson</a>
*/
public class IWPDFServlet extends IBMainServlet {
protected void initializeIWContext(HttpServletRequest request, HttpServletResponse response) throws Exception {
super.initializeIWContext( request, response);
IWContext iwc = getIWContext();
iwc.setMarkupLanguage(IWConstants.MARKUP_LANGUAGE_PDF_XML);
StringBufferWriter writer;
writer = new StringBufferWriter(iwc.getResponse().getOutputStream());
iwc.setWriter(writer);
storeObject(IW_CONTEXT_KEY,iwc);
}
protected void finished(IWContext iwc){
try {
// step 1: creation of a document-object
StringBufferWriter writer = (StringBufferWriter)iwc.getWriter();
//Document document = new Document();
Document document = new Document(PageSize.A4);//AND MARGINS , 80, 50, 30, 65);
// step 2:
// we create a writer that listens to the document
// and directs a XML-stream to the servlet output
OutputStream out = writer.getOutputStream();
//PdfWriter.getInstance(document, new FileOutputStream(iwc.getApplication().getApplicationRealPath()+"iText-test.pdf"));
PdfWriter.getInstance(document, out);
//HtmlWriter.getInstance(document, new FileOutputStream("Chap0702.html"));
// step 3: we create a parser and set the document handler
InputStream inputstream = writer.getInputStream();
com.idega.util.FileUtil.streamToFile(inputstream, iwc.getIWMainApplication().getApplicationRealPath(),"PDF-XML.xml");
// step 4: we parse the document
XmlParser.parse(document,"file://"+iwc.getIWMainApplication().getApplicationRealPath()+"PDF-XML.xml");
}
catch(Exception e) {
e.printStackTrace();
System.err.println(e.getMessage());
}
}
}