java.lang.IllegalArgumentException 在 com.itextpdf.text.pdf。PdfGraphics2D.drawImage

java.lang.IllegalArgumentException at com.itextpdf.text.pdf.PdfGraphics2D.drawImage

我正在尝试加载一个包含图像的 pdf 文件(更具体地说,我的 java 代码通过打印一些文本和图像来生成 pdf 文件。图像是由代码的其他部分生成的 qr 代码图像)在我的 Web 应用程序中。当我 运行 我在 Eclipse 中的程序作为 "Run on Server" 时,没有错误,我可以使用 chrome 在我的本地主机上看到 pdf。但是,当我从我的项目中创建一个 WAR 文件以在本地部署我的项目并尝试浏览 chrome 中的 pdf 页面时,我收到 "java.lang.IllegalArgumentException at com.itextpdf.text.pdf.PdfGraphics2D.drawImage" 错误。 我在 java 代码中注释掉了在 pdf 文件上打印图像的部分,并重新生成了 WAR 文件。现在我可以看到 pdf 文件,但当然看不到图像。我应该说我浏览应用程序的其他页面没有问题。 谁能帮我解决这个问题。非常感谢任何信息。

更新 1:
这是完整的堆栈跟踪

SEVERE: Exception or error caught in server resource
org.restlet.resource.ResourceException: Internal Server Error (500) - The server
 encountered an unexpected condition which prevented it from fulfilling the requ
est
        at org.restlet.resource.ServerResource.doHandle(ServerResource.java:539)

        at org.restlet.resource.ServerResource.get(ServerResource.java:742)
        at org.restlet.resource.ServerResource.doHandle(ServerResource.java:617)

        at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource
.java:678)
        at org.restlet.resource.ServerResource.doConditionalHandle(ServerResourc
e.java:356)
        at org.restlet.resource.ServerResource.handle(ServerResource.java:1043)
        at org.restlet.resource.Finder.handle(Finder.java:236)
        at org.restlet.routing.Filter.doHandle(Filter.java:150)
        at org.restlet.routing.Filter.handle(Filter.java:197)
        at org.restlet.routing.Router.doHandle(Router.java:422)
        at org.restlet.routing.Router.handle(Router.java:639)
        at org.restlet.routing.Filter.doHandle(Filter.java:150)
        at org.restlet.routing.Filter.handle(Filter.java:197)
        at org.restlet.routing.Filter.doHandle(Filter.java:150)
        at org.restlet.routing.Filter.handle(Filter.java:197)
        at org.restlet.routing.Filter.doHandle(Filter.java:150)
        at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.jav
a:140)
        at org.restlet.routing.Filter.handle(Filter.java:197)
        at org.restlet.routing.Filter.doHandle(Filter.java:150)
        at org.restlet.routing.Filter.handle(Filter.java:197)
        at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)
        at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHe
lper.java:77)
        at org.restlet.Application.handle(Application.java:385)
        at org.restlet.routing.Filter.doHandle(Filter.java:150)
        at org.restlet.routing.Filter.handle(Filter.java:197)
        at org.restlet.routing.Router.doHandle(Router.java:422)
        at org.restlet.routing.Router.handle(Router.java:639)
        at org.restlet.routing.Filter.doHandle(Filter.java:150)
        at org.restlet.routing.Filter.handle(Filter.java:197)
        at org.restlet.routing.Router.doHandle(Router.java:422)
        at org.restlet.routing.Router.handle(Router.java:639)
        at org.restlet.routing.Filter.doHandle(Filter.java:150)
        at org.restlet.routing.Filter.handle(Filter.java:197)
        at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)
        at org.restlet.Component.handle(Component.java:408)
        at org.restlet.Server.handle(Server.java:507)
        at org.restlet.engine.connector.ServerHelper.handle(ServerHelper.java:63
)
        at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.j
ava:143)
        at org.restlet.ext.servlet.ServerServlet.service(ServerServlet.java:1117
)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:208)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52
)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica
torBase.java:505)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:169)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:103)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
956)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:436)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp
11Processor.java:1078)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(
AbstractProtocol.java:625)
        at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpo
int.java:2517)
        at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoin
t.java:2506)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.
java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskTh
read.java:61)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException
        at com.itextpdf.text.pdf.PdfGraphics2D.drawImage(PdfGraphics2D.java:1606
)
        at com.itextpdf.text.pdf.PdfGraphics2D.drawImage(PdfGraphics2D.java:1340
)
        at com.itextpdf.text.pdf.PdfGraphics2D.drawImage(PdfGraphics2D.java:1327
)
        at com.itextpdf.text.pdf.PdfGraphics2D.drawImage(PdfGraphics2D.java:1310
)
        at com.itextpdf.text.Image.getInstance(Image.java:838)
        at org.safetycode.msc3.resources.PocketCardServerResource.addCodeImage(P
ocketCardServerResource.java:159)
        at org.safetycode.msc3.resources.PocketCardServerResource.printCodeImage
(PocketCardServerResource.java:155)
        at org.safetycode.msc3.resources.PocketCardServerResource.getPdf(PocketC
ardServerResource.java:146)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.restlet.resource.ServerResource.doHandle(ServerResource.java:523)

        ... 60 more

我找到了问题的解决方案:

  1. 我试过其他版本的 itextpdf
  2. 因此,错误信息被转换为"javax.imageio.IIOException: Can't create cache file!"
  3. 在 Tomcat 日志文件中,有一条消息说:"Caused by: java.nio.file.NoSuchFileException: C:\Program Files\Tomcat\apache-tomcat-7.0.69-windows-x64\apache-tomcat-7.0.69\temp\imageio2971026406080838335.tmp"
  4. 我在上面提到的路径中创建了一个名为 "temp" 的文件夹并重新加载了页面。

我想当我使用 Eclipse 运行 我的程序时,这样的临时文件是在某个地方生成的,没有任何问题。但是对于 WAR 文件 tomcat 没有创建 "temp" 文件的权限。