Generate PDF with picture on Google App Engine on JAVA
I'm trying to generate PDF files in a project hosted on GAE.
For now, I use iText and it work fine to create text only PDF.
I really need to add pictures on my pdf. And when I try with iText I catch some Execption talking about AWT and the google white list :
Uncaught exception from servlet
java.lang.NoClassDefFoundError: java.awt.color.ICC_Profile is a restricted class. Please see the Google App Engine developer's guide for more details.
at com.google.apphosting.runtime.security.shared.stub.java.awt.color.ICC_Profile.<clinit>(ICC_Profile.java)
at com.lowagie.text.pdf.codec.PngImage.readPng(Unknown Source)
at com.lowagie.text.pdf.codec.PngImage.getImage(Unknown Source)
at com.lowagie.text.pdf.codec.PngImage.getImage(Unknown Source)
at com.lowagie.text.pdf.codec.PngImage.getImage(Unknown Source)
at com.lowagie.text.Image.getInstance(Unknown Source)
at com.dooapp.jwsPlateforme.services.licence.PdfPrinterImpl.print(PdfPrinterImpl.java:19)
at $PdfPrinter_128f4d9a1bb.print($PdfPrinter_128f4d9a1bb.java)
at com.dooapp.jwsPlateforme.servlet.PdfServlet.doGet(PdfServlet.java:36)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:129)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:97)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.han开发者_Go百科dle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:238)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:135)
at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:250)
at com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:5838)
at com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:5836)
at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:24)
at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:398)
at com.google.net.rpc.impl.Server$2.run(Server.java:852)
at com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java:56)
at com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java:576)
at com.google.net.rpc.impl.Server.startRpc(Server.java:807)
at com.google.net.rpc.impl.Server.processRequest(Server.java:369)
at com.google.net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java:442)
at com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java:319)
at com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java:290)
at com.google.net.async.Connection.handleReadEvent(Connection.java:474)
at com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java:831)
at com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java:207)
at com.google.net.async.EventDispatcher.loop(EventDispatcher.java:103)
at com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java:251)
at com.google.apphosting.runtime.JavaRuntime$RpcRunnable.run(JavaRuntime.java:413)
at java.lang.Thread.run(Unknown Source)
Do you know if there is a library that allow to add picture on PDF on GAE?
Note : I try iText-gae but it get the same exception
Thank's
I would have suggested you to launch your JVM in headless mode, but, well on GAE, it's of no interest.
Anyway, since iText has these issues, there seems that at least one project - appropriately named iText-gae - tries to cope with those. It even seems that a patched version can be downloaded from the web. But beware, use it at your own risk !
You need to use the Image library included in iText, for example, in this snippet i'm inserting an image in a cell.
import com.lowagie.text.Image;
import com.lowagie.text.pdf.PdfPCell;
Image img = Image.getInstance("/YOUR IMAGE ROUTE/");
PdfPCell uno = new PdfPCell(img, true);
i know this question has ages but maybe will help someone in the future.
精彩评论