我将波兰字体嵌入到从HTML转换的PDF中时遇到问题。
我的HTML代码在正文中有样式:
<BODY style="font-family: Tahoma, Arial, sans-serif;font-size : 8pt;">
我尝试了两种将这种HTML转换为PDF的方法:
- 与htmlcleaner的FOP
- iText与飞碟
对于FOP,我可以将所有使用的字体添加到其配置文件中,然后创建PDF,嵌入这些字体(如果字体用于HTML)。在生成的PDF中,我在Identity-H编码中使用了Tahoma字体。它看起来不错 - 所有波兰语字母都按预期显示。
然后我尝试用iText进行这样的转换:看起来比较简单,因为我不需要为每个HTML创建转换。不幸的是,我不知道如何将使用过的字体嵌入到生成的PDF中。我发现的大多数示例都是从头开始创建PDF,我不知道如何将这些方法应用于Flying Saucer ITextRenderer或转换中使用的其他对象。
我当前的代码尝试添加字体 PDFCreationListener.preOpen()
得到 ITextFontResolver
并添加字体 fs.addFont(path, true);
。但我创建的所有.pdf都没有我想要的字体。
第二个问题是结果PDF没有波兰语字母。飞碟或iText有问题吗? Acrobat显示创建的PDF文档使用带Ansi编码的Helvetica和ArialMT作为字体。我认为这个Ansi编码并不好。如何设置波兰语编码(Identity-H)?
您可以尝试使用-fs-pdf-font-embed和-fs-pdf-font-encoding css规则。
来自 用户手册:
-fs-PDF的字体嵌入: 使用嵌入在font-face规则中的值
让Flying Saucer在PDF文档中嵌入一个字体文件,
避免需要调用FontResolver的addFont()方法
类
-fs-PDF的字体编码: 在font-face规则中使用来指定
enconding您嵌入PDF中的自定义字体;拿走了
编码的名称作为值。
例如在你的print css中:
@font-face {
font-family: DejaVu Serif;
src: url(fonts/DejaVuSerif.ttf);
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: Identity-H;
}
您可以尝试使用-fs-pdf-font-embed和-fs-pdf-font-encoding css规则。
来自 用户手册:
-fs-PDF的字体嵌入: 使用嵌入在font-face规则中的值
让Flying Saucer在PDF文档中嵌入一个字体文件,
避免需要调用FontResolver的addFont()方法
类
-fs-PDF的字体编码: 在font-face规则中使用来指定
enconding您嵌入PDF中的自定义字体;拿走了
编码的名称作为值。
例如在你的print css中:
@font-face {
font-family: DejaVu Serif;
src: url(fonts/DejaVuSerif.ttf);
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: Identity-H;
}
我的错误是使用 FontResolver.addFont()
在 PDFCreationListener.preOpen()
。我刚才搬过它 renderer.layout();
它现在有效!