由于我为 iText 使用外部字体,我需要从我的 Maven 资源文件夹 (src/main/resources) 加载字体文件,但 iText API 要求我提供文件路径而不是文件本身。
所以,我在尝试使用此代码时遇到了问题:
String arialUnicodeFontPath = getClass().getClassLoader().getResource("arialuni.ttf").getPath();
BaseFont unicodeBaseFont =
BaseFont.createFont(arialUnicodeFontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
我明白了:
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]
最佳答案
我找不到按照我想要的方式按路径加载文件的解决方案,但我使用了一种解决方法,通过以下代码按照我需要的方式获取 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);
关于java - 从 Maven 资源文件夹获取正确的文件路径 - iText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39012961/