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

Syn*_*ity 5 java pdf ubuntu

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

    ITextRenderer renderer = new ITextRenderer();
    renderer.getFontResolver().addFont(fontFile, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Run Code Online (Sandbox Code Playgroud)

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,并重新构建字体缓存.但它不起作用.

Mus*_*DIN 9

关于添加字体与飞碟有同样的问题.问题主要原因是裁剪字体文件.您的操作系统或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>
Run Code Online (Sandbox Code Playgroud)

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

ITextRenderer renderer = new ITextRenderer();
renderer.getFontResolver().addFont("/fonts/samplefont.ttf",
                                    BaseFont.IDENTITY_H,
                                    BaseFont.EMBEDDED);
Run Code Online (Sandbox Code Playgroud)

我希望它会有所帮助.