1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > dejavu中如何添加html文件 如何使用iText和Flying Saucer在HTML中创建PDF格式的字体

dejavu中如何添加html文件 如何使用iText和Flying Saucer在HTML中创建PDF格式的字体

时间:2022-12-23 02:23:50

相关推荐

dejavu中如何添加html文件 如何使用iText和Flying Saucer在HTML中创建PDF格式的字体

问题 如何使用iText和Flying Saucer在HTML中创建PDF格式的字体?

我将波兰字体嵌入到从HTML转换的PDF中时遇到问题。

我的HTML代码在正文中有样式:

我尝试了两种将这种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)?

1141

-09-23 07:03

起源

答案:

您可以尝试使用-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;

}

9

-10-05 14:07

谢谢,我试过这个,这不起作用。当然我也试过了 FontResolver.addFont(),但在结果PDF中没有我想要的字体。 - Michał Niklas

奇怪,这对我来说很好。只要确保使用正确 src句法; FS似乎只了解了 url()部分,不是 format()或其他任何东西。必须只有一个src只有ttf文件。上面的例子有效。 - rustyx

我还可以确认,这个DejaVu Serif字体可以正常工作 - Kristof Dombi

答案:

您可以尝试使用-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;

}

9

-10-05 14:07

谢谢,我试过这个,这不起作用。当然我也试过了 FontResolver.addFont(),但在结果PDF中没有我想要的字体。 - Michał Niklas

奇怪,这对我来说很好。只要确保使用正确 src句法; FS似乎只了解了 url()部分,不是 format()或其他任何东西。必须只有一个src只有ttf文件。上面的例子有效。 - rustyx

我还可以确认,这个DejaVu Serif字体可以正常工作 - Kristof Dombi

我的错误是使用 FontResolver.addFont()在 PDFCreationListener.preOpen()。我刚才搬过它 renderer.layout();它现在有效!

1

-10-17 07:01

嘿,我有同样的问题,我尝试了这段代码 renderer.getFontResolver().addFont("c:/simsun.ttf", "UTF-8",BaseFont.EMBEDDED);//I also tried with arialuni.ttf 但它不起作用 - Ankur

它也不适合我。 - gtiwari333

dejavu中如何添加html文件 如何使用iText和Flying Saucer在HTML中创建PDF格式的字体? | 所有编程讨论 | ...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。