我在将HTML转换为PDF时,嵌入波兰字体遇到了问题。
我的HTML代码中在body中有样式:
<BODY style="font-family: Tahoma, Arial, sans-serif;font-size : 8pt;">
我尝试了两种方法将这样的HTML转换为PDF:
- 使用htmlcleaner和FOP
- 使用flying-saucer和iText
对于FOP,我可以将所有使用过的字体添加到其配置文件中,然后创建的PDF将嵌入这些字体(如果HTML中使用了该字体)。在生成的PDF中,我有Tahoma字体和Identity-H编码。它看起来很好 - 所有波兰字母都按预期显示。
然后我尝试使用iText进行此类转换:似乎更简单,因为我不需要为每个HTML创建转换。不幸的是,我不知道如何将所用字体嵌入到生成的PDF中。我找到的大多数示例都是从头开始创建PDF,而我不知道如何将这些方法应用于Flying Saucer ITextRenderer或其他用于转换的对象。
我的当前代码尝试在 PDFCreationListener.preOpen()
中添加字体,通过获取ITextFontResolver
并添加字体 fs.addFont(path,true);
。但我创建的所有.pdf都没有我想要的字体。
第二个问题是结果PDF没有波兰字母。这是Flying Saucer还是iText的问题?Acrobat显示创建的PDF文档使用Helvetica和Ansi编码的ArialMT字体。我认为这种Ansi编码不好。我该如何设置波兰编码(Identity-H)?
FontResolver.addFont()
,但是在生成的PDF中没有我想要的字体。 - Michał Niklassrc
语法;FS似乎只理解url()
部分,而不是format()
或其他任何内容。必须只有一个带有ttf文件的src。上面的示例有效。 - rustyx@font-face { font-family: Roboto; src: url(file:///home/fonts/Roboto-Regular.ttf); font-weight: normal; font-style: normal; -fs-pdf-font-embed: embed; -fs-pdf-font-encoding: Identity-H; }
添加了更详细的 Google Roboto 字体,例如<body style="font-family: Roboto;">
使用它。 - micfra