Re: urgent help needed using FOP
Thanks for your help. Chris. Have a nice weekend, Jerry --- Chris Bowditch <[EMAIL PROTECTED]> wrote: > Jerry wrote: > > > John, > > > > Thank you for your message. > > > > Yes, I realize the data in the byte array "bt" in > tiff > > does not belong to the standard formatting object. > > That is why I got the error "content is not > allowed in > > prolog". My understanding is I need to either > convert > > it into the formatting object using XSL or convert > it > > into XML. However, I am new to FOP and XML/XSL and > do > > not know how to do that. If possible, we need to > > convert the data format in memory,that means, > > everything is done in memory, not save it as a > file > > first and process using FOP. Would you please > give me > > your thought on it or you have a piece of codes > for me > > to share? I will greatly appreciate it. > > Firstly, your question really should have been > posted to the user-list. The > dev list is really for discussing internal work on > FOP. > > I believe your goal should be to create a servlet > that serves Tiff images up. > You can reference the Tiff images from an XSL-FO > document using a HTTP URL, > via the fo:external-graphic tag. FOP can then be > called on the XSL-FO document > to generate a PDF, and you can do this within > another servlet if you need to. > > May I also suggest that you get yourself a good book > on XSL-FO and learn the > basics before attempting to implement a solution > based on XSL-FO. > > > > Chris > > __ Do you Yahoo!? Yahoo! Small Business $15K Web Design Giveaway http://promotions.yahoo.com/design_giveaway/
Re: urgent help needed using FOP
John, Thank you for your message. Yes, I realize the data in the byte array "bt" in tiff does not belong to the standard formatting object. That is why I got the error "content is not allowed in prolog". My understanding is I need to either convert it into the formatting object using XSL or convert it into XML. However, I am new to FOP and XML/XSL and do not know how to do that. If possible, we need to convert the data format in memory,that means, everything is done in memory, not save it as a file first and process using FOP. Would you please give me your thought on it or you have a piece of codes for me to share? I will greatly appreciate it. Thanks in advance, Jerry --- John Austin <[EMAIL PROTECTED]> wrote: > On Thu, 2004-04-01 at 14:30, Jerry wrote: > > Hi, > > > > I am currently working on a > > project which convert binary data in tiff format > into > > PDF format. I refer to the > example(FopServlet.java) > > and always got error "Error 500: Content is > > not allowed in prolog. ". I could not figure out > what > > the problem is. I was stuch by this. Please help > me. > > > > Here is the peice of codes. Would you please take > a > > look and give me a suggestion. I will greatly > > appreciate it. > > > > BTW, the binary data format from database which > will > > be displayed on the web is in tiff format, not a > > formatting object. If it can be displayed directly > on > > the web in pdf format, it is not necessary to > convert > > it into pdf first. > > It is not clear from your example whether your data > is usable by > FOP. > > FOP is designed to process XML files, specifically > XSL-FO or > Formatting objects. > > You state on your message and in comments that the > binary data is > in a TIFF format. You move this data around, > eventualy passing it > to the FOP Driver object. I don't think this is at > all reasonable > as a TIFF object is definitely not going to be > accepted by the SAX > parser used in FOP. > > You need to read the FOP examples again. > > > thanks, > > > > Jerry > > > > > *** > > import javax.servlet.*; > > import javax.servlet.http.*; > > import java.io.*; > > import java.util.*; > > import java.util.zip.*; > > import java.sql.*; > > import java.text.*; > > > > > > import java.net.*; > > import java.util.Properties; > > import java.awt.image.*; > > import com.sun.media.jai.codec.*; > > import com.sun.media.jai.*; > > import javax.media.jai.JAI; > > import javax.media.jai.*; > > import javax.media.jai.RenderedOp; > > import javax.media.jai.PlanarImage; > > import javax.media.jai.OpImage; > > import javax.media.jai.util.*; > > import > > javax.media.jai.remote.SerializableRenderedImage; > > import java.awt.image.renderable.ParameterBlock; > > import java.lang.Object; > > import java.awt.Image; > > import javax.swing.ImageIcon; > > import java.io.ByteArrayOutputStream.*; > > > > > > import com.csi.utils.StringUtils; > > import com.csi.daserver.global.*; > > import com.csi.dcserver.objects.DCSession; > > import com.csi.dcserver.exceptions.*; > > import com.csi.daserver.utils.MsgPool; > > import com.csi.dcserver.crypto.Crypto; > > > > > > import org.xml.sax.InputSource; > > > > import org.apache.fop.apps.Driver; > > import org.apache.fop.apps.XSLTInputHandler; > > import org.apache.fop.messaging.MessageHandler; > > > > import > > org.apache.avalon.framework.logger.ConsoleLogger; > > import org.apache.avalon.framework.logger.Logger; > > > > > > public class ImageDownload extends HttpServlet { > > > > Logger log = null; > > > > public void doGet(HttpServletRequest req, > > HttpServletResponse resp) throws ServletException, > > IOException { > > > > ... > > > > //got the binary data in tiff format from > database > > and put the binary data in byte array bt > > Byte[] bt = (byte[]) v.elementAt(0); > > > > sendPDFBinaryResponse(resp, req, bt, > > "application/pdf"); > > return; > > } > > } > > > > // > > private void > > sendPDFBinaryResponse(HttpServletResponse > > res,HttpServletRequest req, byte[] > >
urgent help needed using FOP
Hi, I am currently working on a project which convert binary data in tiff format into PDF format. I refer to the example(FopServlet.java) and always got error "Error 500: Content is not allowed in prolog. ". I could not figure out what the problem is. I was stuch by this. Please help me. Here is the peice of codes. Would you please take a look and give me a suggestion. I will greatly appreciate it. BTW, the binary data format from database which will be displayed on the web is in tiff format, not a formatting object. If it can be displayed directly on the web in pdf format, it is not necessary to convert it into pdf first. thanks, Jerry *** import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; import java.util.zip.*; import java.sql.*; import java.text.*; import java.net.*; import java.util.Properties; import java.awt.image.*; import com.sun.media.jai.codec.*; import com.sun.media.jai.*; import javax.media.jai.JAI; import javax.media.jai.*; import javax.media.jai.RenderedOp; import javax.media.jai.PlanarImage; import javax.media.jai.OpImage; import javax.media.jai.util.*; import javax.media.jai.remote.SerializableRenderedImage; import java.awt.image.renderable.ParameterBlock; import java.lang.Object; import java.awt.Image; import javax.swing.ImageIcon; import java.io.ByteArrayOutputStream.*; import com.csi.utils.StringUtils; import com.csi.daserver.global.*; import com.csi.dcserver.objects.DCSession; import com.csi.dcserver.exceptions.*; import com.csi.daserver.utils.MsgPool; import com.csi.dcserver.crypto.Crypto; import org.xml.sax.InputSource; import org.apache.fop.apps.Driver; import org.apache.fop.apps.XSLTInputHandler; import org.apache.fop.messaging.MessageHandler; import org.apache.avalon.framework.logger.ConsoleLogger; import org.apache.avalon.framework.logger.Logger; public class ImageDownload extends HttpServlet { Logger log = null; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ... //got the binary data in tiff format from database and put the binary data in byte array bt Byte[] bt = (byte[]) v.elementAt(0); sendPDFBinaryResponse(resp, req, bt, "application/pdf"); return; } } // private void sendPDFBinaryResponse(HttpServletResponse res,HttpServletRequest req, byte[] bt,StringsContTypeHeader) throws IOException, ServletException{ if(sContTypeHeader=="application/pdf"){ if (log == null) { log = new ConsoleLogger(ConsoleLogger.LEVEL_WARN); MessageHandler.setScreenLogger(log); } renderFO(new InputSource(new ByteArrayInputStream(bt)), res); } } public void renderFO(InputSource foFile, HttpServletResponse response) throws ServletException { try { ByteArrayOutputStream out = new ByteArrayOutputStream(); response.setContentType("application/pdf"); Driver driver = new Driver(foFile, out); driver.setLogger(log); driver.setRenderer(Driver.RENDER_PDF); driver.run(); byte[] content = out.toByteArray(); response.setContentLength(content.length); response.getOutputStream().write(content); response.getOutputStream().flush(); } catch (Exception ex) { throw new ServletException(ex); } } ... } This is the exact error I got: org.xml.sax.SAXParseException: Content is not allowed in prolog. at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1172) at org.apache.fop.apps.Driver.render(Driver.java:498) at org.apache.fop.apps.Driver.run(Driver.java:565) __ Do you Yahoo!? Yahoo! Small Business $15K Web Design Giveaway http://promotions.yahoo.com/design_giveaway/