1. 独立存在的Font文件

有三类:

Type 1 Font

TrueType Font

OpenType Font

Type 1

是由Adobe开发的,它是基于PostScript的Font,它通常由两个分开的文件来描述:

1. Adobe Font Metrics[Adobe]/Printer Font Metrics[Microsoft]

用来描述每个Glyph占用的空间大小

2. PostScript Font Binary

用来完成每个Glyph的绘制工作

有14个特殊的Type 1字体被选择出来作为PDF默认支持的字体,它们被称为Standard Type1 Fonts,每个PDF viewer都应该默认提供这14个字体,因此使用这些字体的PDF文件无需将字体文件内嵌到PDF文件中,减少了PDF文件的尺寸。

TrueType

就由Apple开发,用来对抗Type 1字体的,不过这种字体类型刚刚发布,Type 1的标准也公开了。

TrueType是Windows操作系统的标准字体文件。

关于Type 1与TrueType字体优劣的比较,参考:http://www.pdf-tech.com/?p=981

Type1使用三次贝塞尔曲线来描述字形,TrueType则使用二次贝塞尔曲线来描述字形。所以Type1的字体比TrueType字体更加 精确美观。一个误解是:Type1字体比TrueType字体占用空间多。这是因为同样描述一个圆形,二次贝塞尔曲线只需要8个关键点和7段二次曲线;而 三次贝塞尔曲线则需要12个关键点和11段三次曲线。然而实际情况是一般来说 Type1比TrueType要小10%左右。这是因为对于稍微复杂的字形,为了保持平滑,TrueType必须使用更多的关键点。由于现代大部分打印机 都是使用PDL作为打印描述语言,所以True1字体打印的时候不会产生形变,速度快;而TrueType则需要翻译成PDL,由于曲线方程的变化,还会 产生一定的形变,不如Type1美观。
这么说来,Type1应该比TrueType更具有优势,为什么如今的计算机上TrueType反而比Type1使用更广泛呢?
这是因为第一:Type1由于字体方程的复杂,所以在屏幕上渲染的时候,花费的时间多,解决方案是大部分Type1字体嵌入了点阵字体,这样渲染快, 但是边缘不光滑,比较难看。很多PS文档和PS转换的PDF文档都是这样,在计算机上浏览的时候字体很难看,但是打印出来很美观。TrueType则渲染 比较快,可以平滑的显示在屏幕上,看上去很美观。
第二个原因是Type1的高额使用费,使得Type1没有被所有的操作系统所支持。Windows家族只有OS/2和windows 2000及之后的版本从操作系统级别开始支持Type1。由于这个问题,Adobe只好在其所有的产品中嵌入Adobe Type Manager(ATM)作为渲染引擎。

总结一下,就是Type 1字体更加精细准确,非常适合支持PDL的打印机设备; TrueType则更加适合在屏幕上渲染,快而且漂亮。

OpenType Font

OpenType则是Type1与TrueType之争的最终产物。1995年,Adobe公司和Microsoft公司开始联手开发一种兼容 Type1和TrueType,并且真正支持Unicode的字体,后来在发布的时候,正式命名为OpenType。OpenType可以嵌入Type1 和TrueType,这样就兼有了二者的特点,无论是在屏幕上察看还是打印,质量都非常优秀。

OpenType是一种更加兼容的方式,兼容上面两种字体;除此之外,支持Unicode也是其最大的亮点。

包含Type 1的OpenType文件为.otf后缀;包含TrueType的OpenType文件为.ttf后缀。

OpenType还可以包含TrueType字体的集合,即.ttc文件。

2. PDF支持的Font类型

PDF除了支持Type 1和TrueType类型字体外,还支持一种由PDF自己的Graphics Operator描述的字体类型,命名为Type 3。

此外,为了支持超大字符集的语言,比如中文字符集,PDF还支持一种Type 0字体,称为Composite Font。

Simple Font只支持0-255这个范围的character encoding,而Composite Font的CMap可以支持0-65535这个范围的character encoding。

Composite Font包含两部分组件: CIDFont和CMap。

CIDFont: Character Identifier Font

    描述Glyph绘制参数的字体文件

CMap:Character Map, aka Character Encoding, aka Code Page

    Character与Glyph之间的映射关系

CMap是一种很有效的方式,它相当于提供了一种临时的,小型的code page,以建立真正在PDF文件中用到的字符与字体文件之间的关系,比如WinAnsi,以及Identity_H都是一种character encoding,但是使用Indentity_H,就可以有效地减小内嵌字体的尺寸。

Font and PDF的更多相关文章

  1. 利用private font改变PDF文件的字体

    利用private font改变PDF文件的字体 前几天做项目,需要使用未安装的字体来改变PDF的文件.以前并没有实现过类似的功能,幸运的是我在网上找到了类似的教程,并成功实现了这个功能. 下面就跟大 ...

  2. 基于iTextSharp的PDF文档操作

    公司是跨境电商,需要和各种物流打交道,需要把东西交给物流,让他们发到世界各地.其中需要物流公司提供一个运单号,来追踪货物到达哪里?! 最近在和DHL物流公司(应该是个大公司)对接,取运单号的方式是调用 ...

  3. C# 如何在PDF中绘制不同风格类型的文本

    通过对控件Spire.PDF的测试,我们可以创建PDF文件并向文档中绘制文本.图片.表格.图形等内容,其中,对于绘制文本这一部分,Spire.PDF提供了三种字体类型来绘制文本,即: Standard ...

  4. Rails中生成并在ActionMailer附件中发送csv、excel、pdf、zip文件

    1.修改Gemfile # PDF generator gem 'prawn' gem 'prawn-table' # Excel generator gem 'rubyXL' #Zip genera ...

  5. java(itext) 一个很简单的PDF表格生成工具

    先上个效果图 因为做的项目涉及到数据预测,其中有大量打印业务来支撑实体店的运营,因为注重的是数据,要求简洁,清晰,所以写了个很简单也很实用的工具类. 如果需要编写样式或者插入背景,都可以查阅itex官 ...

  6. VB Aspose.Pdf 字体变小方格问题处理

    宋体是这样写的:SimSun原先以为是:宋体 先定义字体,在PDF中无法设置,这个找了很久,原来是使用:FontRepository.FindFont方式,这个坑了很久,很多都说是setFont,压根 ...

  7. libharu 源码编译 VS2010

    最近项目中接过了一个libharu PDF 开源库的锅,哈哈.于是就自己编译了一套libharu 的MFC下的静态库和动态库. 编译libharu需要用到zlib库和libpng库,libpng库又依 ...

  8. Probability theory

    1.Probability mass functions (pmf) and Probability density functions (pdf) pmf 和 pdf 类似,但不同之处在于所适用的分 ...

  9. LibHaru编译使用

    最近公司准备在PDF方面发力了,我也要行动起来,就找到了LibHaru这个开源库 编译Libharu需要用到zlib库和libpng库,libpng库又依赖zlib库. zlib 下载地址:http: ...

随机推荐

  1. 洛谷 P1731 [NOI1999]生日蛋糕(搜索剪枝)

    题目链接 https://www.luogu.org/problemnew/show/P1731 解题思路 既然看不出什么特殊的算法,显然是搜索... dfs(u,v,s,r0,h0)分别表示: u为 ...

  2. Codeforces 1119C(思维)

    题面 传送门 分析 这种题的重点是寻找不变量 我们发现如果改变4个角,则每一行和每一列的xor和不会改变(1^0=0^1) 所以只要算出异或和然后比较就可以 代码 #include<iostre ...

  3. L The Digits String(没有写完,有空补)

    链接:https://ac.nowcoder.com/acm/contest/338/L来源:牛客网 Consider digits strings with length n, how many d ...

  4. P2619 [国家集训队2]Tree I(最小生成树+二分)

    P2619 [国家集训队2]Tree I 每次二分一个$x$,每条白边加上$x$,跑最小生成树 统计一下满足条件的最小值就好了. to me:注意二分不要写挂 #include<iostream ...

  5. [烧脑时刻]EL表达式1分钟完事

    一天,程序员A问我,我们比比谁的知识点多,反应快.我回答:那就看谁最快用EL表达式的显示在页面上吧. 话不多说,计时开始. 项目的结构如上,大概就是一个Family的JavaBean,一个jsp页面, ...

  6. 20個命令行工具監控 Linux 系統性能

    對於每個系統管理員或網路管理員來說,每天要監控和調試 Linux 系統性能問題都是非常困難的工作.我已經有5年 Linux 管理員的工作經歷,知道如何監控系統使其保持正常運行.為此,我們編寫了對於 L ...

  7. 218- VPX主板 基于5VFX70T的3U VPX 光纤数据采集存储板

    基于5VFX70T的3U VPX 光纤数据采集存储板 1.板卡概述 本板卡是基于3U VPX架构,符合VITA46标准,实现了多种图形图像接口的采集与转换.图像数据的处理.宽带数据缓存.SATA存储主 ...

  8. hadoop1.2.1配置与运行子串统计程序

    一.虚拟机版本 VirtualBox-4.3.30 二.操作系统 CentOS-6.7-x86_64-bin-DVD1.iso 下载地址1:http://www.centoscn.com/Centos ...

  9. 条款7:为多态基类析构函数声明为virtual

    基类指针指向子类对象. 子类对象必须位于堆.因此为了避免泄漏内存资源,当指针不使用时,delete掉每一个对象非常重要.但是如果基类的析构函数不声明为virtual.那么指向子类对象的指针delete ...

  10. 2017ICPC沈阳赛现场赛 L-Tree (dfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6228 题目大意:给一棵树,需要用k种颜色给树上的节点染色,问你在最优的染色方案下,相同颜色的节点连接的 ...