我有一个简单的春季启动网络应用程序,我用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,并重新构建字体缓存.但它不起作用.
关于添加字体与飞碟有同样的问题.问题主要原因是裁剪字体文件.您的操作系统或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)
我希望它会有所帮助.
| 归档时间: |
|
| 查看次数: |
1466 次 |
| 最近记录: |