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

问题 如何使用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

2017-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

2017-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

2017-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

2017-10-17 07:01

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

它也不适合我。 - gtiwari333

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值