​**​CID字体​**​ 和 ​**​Simple字体​**​

在PDF中,字体类型主要分为 ​​CID字体​​ 和 ​​Simple字体​​ 两大类,它们的主要区别在于编码方式和适用场景。以下是它们的详细对比:


​1. CID字体(CID-keyed Fonts)​

CID(Character Identifier)字体使用 ​​数字索引(CID)​​ 直接映射字形,适用于 ​​多语言、复杂字符集​​(如中文、日文、韩文等)。
主要分为两种:

​(1) CIDType0Font​
  • ​特点​​:
    • 基于 ​​CFF(Compact Font Format)​​ 的PostScript轮廓字体(通常为 .otf
    • 支持 ​​CID-keyed​​ 编码,适合高压缩率的矢量字体
    • 常用于 ​​Adobe Asian Fonts​​(如中文字体)
  • ​示例​​:思源黑体、Adobe 宋体
​(2) CIDType2Font​
  • ​特点​​:
    • 基于 ​​TrueType​​ 轮廓(通常为 .ttf
    • 同样使用CID映射,但字形数据是TrueType格式
    • 支持 ​​Unicode​​ 映射(通过ToUnicode表)
  • ​示例​​:大部分支持多语言的TrueType字体(如Arial Unicode MS)

​2. Simple字体(Simple Fonts)​

Simple字体使用 ​​字符名称(Glyph Name)或8位编码​​ 直接引用字形,适用于 ​​拉丁语系等小字符集​​。
主要分为三种:

​(1) SimpleType1Font​
  • ​特点​​:
    • 基于 ​​Type1​​ 格式(PostScript .pfb.afm
    • 使用 ​​标准编码​​(如WinAnsi、MacRoman)或自定义编码
    • 仅支持 ​​256个字符​​(8位编码)
  • ​示例​​:Times New Roman、Helvetica
​(2) SimpleTrueTypeFont​
  • ​特点​​:
    • 基于 ​​TrueType​​ 轮廓(.ttf
    • 同样限制在 ​​256个字符​​,但使用TrueType字形数据
    • 可通过ToUnicode表支持部分Unicode字符
  • ​示例​​:Symbol、Wingdings(符号字体)
​(3) StandardFonts(PDF内置14种标准字体)​
  • ​特点​​:
    • PDF规范定义的 ​​14种标准字体​​,无需嵌入
    • 使用 ​​WinAnsi/MacRoman​​ 编码
    • 仅支持基本拉丁字符
  • ​列表​​:
    Courier, Courier-Bold, Courier-Oblique, Courier-BoldOblique
    Helvetica, Helvetica-Bold, Helvetica-Oblique, Helvetica-BoldOblique
    Times-Roman, Times-Bold, Times-Italic, Times-BoldItalic
    Symbol, ZapfDingbats

​核心区别总结​

​特性​​CID字体​​Simple字体​
​编码方式​CID数字索引8位编码(0-255)
​字符集支持​多语言(如CJK)拉丁语系(有限字符)
​字形数据格式​CFF(Type0)或TTF(Type2)Type1或TTF
​是否支持Unicode​是(通过ToUnicode表)有限支持(仅SimpleTrueType)
​典型用途​中文/日文/韩文PDF英文PDF、符号字体

​如何选择?​

  1. ​用CID字体(Type0/Type2)​​:

    • 需要嵌入中文、日文、韩文等宽字符集
    • 字体包含超过256个字形
  2. ​用Simple字体(Type1/TrueType)​​:

    • 仅需支持英文、数字、符号(如Webdings)
    • 兼容旧版PDF阅读器(某些设备对CID支持较差)
  3. ​用StandardFonts​​:

    • 文档仅使用基本拉丁字符,且希望减小文件体积(无需嵌入字体)。

​你的代码中的应用​

在之前的EmbedFontSmart函数中:

  • ​Symbol/Webdings等符号字体​​ → 适合SimpleTrueTypeFont(因为它们是8位编码的符号集)
  • ​普通TrueType字体(如Arial)​​ → 优先用CIDType2Font以支持Unicode

如果有其他特定需求(如兼容性优化),可以进一步调整判断逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/908716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计组_导学

2025.05.31:老汤讲408计组学习笔记 导学 第1章计算机系统概述:对计算机系统有全局的认识第2章总线系统:简单且独立,不会依赖其他内容,它是被依赖的第3章主存储器:只有了解主存储器的内部结构,才能理解在主存中是如何存储二进制的第4章数据的表示与运算:各种编码以及计算…

【GPT模型训练】第二课:张量与秩:从数学本质到深度学习的基础概念解析

这里写自定义目录标题 张量(Tensor)的定义关键特点:示例: 张量的秩(Rank)示例:“秩”的拼音常见混淆点 总结 张量(Tensor)的定义 在数学和物理学中,张量是一…

RabbitMQ work模型

Work 模型是 RabbitMQ 最基础的消息处理模式,核心思想是 ​​多个消费者竞争消费同一个队列中的消息​​,适用于任务分发和负载均衡场景。同一个消息只会被一个消费者处理。 当一个消息队列绑定了多个消费者,每个消息消费的个数都是平摊的&a…

【Linux操作系统】基础开发工具(yum、vim、gcc/g++)

文章目录 Linux软件包管理器 - yumLinux下的三种安装方式什么是软件包认识Yum与RPMyum常用指令更新软件安装与卸载查找与搜索清理缓存与重建元数据 yum源更新1. 备份现有的 yum 源配置2. 下载新的 repo 文件3. 清理并重建缓存 Linux编辑器 - vim启动vimVim 的三种主要模式常用操…

73常用控件_QFormLayout的使用

目录 代码⽰例: 使⽤ QFormLayout 创建表单. 除了上述的布局管理器之外, Qt 还提供了 QFormLayout , 属于是 QGridLayout 的特殊情况, 专 ⻔⽤于实现两列表单的布局. 这种表单布局多⽤于让⽤⼾填写信息的场景. 左侧列为提⽰, 右侧列为输⼊框 代码⽰例: 使⽤ QFormLayout 创…

兰亭妙微 | 医疗软件的界面设计能有多专业?

从医疗影像系统到手术机器人控制界面,从便携式病原体检测设备到多平台协同操作系统,兰亭妙微为众多医疗设备研发企业,打造了兼具专业性与可用性的交互界面方案。 我们不仅做设计,更深入理解医疗场景的实际需求: 对精…

鸿蒙开发修改版本几个步骤

鸿蒙开发修改版本几个步骤 比如:5.0.4(16)版本改为5.0.2(14)版本 一、项目下的build-profile.json5 "products": [{"name": "default","signingConfig": "default&qu…

Flask 基础与实战概述

一、Flask 基础知识 什么是 Flask? Flask 是一个基于 Python 的轻量级 Web 框架(微框架)。 特点:核心代码简洁,给予开发者更多选择空间。 与 Django 对比: Django 创建空项目生成多个文件,Flask 仅需一个文件即可实现简单应用(如 "Hello, World!")。 Flask …

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…

Java严格模式withResolverStyle解析日期错误及解决方案

在Java中使用DateTimeFormatter并启用严格模式(ResolverStyle.STRICT)时,解析日期字符串"2025-06-01"报错的根本原因是:模式字符串中的年份格式yyyy被解释为YearOfEra(纪元年份),而非…

Java中的泛型底层是怎样的

Java 泛型深入底层原理解析:类型擦除与桥方法的真相 一、Java中的伪泛型 Java 从 JDK 1.5 引入泛型之后,大大提升了代码的类型安全性与可读性。但泛型的底层实现并不像 C 的模板机制那样是“真正的泛型”,Java 的泛型是伪泛型,在…

Spring Boot 从Socket 到Netty网络编程(上):SOCKET 基本开发(BIO)与改进(NIO)

前言 无论是软件还是硬件的本质都是要解决IO问题(输入、输出),再说回网络编程本质上都是基于TCP/UP的开发,socket是在此基础上做的扩展与封装,而Netty又是对socket做的封装。本文旨在通过相关案例对socket进行探讨。 一…

【大模型LLM学习】function call/agent学习记录

【大模型LLM学习】function call/agent学习记录 0 前言1 langchain实现function call2 调用本地模型3 微调本地模型3.1 few-shot调用Claude生成Q-A对3.2 tools格式3.3 agent微调格式3.4 swift微调 p.s. 0 前言 记录一下使用langchain做简单的function call/agent(或者说意图识别…

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…

Puppeteer测试框架 - Node.js

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】

compose 组件 ---无ui组件

在 Jetpack Compose 中,确实存在不直接参与 UI 渲染的组件,它们主要用于逻辑处理、状态管理或副作用控制。这些组件虽然没有视觉界面,但在架构中扮演重要角色。以下是常见的非 UI 组件及其用途: 1. 无 UI 的 Compose 组件分类 (…

图像超分辨率

图像超分辨率 用AI当“像素侦探”,从模糊中重建合理高清细节,让看不见的细节“无中生有”。 举个生活例子 假设你有一张模糊的老照片,通过超分辨率技术,它能变成清晰的高清照片: 低分辨率图像超分辨率结果 传统放…

多线程语音识别工具

软件介绍 本文介绍一款支持大厂接口的语音转文字工具,具备免配置、免费使用的特点。 软件特性 该工具是一款完全免费的桌面端应用程序,部署于开源社区平台,其核心优势在于整合了多家技术供应商的接口资源。 操作方式 用户只需将音频…

金融预测模型开发:数据预处理、机器学习预测与交易策略优化

金融预测模型开发:数据预处理、机器学习预测与交易策略优化 概述 本文将详细介绍一个完整的金融预测模型开发流程,包含数据预处理、机器学习预测和交易策略优化三个核心模块。我们使用Python实现一个端到端的解决方案,适用于股票价格预测和量化交易策略开发。 # 导入必要…