1

我正在尝试在 GAE 上托管的项目中生成 PDF 文件。

现在,我使用 iText,它可以很好地创建纯文本 PDF。

我真的需要在我的pdf上添加图片。当我尝试使用 iText 时,我发现一些关于 AWT 和谷歌白名单的 Execption :

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.handle(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)

你知道是否有一个库允许在 GAE 上的 PDF 上添加图片?

注意:我尝试了 iText-gae 但它得到了同样的异常

谢谢

4

2 回答 2

0

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 !

于 2010-06-04T13:56:21.510 回答
0

您需要使用 iText 中包含的图像库,例如,在此代码段中,我将在单元格中插入图像。

   import com.lowagie.text.Image;
   import com.lowagie.text.pdf.PdfPCell;

   Image img = Image.getInstance("/YOUR IMAGE ROUTE/");
   PdfPCell uno = new PdfPCell(img, true); 

我知道这个问题已经很久了,但将来可能会对某人有所帮助。

于 2016-12-21T15:50:21.273 回答