java - 从 Maven 资源文件夹获取正确的文件路径 - iText

标签 java maven servlets resources itext

由于我为 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/

相关文章:

java - 从非 servlet 类(来自外部 jar)引用 WEB-INF 中的文件

java - Guava 缓存包含值

java - 如何在 JENA 中添加限定基数

java - 持久性单元被覆盖

java - 找不到org.springframework.cloud :spring-cloud-dependencies:pom 失败

java.lang.NoClassDefFoundError : org/apache/log4j/Priority 错误

java - 监听器触发的错误 404

java - 不要在 CloudFormation 中删除堆栈时为 Rds DbInstance 创建快照

java - JPanel 分离边框选择

java - 在 Servlet 中启动新线程