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

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

  1. latex中表格怎么加标题_导出到LaTeX时,使组织表格标题显示在表格下方 | 所有编程讨论 | zhouni.net...

    我正在制作一份文件 org-mode 其中有相当多的表,使用内置的表功能构建.我已经为表格添加了标题,但是当我将它们导出到 LaTeX,而不是出现在表格下方的标题,它出现在它上面.在手册中 关于表格的 ...

  2. vs的资源管理器中一次性添加整个文件夹

    如何在vs的资源管理器中一次性添加整个文件夹   如何一次添加整个文件夹到vs资源管理器中? 1.将你想要添加的文件夹复制到你想要添加的项目当中 2.打开你所在的项目,点击项目,在菜单中,项目-> ...

  3. 在Xcode8中 如何添加.pch文件

    在Xcode8中 如何添加.pch文件 转载于:https://www.cnblogs.com/domore77/p/5958814.html

  4. ug后处理如何加密_UG在NX加工中如何添加后处理文件?

    在使用UG加工中,往往使用的机床不一样就要特定后处理文件,那么如何在UG中添加之前制定好的后处理文件呢? 下面以UG8.5为例来说明. 1.首先确认UG后处理文件是否完整. 完整的后处理文件包括后缀为 ...

  5. Qt工程中如何添加.pri文件

    pri文件中的i 是包含(include)的首字母.类似于C.C++中的头文件就是我们可以把 .pro 文件内需要include的一部分或者多个工程相同的部分单独放到一个 .pri 文件内,然后包含到 ...

  6. ug后处理如何加密_UG编程中如何添加后处理文件呢?小小干货拿走不谢

    UG中如何添加后处理可能对于有的小伙伴来说都不知道怎么处理,那么今天我们就来学习一下吧 觉得简单的小伙伴可以分享一下其他的小技巧哦,这样子方便大家一起学习哈 第一:我们打开UG安装目录下--[UG10 ...

  7. qt中怎样添加库文件

    qmake -project qmake name.pro 在Qt中工程通过.pro文件管理,所以库文件要在.pro文件中添加. 1.添加库文件 静态库 linux:LIBS += your_lib_ ...

  8. win11 / win10 彻底删除系统“快速访问”中自动添加的文件夹 - 不再自动添加

    效果图 修改前,系统自动在"快速访问"中添加常用的文件夹: 修改后,干干净净,不再自动显示: 实现步骤 (1 / 4)对着"快速访问"右键,"显示更多 ...

  9. QT项目添加现有文件后不能运行,MFC在类视图中自动隐藏类

    解决方案:1)QT 5.6版本的QtCreator打开pro文件,在最后加一行空行或者删除一行空行,保存即可: 2)在隐藏的类对应的头文件中增加一行或删除一行(空格也可以),即可自动出现. 转载于:h ...

  10. iPhone 在xcode4.2中手工添加GPX文件,指定位置

    XCode 4.2终于支持地点模拟了,不用忍受真机调试的各种不便了,模拟方法也很简单(恕我盗用几个别人的图): 当Debug一个需要地理位置信息的App时,在Debug栏默认就会有地点模拟的图标,如下 ...

最新文章

  1. 小程序商城制作,轻松打造自己的会员系统
  2. 浅谈Aho-Corasick automaton(AC自动机)
  3. Python 写各大聊天系统的屏蔽脏话功能原理
  4. Git仓库迁移,包括所有的分支、标签、日志
  5. pythonpyqt5线程暂停重启时间_PyQT5 停止死循环线程(监控文件是否修改)
  6. Mark—零散知识汇总
  7. C# WinForm打开PDF文件
  8. 提高淘宝店铺动态评分的四大技巧
  9. 中华名将索引 - 第一批:白起
  10. Java-如何防止XSS攻击
  11. 新视智科“5G+工业互联网”产品线南山研发中心揭牌成立,助力制造业转型创新发展
  12. 发展智慧城市,需要重点解决哪三大问题?
  13. 看得更近,监督得更好:通过基于组件的鉴别器一次性生成字体
  14. GTD软件比较和选用
  15. 1001. Poker (思维 / 模拟)(2020年百度之星*程序设计大赛-初赛二)
  16. 第三节 数据通信基础
  17. 边缘检测:更丰富的卷积特征 Richer Convolutional Features for Edge Detection
  18. 出现Cannot refer to the non-final local variable guoDeGang defined in an enclosing scope
  19. 风丘科技为您提供电动汽车热管理方案
  20. ruby 实现 bing 的 geocode

热门文章

  1. xp系统安装金蝶k3服务器配置,xp安装金蝶k3安全设置.doc
  2. 如何把字幕文件转换成txt文件或word文档,.ass文件内容怎么提取出来txt文件
  3. flink集成springboot案例_集成-Apache Flink+Spring Boot
  4. jeff dean_Jeff Dean的构建大型分布式系统的软件工程建议
  5. 世界时间经纬_世界主要城市经纬度及时区列表
  6. debugger使用
  7. 2021年中国云游戏产业发展环境(PEST)分析:中国云游戏服务拥有光明前景[图]
  8. 用户认证授权系统方案思考
  9. AtCoder Beginner Contest 245 A~E 题解
  10. 海洋角度分析全球气候变暖停滞原因