2016-08-18 3 views
2

iText 용 외부 글꼴을 사용하기 때문에 myaven 리소스 폴더 (src/main/resources)에서 글꼴 파일을로드해야하지만 iText API에 필요합니다. 파일 자체 대신 파일 경로를 제공합니다. 이 경로의하여 파일을로드하는 나는 해결책을 찾을 수 없습니다Maven 리소스 폴더에서 올바른 파일 경로 가져 오기 - iText

2016-08-18 09:17:12,667 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/pdfgen2].[controlServlet]] (http-/0.0.0.0:8443-1) JBWEB000236: Servlet.service() for servlet controlServlet threw exception: java.io.IOException: /content/pdfgen2.war/WEB-INF/classes/arialuni.ttf not found as file or resource. 
    at com.itextpdf.text.io.RandomAccessSourceFactory.createByReadingToMemory(RandomAccessSourceFactory.java:248) [itextpdf-5.5.3.jar:5.5.3] 
    at com.itextpdf.text.io.RandomAccessSourceFactory.createBestSource(RandomAccessSourceFactory.java:173) [itextpdf-5.5.3.jar:5.5.3] 
    at com.itextpdf.text.pdf.RandomAccessFileOrArray.<init>(RandomAccessFileOrArray.java:148) [itextpdf-5.5.3.jar:5.5.3] 
    at com.itextpdf.text.pdf.TrueTypeFont.process(TrueTypeFont.java:641) [itextpdf-5.5.3.jar:5.5.3] 
    at com.itextpdf.text.pdf.TrueTypeFontUnicode.process(TrueTypeFontUnicode.java:121) [itextpdf-5.5.3.jar:5.5.3] 
    at com.itextpdf.text.pdf.TrueTypeFontUnicode.<init>(TrueTypeFontUnicode.java:98) [itextpdf-5.5.3.jar:5.5.3] 
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:704) [itextpdf-5.5.3.jar:5.5.3] 
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:622) [itextpdf-5.5.3.jar:5.5.3] 
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:457) [itextpdf-5.5.3.jar:5.5.3] 
+0

'pdfgen2.war'은 너의 어플리케이션? 그곳에'arialuni.ttf '파일이 있습니까? – Jens

+0

예 그것은 내 응용 프로그램이며 폴더 구조는 설명 된대로 war 파일 자체를 여는 구조입니다. WEB-INF/classes/arialuni.ttf –

+0

파일 이름 앞에 "/"를 추가하려고합니다. – Jens

답변

0

:이 얻을

String arialUnicodeFontPath = getClass().getClassLoader().getResource("arialuni.ttf").getPath(); 

BaseFont unicodeBaseFont = 
     BaseFont.createFont(arialUnicodeFontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 

:이 코드를 사용하는 동안

그래서, 문제가 발생 방법은 내가 원했지만 itext 글꼴을 내가 따라 코드와 함께 얻을 수있는 해결 방법을 사용 :

byte[] fontByte = IOUtils 
    .toByteArray(this.getClass().getClassLoader().getResourceAsStream("/fonts/arialuni.ttf")); 
BaseFont unicodeBaseFont = BaseFont.createFont("arialuni.ttf", BaseFont.IDENTITY_H, 
    BaseFont.EMBEDDED, true, fontByte, null); 
관련 문제