我有一个简单的春季启动网络应用程序,在那里我创建可下载的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,并重新构建字体缓存。但它不起作用。
关于添加字体与飞碟有同样的问题。问题主要原因是裁剪字体文件。您的操作系统或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);
我希望它会有所帮助。