【问题标题】:error - java.lang.IllegalArgumentException: URI scheme is not "file"?错误 - java.lang.IllegalArgumentException:URI 方案不是“文件”?
【发布时间】:2011-11-09 21:31:13
【问题描述】:

我在尝试访问字体文件时收到以下错误:

011.08.31 12:12:42.704 ERROR [PDFOutputHandler] - Unable to resolve Unicode font
java.lang.IllegalArgumentException: URI scheme is not "file"
at java.io.File.<init>(File.java:366)
at com.xx.reports.output.handler.PDFOutputHandler.addUnicodeFont(PDFOutputHandler.java:393)
at com.xx.reports.output.handler.PDFOutputHandler.renderOutput(PDFOutputHandler.java:104)
at com.xx.reports.output.handler.PDFOutputHandler.renderOutput(PDFOutputHandler.java:134)
at com.xx.reports.output.appender.PdfAppender.renderOutput(PdfAppender.java:103)
at com.xx.reports.servlet.BasePdfOutputServlet.setResponsePdf(BasePdfOutputServlet.java:53)
at com.xx.reports.servlet.JSPToPDFServlet.execute(JSPToPDFServlet.java:115)
at com.xx.reports.servlet.JSPToPDFServlet.doGet(JSPToPDFServlet.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)

请在下面找到我的代码:

   try
    {
    if (unicodeFontPath == null)
    {
    URI fontClassURI = new URI(this.getClass().getResource("/fonts/ARIALUNI.TTF").toString());
    unicodeFontPath = new File(fontClassURI).getAbsolutePath();
    }
    renderer.getFontResolver().addFont(unicodeFontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
    } catch (Exception e)
    {
    logger.error("Unable to resolve Unicode font", e);
    }

请提出可能是什么问题。我没主意了。

谢谢 尼克

【问题讨论】:

  • 尝试在/fonts/ARIALUNO.TTF的开头添加file:///

标签: java uri illegalargumentexception file-uri


【解决方案1】:

您会遇到该异常,因为您使用的是new File(myURI) 构造函数,而myURI 的架构与file: 不同。

例如,这将工作(注意 file://...):

System.out.println(new File(new URI("file:///etc/passwd")));

虽然这将不起作用(注意 http://...):

System.out.println(new File(new URI("http://localhost/etc/passwd")));

如果要使用getResource() 方法,则必须对URL 进行操作。你不能假设它总是有“文件:”模式。

如果您需要从资源 *.ttf 文件创建字体,您可以这样做:

URL url = this.getClass().getResource("/fonts/ARIALUNI.TTF");
InputStream is = url.openStream();
Font font = Font.createFont(Font.TRUETYPE_FONT, is);

【讨论】:

    猜你喜欢
    • 2013-07-30
    • 2016-01-26
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    相关资源
    最近更新 更多