flying-saucer-pdf ubuntu上的例外表'name'不存在

问题描述 投票:4回答:1

我有一个简单的春季启动网络应用程序,在那里我创建可下载的PDF与flying-saucer-pdf从html我用百里香叶渲染。它工作正常并正确生成html字符串。我在Windows上开发并在开发期间生成pdf也运行良好,但在ubuntu服务器上不起作用。

    ITextRenderer renderer = new ITextRenderer();
    renderer.getFontResolver().addFont(fontFile, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

fontFile存在,在ubuntu上也可以通过程序访问它,并且可以访问它,但是当我想渲染pdf时,我得到了以下异常。我不知道它究竟意味着什么。

引起:com.lowagie.text.DocumentException:com.lowagie.text.pdf.TrueTypeFont.getBaseFont中的/opt/RFIT/TextileApp/conf/font/Rubik-Regular.ttf中不存在表'name'(未知来源) )〜[itext-2.1.7.jar:na] at com.lowagie.text.pdf.TrueTypeFont.process(Unknown Source)〜[itext-2.1.7.jar:na] at com.lowagie.text.pdf。 TrueTypeFontUnicode。(未知来源)〜[itext-2.1.7.jar:na] at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source)〜[itext-2.1.7.jar:na] at com.lowagie .text.pdf.BaseFont.createFont(未知来源)〜[itext-2.1.7.jar:na] at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source)〜[itext-2.1.7.jar: na] org.xhtmlrenderer.pdf.ITextFontResolver.addFont(ITextFontResolver.java:201)〜[flying-saucer-pdf-9.1.6.jar:na] org.xhtmlrenderer.pdf.ITextFontResolver.addFont(ITextFontResolver.java: 193)〜[flying-saucer-pdf-9.1.6.jar:na] org.xhtmlrenderer.pdf.ITextFontResolver.addFont(ITextFontResolver.java:188)~ [flying-saucer-pdf-9.1.6.jar:na ]在hu.rfit.textile.service.impl.Pdf PrinterService.printPDF(PdfPrinterService.java:53)〜[TextileApp-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT:4749]

在一些论坛上,他们说我应该将字体添加到/ usr / share / fonts dirt,并重新构建字体缓存。但它不起作用。

java ubuntu pdf
1个回答
6
投票

关于添加字体与飞碟有同样的问题。问题主要原因是裁剪字体文件。您的操作系统或maven过滤可能会导致此问题。在我的例子中,我使用maven和以下步骤解决了这个问题。

如果您使用的是maven,则应将字体文件添加到资源文件夹中。

例如,

SRC /主/资源/字体/ samplefont.ttf

之后,您应该在pom.xml上定义资源,如下所示;

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>fonts/*</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>false</filtering>
                <includes>
                    <include>fonts/*</include>
                </includes>
            </resource>
        </resources>

之后,您可以使用以下定义,

ITextRenderer renderer = new ITextRenderer();
renderer.getFontResolver().addFont("/fonts/samplefont.ttf",
                                    BaseFont.IDENTITY_H,
                                    BaseFont.EMBEDDED);

我希望它会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.