PDF内嵌字体分析

很多PDF文件都会把字体Font内嵌到PDF文件里面去,这样的好处是:万一用户系统没有该字体,显示的时候能够保持字体风格不变,在TrueType和Type0类型的字体里面很多这样的:如下格式:

我们通过软件提取出字体:

然后发现PDF内部有部分字体并不是按照标准的一些编码来制作的:

我们采用开源的字体编辑工具FontForge来打开查看:

Font Forge: http://fontforge.github.io/en-US/

这个Calibri.ttf字体的字形的编码排序并不是UTF-8等标准编码,比如:

0x02 显示的是 &   :   UTF-8【0x26 】

0x03 显示的是 A   :   UTF-8【0x32 】

0x10 显示的是 P    :   UTF-8【0x33 】

PDF文件设计的是可以将字形和字符对应分离;

对于自定义字体,如果编码和标准编码不一样,想要获取字形对应的字符,就需要相应的Cmap(比如/ToUnicode),Cmap就好比密码本一样来映射字形对应的标准的UTF-8等编码。如果没有,或者缺少,或者错误,那么得到的字符就是乱码。

PDF内嵌字体分析 - 提取的文字是乱码原因分析相关推荐

  1. php tcpdf 嵌入字体,TCPDF如何设置中文字体为内嵌字体?

    TCPDF生成pdf文件,用$pdf->SetFont('stsongstdlight', '', 14);设置字体为宋体,生成的PDF是非内嵌字体的,如果阅读者的电脑没有安装photoshop ...

  2. CAD转成PDF之后,字体就变粗了?什么原因呢?

    CAD转成PDF之后,字体就变粗了?什么原因呢? CAD转成PDF之后,字体bai就变粗du了,特别是黑体显得尤为突出,经过反复试验,最后得出结论:就权是把输出PDF所用的纸张尺寸设置成大尺寸,方可解 ...

  3. 万字长文总结JAVA几种常见的编码格式和乱码原因分析

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 developer.ibm.com/zh/articles/j-lo-chine ...

  4. 用 Acrobat 修复因缺少内嵌字体而乱码的 PDF 文件

    前言 最近在阅读一本电子书的时候发现 PDF 文件中只要是英文.数字.空格的位置都是乱码,影响阅读.这应该是 PDF 文档没有将所需要的所有字体内嵌到文档中,缺少字体导致的.比如某东的电子发票在不同的 ...

  5. 【FAQ】应用内支付服务无法拉起支付页面常见原因分析和解决方法

    华为应用内支付服务(In-App Purchases)通过简便的接入流程为用户提供良好的应用内支付体验,然而在实际接入过程中,有一些开发者反馈测试时会无法正常拉起支付页面,下文将详细分析问题出现的5种 ...

  6. 软件测试无效bug分析,(一)Bug不能重现的原因分析及其对策

    摘 要:本文简要分析了无法重现的Bug的可能产生原因,包括环境不一致.缺少最准确的描述和浏览器的不当设置.针对这些原因,本文给出了相应的对策.通过这些措施,可以重现许多以前认为不可重现的Bug. 关键 ...

  7. 在TTF字体中提取指定文字

    [说明] 游戏中经常需要用到各种字体,但是网上下载的TTF字体文件最小也有好几兆,要是游戏中需要用到几种字体,那简直不能忍. 通常情况下,我们会用BMFont代替TTF字体,BMFont也有着很多的优 ...

  8. wxpython 内嵌字体_【wxPython】wx.font类字体

    构造函数形式为:wx.Font(pointSize,family,style,weight,underline,faceName,encoding) pointSize pointSize是字体的以磅 ...

  9. qt中文乱码原因分析及解决方案

    首先说明几个基础概念 UTF-8 BOM 和 UTF-8.BOM在文件头位置占三个字节,用来标识UTF-8编码,软件通过BOM来识别这个文件是否是UTF-8编码. 源码字符集.源码文件使用某种编码格式 ...

  10. Win10日语中文系统语言切换及txt、Excel宏乱码原因分析

    最近需要共享一些文件,日语系统的.txt和中文带宏的Excel.日语系统无法打开Excel的宏,会提示已损坏:中文系统打开txt会乱码,无法读取. 经过一番测试,得出大致原因是:由于txt创建时使用的 ...

最新文章

  1. 【转】DHCP工作过程详解
  2. MongoDB-GRIDFS大文件系统
  3. WCF 绑定(Binding)
  4. adadelta算法_神经网络中常用的优化算法
  5. 【解决方案】UserWarning: Possibly corrupt EXIF data.导致读取图片失败
  6. 小游戏“终结者”程序的设计与实现
  7. python dlib学习(十一):眨眼检测
  8. java空文本_输出到文本文件,控制台为空-Java
  9. java8自定义收集器_使用自定义收集器进行Java 8分组?
  10. C语言实现的FFT与IFFT源代码,不依赖特定平台
  11. 加密软件漏洞评测系统_【E周道】Elasticsearch泄露12亿用户数据 开源VNC存在37个漏洞...
  12. MySql基本的语法(学习笔记)
  13. java8 中的时间和数据的变化
  14. cc2530设计性实验代码八
  15. 【66份】SaaS资料合集
  16. Android篮球计分器论文,基于单片机的篮球计时计分器设计_毕业设计论文
  17. 智能插帧,打造丝滑视频体验
  18. 苹果手机屏幕上的圆点如何设置呢?
  19. VS2019++QT5.12.10+PCL1.11.1+VTK8.2.0+opencv(camke3.18.0)环境搭配及演示实例
  20. spring和jump区别_jump和leap之间的区别

热门文章

  1. python网络爬虫网易云音乐guihub_Python开发的一个命令行的网易云音乐
  2. 使用 Python 的人脸识别系统
  3. Qt实现多语言切换 - Qt语言家
  4. Android开发:ZXing条码扫描-竖屏解决方案
  5. mysql和sqlyog安装_MySQL与sqlyog安装教程图文详解
  6. ssh远程连接阿里云服务器
  7. VMware安装esxi6.7
  8. cppcheck下载及使用
  9. 孙玄:解析58同城典型技术架构及演变
  10. Lua包管理工具Luarocks详解