ошибка - java.lang.IllegalArgumentException: схема URI не "файл"? - PullRequest
4 голосов
/ 04 сентября 2011

Я получаю следующую ошибку при попытке получить доступ к файлу шрифта:

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);
    }

PLease подскажите, в чем может быть проблема.У меня нет идей.

Спасибо, Ник

1 Ответ

15 голосов
/ 04 сентября 2011

Вы получаете это исключение, потому что вы используете конструктор new File(myURI), тогда как myURI имеет другую схему, чем 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. Вы не можете предполагать, что у него всегда будет схема «file:».

Если вам нужно создать шрифт из файла * .ttf ресурса, вы можете сделать:

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