Java 使用iTextPdf FontFactory从/WEB-INF/resources/fonts/foobar.ttf加载字体

Java 使用iTextPdf FontFactory从/WEB-INF/resources/fonts/foobar.ttf加载字体,java,jakarta-ee,fonts,itext,itextpdf,Java,Jakarta Ee,Fonts,Itext,Itextpdf,这个问题几乎说明了一切。我得到以下例外: ExceptionConverter: java.io.IOException: /fonts/CALIBRI.TTF not found as file or resource. Caused By: java.io.IOException: /fonts/CALIBRI.TTF not found as file or resource. at com.itextpdf.text.io.RandomAccessSourceFactory.cr

这个问题几乎说明了一切。我得到以下例外:

ExceptionConverter: java.io.IOException: /fonts/CALIBRI.TTF not found as file or resource.
Caused By: java.io.IOException: /fonts/CALIBRI.TTF not found as file or resource.
    at com.itextpdf.text.io.RandomAccessSourceFactory.createByReadingToMemory(RandomAccessSourceFactory.java:263)
    at com.itextpdf.text.io.RandomAccessSourceFactory.createBestSource(RandomAccessSourceFactory.java:173)
    at com.itextpdf.text.pdf.RandomAccessFileOrArray.<init>(RandomAccessFileOrArray.java:148)
    at com.itextpdf.text.pdf.TrueTypeFont.process(TrueTypeFont.java:641)
    at com.itextpdf.text.pdf.TrueTypeFont.<init>(TrueTypeFont.java:375)
    at com.itextpdf.text.pdf.BaseFont.getAllFontNames(BaseFont.java:1229)
    at com.itextpdf.text.FontFactoryImp.register(FontFactoryImp.java:446)
    at com.itextpdf.text.FontFactory.register(FontFactory.java:341)
    at bean.createPdf.makePdf(createPdf.java:358)
    at bean.auswahl.buttonProbenbegleitschein(auswahl.java:188)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:254)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148)
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
    at org.apache.myfaces.trinidad.component.UIXComponentBase.broadcast(UIXComponentBase.java:1113)
    at org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:179)
    at org.apache.myfaces.trinidad.component.UIXComponent.broadcastInContext(UIXComponent.java:364)
    at oracle.adf.view.rich.event.ProxyEvent.broadcastWrappedEvent(ProxyEvent.java:72)
    at oracle.adf.view.rich.component.fragment.UIXRegion.broadcast(UIXRegion.java:124)
    at org.apache.myfaces.trinidad.component.UIXComponent.broadcastInContext(UIXComponent.java:364)
    at org.apache.myfaces.trinidad.component.WrapperEvent.broadcastWrappedEvent(WrapperEvent.java:82)
    at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$1.run(ContextSwitchingComponent.java:168)
    at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase(ContextSwitchingComponent.java:510)
    at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:171)
    at org.apache.myfaces.trinidad.component.UIXComponent.broadcastInContext(UIXComponent.java:364)
    at org.apache.myfaces.trinidad.component.WrapperEvent.broadcastWrappedEvent(WrapperEvent.java:82)
    at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:111)
    at org.apache.myfaces.trinidad.component.UIXComponent.broadcastInContext(UIXComponent.java:364)
    at org.apache.myfaces.trinidad.component.WrapperEvent.broadcastWrappedEvent(WrapperEvent.java:82)
    at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$1.run(ContextSwitchingComponent.java:168)
    at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase(ContextSwitchingComponent.java:510)
    at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:171)
    at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:115)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._invokeApplication(LifecycleImpl.java:1074)
    at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:402)
    at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:225)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346)
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:192)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:105)
    at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:502)
    at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)
    at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:502)
    at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:327)
    at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:229)
    at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at de.lkvsh.rdv.portal.authlib.servlet.PortalFilter.doFilter(PortalFilter.java:116)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:137)
    at java.security.AccessController.doPrivileged(Native Method)
    at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
    at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:460)
    at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:120)
    at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:217)
    at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:81)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:220)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3436)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3402)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
    at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
    at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2285)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2201)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1572)
    at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)
ExceptionConverter:java.io.IOException:/font/CALIBRI.TTF未作为文件或资源找到。
原因:java.io.IOException:/font/CALIBRI.TTF未作为文件或资源找到。
位于com.itextpdf.text.io.RandomAccessSourceFactory.CreateBreadingToMemory(RandomAccessSourceFactory.java:263)
位于com.itextpdf.text.io.RandomAccessSourceFactory.createBestSource(RandomAccessSourceFactory.java:173)
请访问com.itextpdf.text.pdf.RandomAccessFileOrArray。(RandomAccessFileOrArray.java:148)
在com.itextpdf.text.pdf.TrueTypeFont.process上(TrueTypeFont.java:641)
请访问com.itextpdf.text.pdf.TrueTypeFont。(TrueTypeFont.java:375)
请访问com.itextpdf.text.pdf.BaseFont.getAllFontNames(BaseFont.java:1229)
在com.itextpdf.text.FontFactoryImp.register上(FontFactoryImp.java:446)
在com.itextpdf.text.FontFactory.register上(FontFactory.java:341)
在bean.createPdf.makePdf(createPdf.java:358)
在bean.auswahl.buttonProbenbegleitschein(auswahl.java:188)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:497)
位于com.sun.el.parser.AstValue.invoke(AstValue.java:254)
位于com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)
在com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)上
位于javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148)
位于javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
位于org.apache.myfaces.trinidad.component.UIXComponentBase.broadcast(UIXComponentBase.java:1113)
位于org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:179)
位于org.apache.myfaces.trinidad.component.UIXComponent.broadcastinext(UIXComponent.java:364)
在oracle.adf.view.rich.event.ProxyEvent.broadcastWrappedEvent(ProxyEvent.java:72)中
位于oracle.adf.view.rich.component.fragment.UIXRegion.broadcast(UIXRegion.java:124)
位于org.apache.myfaces.trinidad.component.UIXComponent.broadcastinext(UIXComponent.java:364)
位于org.apache.myfaces.trinidad.component.WrapperEvent.broadcastWrappedEvent(WrapperEvent.java:82)
位于oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$1.run(ContextSwitchingComponent.java:168)
位于oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.\u processPhase(ContextSwitchingComponent.java:510)
位于oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:171)
位于org.apache.myfaces.trinidad.component.UIXComponent.broadcastinext(UIXComponent.java:364)
位于org.apache.myfaces.trinidad.component.WrapperEvent.broadcastWrappedEvent(WrapperEvent.java:82)
位于oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:111)
位于org.apache.myfaces.trinidad.component.UIXComponent.broadcastinext(UIXComponent.java:364)
位于org.apache.myfaces.trinidad.component.WrapperEvent.broadcastWrappedEvent(WrapperEvent.java:82)
位于oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$1.run(ContextSwitchingComponent.java:168)
位于oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.\u processPhase(ContextSwitchingComponent.java:510)
位于oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:171)
位于oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:115)
位于javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
位于javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
在oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.\u invokeApplication(LifecycleImpl.java:1074)中
在oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.\u executePhase(LifecycleImpl.java:402)
在oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:225)中
位于javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
位于weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
位于weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
位于weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
位于weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346)
位于weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
位于weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
位于oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:192)
位于weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
位于oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:105)
位于org.apache.myfaces.trinidadinternal.webapp.trinidafilterimpl$FilterListChain.doFilter(trinidafilterimpl.java:502)
在oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)中
位于org.apache.myfaces.trinidadinternal.webapp.trinidafilterimpl$FilterListChain.doFilter(trinidafilterimpl.java:502)
位于org.apache.myfaces.trinidadinternal.webapp.trinidafilterimpl.\u doFilterImpl(trinidafilterimpl.java:327)
位于org.apache.myfaces.trinidadinternal.webapp.trinidafilterimpl.doFilter(trinidafilterimpl.java:229)
位于org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
位于weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
位于de.lkvsh.rdv.portal.authlib.servlet.PortalFilter.doFilter(PortalFilter.java:116)
在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterC
String path = getServletContext().getRealPath("/WEB-INF/resources/fonts/foobar.ttf");
FontFactory.register(path);
String path = "http://localhost:8080/context/resources/fonts/foobar.ttf";
FontFactory.register(path);
String url = request.getRequestURL().toString();
String baseURL = url.substring(0, url.length() - request.getRequestURI().length()) + request.getContextPath();
String path = baseURL + "/resources/fonts/foobar.ttf";
FontFactory.register(path);
String path = "/fonts/foobar.ttf";
FontFactory.register(path);
String tempDir = (String) getServletContext().getAttribute(ServletContext.TEMPDIR);
File tempFile = File.createTempFile("foobar-", ".ttf", new File(tempDir));
InputStream input = getServletContext().getResourceAsStream("/WEB-INF/resources/fonts/foobar.ttf");
Files.copy(input, tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
String path = tempFile.getAbsolutePath();
FontFactory.register(path);