itextpdf字体选择

itextpdf 版本7.2.5

itextpdf-html2pdf 版本4.0.5

这里讲的是通过html转pdf,在html2pdf中是通过html中font-family样式来确定字体的,那已知font-family的情况,怎么确定pdf中实际用的字体,大致分为两步:

1、通过font-family (有存在多个字体的情况),和html2pdf引入的字体包一一进行比较,会对font-family 中的每个字体计算出一个分数,按分数从大到小排序,最终取一个分数最大的字体

当前引入的字体包如下:

 

核心html为: 

<span style="font-family: KaiTi_GB2312;"><span style="color: rgb(0, 0, 0);"><span  style="background-color: rgb(255, 255, 255);">
&nbsp; &nbsp;美国是全球大豆的第二大主产区,产量占到全球大豆总产量的30%左右。新作方面,美国农业部公布的种植面积报告中,24/25年度美豆种植面积预估为8610万英亩,市场此前预估为8675.3万英亩,3月时预估为8651万英亩;收割面积预估为8526.1万英亩。当前USDA预估的24/25年度美豆单产为52蒲/英亩,处于同期高值,因此6月份USDA供需报告给出的新作美豆产量预期为1.2111亿吨,同比增加777万吨;需求方面,报告将24/25年度美豆出口量提高到4967万吨,同比提高7.4%,跟随供应端的增加而上调;国内压榨量增加到6600万吨的历史最高值,较上一年度增加了368万吨。供需同增的情况下,24/25年度美豆期末库存落至1238万吨,上一年度为953万吨,同比增加285万吨(+29.9%);库消比落在10.43%,与往年相比,该期末库存处于偏高水平,若数据兑现整体美豆供需格局较为宽松。另一方面,数据显示,24/25年度美豆种植成本为1182美分/蒲式耳,由于成本限制,若后续未能出现天气市升水,CBOT大豆期价下方的空间仍有限,短期看盘面能否在1050美分/蒲左右见底。</span>
</span>

如上述font-family: KaiTi_GB2312; 则会添加一个内置字体,一起去比较

则需要比较的字体fontFamily为:

比较后的字体包排序为:

 

&nbsp; &nbsp;美国是全球大豆的第二大主产区,产量占到全球大豆总产量的30%左右。新作方面,美国农业部公布的种植面积报告中,24/25年度美豆种植面积预估为8610万英亩,市场此前预估为8675.3万英亩,3月时预估为8651万英亩;收割面积预估为8526.1万英亩。当前USDA预估的24/25年度美豆单产为52蒲/英亩,处于同期高值,因此6月份USDA供需报告给出的新作美豆产量预期为1.2111亿吨,同比增加777万吨;需求方面,报告将24/25年度美豆出口量提高到4967万吨,同比提高7.4%,跟随供应端的增加而上调;国内压榨量增加到6600万吨的历史最高值,较上一年度增加了368万吨。供需同增的情况下,24/25年度美豆期末库存落至1238万吨,上一年度为953万吨,同比增加285万吨(+29.9%);库消比落在10.43%,与往年相比,该期末库存处于偏高水平,若数据兑现整体美豆供需格局较为宽松。另一方面,数据显示,24/25年度美豆种植成本为1182美分/蒲式耳,由于成本限制,若后续未能出现天气市升水,CBOT大豆期价下方的空间仍有限,短期看盘面能否在1050美分/蒲左右见底。--------------------展示的字体为KaiTi_GB2312 

其是跟引入的字体包比较逻辑为:

                if (!"".equals(fontFamily)&& (null == fontInfo.getAlias()&& null != fontDescriptor.getFamilyNameLowerCase()&& fontDescriptor.getFamilyNameLowerCase().equals(fontFamily) || fontDescriptor.getFamilyNameLowerCase().startsWith(fontFamily.trim())|| (null != fontInfo.getAlias() && fontInfo.getAlias().toLowerCase().equals(fontFamily))) ) {score += FONT_FAMILY_EQUALS_AWARD;} else {if (!isLastFontFamilyToBeProcessed) {return score;}}

一般只需要以下成立,则选择就选择到了对应的字体

fontDescriptor.getFamilyNameLowerCase().equals(fontFamily)

 如fontFamily 为kaiti_gb2312就跟字体包中的familyNameLowerCase相等,则对文本就采用改字体显示

假如fontFamily中的字体和引用的字体均匹配不上,如下:

<div data-v-576fc182="" class="page-preview-wrapper"style="padding: 10px; --43e54376: url(https://iirp.htfutures.com:1013/htf-iirp/top.png) no-repeat; width: 794px; height: unset; background-size: auto; background-color: rgba(0, 0, 0, 0); background-image: none; background-repeat: repeat; display: block; position: relative; top: 0px; left: 0px; transform: none; margin: 0px; border: 0px none rgba(0, 0, 0, 0.85); border-radius: 0px; letter-spacing: normal; text-align: start; opacity: 1; z-index: auto; font-size: 10.4417px; font-family: &quot;PingFang SC&quot;, &quot;Mircrosoft YaHe&quot;, Arial, Helvetica; font-variant: tabular-nums; line-height: 10.4417px; min-height: 0px; color: rgba(0, 0, 0, 0.85); vertical-align: baseline; overflow: visible; flex: 0 1 auto; justify-content: normal; align-items: normal; scroll-behavior: auto; font-feature-settings: &quot;tnum&quot;; box-shadow: none; box-sizing: border-box; border-collapse: separate; border-spacing: 0px;"><span style=\"font-size: 16px;\">&nbsp; &nbsp;没有对应的字体包显示</spn>
</div>

fontFamily为

则比较后的字体包为:

&nbsp; &nbsp;没有对应的字体包显示 --------------------展示的字体为SimSun(宋体)

2、当通过font-family确定了一个文本的字体之后,但是文本中有些字符不兼容这个字体,则需要对文本中的字符判断是否兼容这个字体,如果兼容则取这个字体,如果不兼容,会从引入的字体包选择其他字体

&nbsp; &nbsp;美国是全球大豆的第二大主产区,产量占到全球大豆总产量的30%左右。新作方面,美国农业部公布的种植面积报告中,24/25年度美豆种植面积预估为8610万英亩,市场此前预估为8675.3万英亩,3月时预估为8651万英亩;收割面积预估为8526.1万英亩。当前USDA预估的24/25年度美豆单产为52蒲/英亩,处于同期高值,因此6月份USDA供需报告给出的新作美豆产量预期为1.2111亿吨,同比增加777万吨;需求方面,报告将24/25年度美豆出口量提高到4967万吨,同比提高7.4%,跟随供应端的增加而上调;国内压榨量增加到6600万吨的历史最高值,较上一年度增加了368万吨。供需同增的情况下,24/25年度美豆期末库存落至1238万吨,上一年度为953万吨,同比增加285万吨(+29.9%);库消比落在10.43%,与往年相比,该期末库存处于偏高水平,若数据兑现整体美豆供需格局较为宽松。另一方面,数据显示,24/25年度美豆种植成本为1182美分/蒲式耳,由于成本限制,若后续未能出现天气市升水,CBOT大豆期价下方的空间仍有限,短期看盘面能否在1050美分/蒲左右见底。-------------展示的字体为KaiTi_GB2312 

如上生成的pdf为:

 其中部分文字展示为宋体,这是为什么呢?

其中对一段文字选择字体还有一个策略逻辑,如下:

            for (FontInfo f : selector.getFonts()) {int codePoint = isSurrogatePair(text, nextUnignorable)? TextUtil.convertToUtf32(text, nextUnignorable): (int) text.charAt(nextUnignorable);if (f.getFontUnicodeRange().contains(codePoint)) {PdfFont currentFont = getPdfFont(f);Glyph glyph = currentFont.getGlyph(codePoint);if (null != glyph && 0 != glyph.getCode()) {font = currentFont;break;}}}

其会对这段文字中的每个字符去判断是否兼容字体包(经过第一步排序后的字体包一一匹配)

 

 可见&nbsp;的unicode字符集编码为160,不在KaiTi_GB2312之内

KaiTi_GB2312包含的字符只有7541个,则 &nbsp; 不会用 KaiTi_GB2312字体展示,接下来看SimSun(宋体)是否匹配

 

 

 在宋体中找到了对应的code,则 &nbsp;是用SimSun(宋体)展示

那么以下文字是兼容KaiTi_GB2312字体,为什还是用宋体呢?美国是全球大豆的第二大主产区,产量占到全球大豆总产量的30%左右。新作方面,美国农业部公布的种植面积报告中,24/25年度美豆种植面积预估为8610万英亩,市场此前预估为8675.3万英亩,3月时预估为8651万英亩;收割面积预估为8526.1万英亩。当前

        if (font != null) {Character.UnicodeScript unicodeScript = nextSignificantUnicodeScript(nextUnignorable);int to = nextUnignorable;for (int i = nextUnignorable; i < text.length(); i++) {int codePoint = isSurrogatePair(text, i) ? TextUtil.convertToUtf32(text, i) : (int) text.charAt(i);Character.UnicodeScript currScript = Character.UnicodeScript.of(codePoint);if (isSignificantUnicodeScript(currScript) && currScript != unicodeScript) {System.out.println("----i------"+i+"-----charAt---"+text.charAt(i)); ;break;}if (codePoint > 0xFFFF) {i++;}to = i;}int numOfAppendedGlyphs = font.appendGlyphs(text, index, to, glyphs);anyGlyphsAppended = numOfAppendedGlyphs > 0;assert anyGlyphsAppended;index += numOfAppendedGlyphs;}

这段代码会把文本来进行切割

&nbsp; &nbsp;美国是全球大豆的第二大主产区,产量占到全球大豆总产量的30%左右。新作方面,美国农业部公布的种植面积报告中,24/25年度美豆种植面积预估为8610万英亩,市场此前预估为8675.3万英亩,3月时预估为8651万英亩;收割面积预估为8526.1万英亩。当前USDA预估的24/25年度美豆单产为52蒲/英亩,处于同期高值,因此6月份USDA供需报告给出的新作美豆产量预期为1.2111亿吨,同比增加777万吨;需求方面,报告将24/25年度美豆出口量提高到4967万吨,同比提高7.4%,跟随供应端的增加而上调;国内压榨量增加到6600万吨的历史最高值,较上一年度增加了368万吨。供需同增的情况下,24/25年度美豆期末库存落至1238万吨,上一年度为953万吨,同比增加285万吨(+29.9%);库消比落在10.43%,与往年相比,该期末库存处于偏高水平,若数据兑现整体美豆供需格局较为宽松。另一方面,数据显示,24/25年度美豆种植成本为1182美分/蒲式耳,由于成本限制,若后续未能出现天气市升水,CBOT大豆期价下方的空间仍有限,短期看盘面能否在1050美分/蒲左右见底。

切割成,切割的逻辑就是判断每个字符对应的Character.UnicodeScript是否变更了,变更了就切割

 &nbsp; &nbsp;美国是全球大豆的第二大主产区,产量占到全球大豆总产量的30%左右。新作方面,美国农业部公布的种植面积报告中,24/25年度美豆种植面积预估为8610万英亩,市场此前预估为8675.3万英亩,3月时预估为8651万英亩;收割面积预估为8526.1万英亩。当前 --------------------展示的字体为SimSun(宋体) Character.UnicodeScript == 'HAN'

USDA--------------------展示的字体为KaiTi_GB2312   Character.UnicodeScript == 'LATIN'

预估的24/25年度美豆单产为52蒲/英亩,处于同期高值,因此6月份-------------展示的字体为KaiTi_GB2312   Character.UnicodeScript == 'HAN'

USDA-------------展示的字体为KaiTi_GB2312   Character.UnicodeScript == 'LATIN'

供需报告给出的新作美豆产量预期为1.2111亿吨,同比增加777万吨;需求方面,报告将24/25年度美豆出口量提高到4967万吨,同比提高7.4%,跟随供应端的增加而上调;国内压榨量增加到6600万吨的历史最高值,较上一年度增加了368万吨。供需同增的情况下,24/25年度美豆期末库存落至1238万吨,上一年度为953万吨,同比增加285万吨(+29.9%);库消比落在10.43%,与往年相比,该期末库存处于偏高水平,若数据兑现整体美豆供需格局较为宽松。另一方面,数据显示,24/25年度美豆种植成本为1182美分/蒲式耳,由于成本限制,若后续未能出现天气市升水,--------------------展示的字体为KaiTi_GB2312 Character.UnicodeScript == 'HAN'

CBOT大豆期价下方的空间仍有限,短期看盘面能否在1050美分/蒲左右见底。--------------------展示的字体为KaiTi_GB2312   Character.UnicodeScript == 'LATIN'

 &nbsp; &nbsp;美国是全球大豆的第二大主产区,产量占到全球大豆总产量的30%左右。新作方面,美国农业部公布的种植面积报告中,24/25年度美豆种植面积预估为8610万英亩,市场此前预估为8675.3万英亩,3月时预估为8651万英亩;收割面积预估为8526.1万英亩。当前为什么不会被切割成? 因为初始的Character.UnicodeScript == 'HAN',当匹配'美'字符时,则Character.UnicodeScript == 'HAN'没有变更,则不会切割,则"美国是全球大豆的第二大主产区,产量占到全球大豆总产量的30%左右。新作方面,美国农业部公布的种植面积报告中,24/25年度美豆种植面积预估为8610万英亩,市场此前预估为8675.3万英亩,3月时预估为8651万英亩;收割面积预估为8526.1万英亩。" 会和&nbsp; &nbsp;字体一样

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

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

相关文章

网页数据抓取:融合BeautifulSoup和Scrapy的高级爬虫技术

网页数据抓取&#xff1a;融合BeautifulSoup和Scrapy的高级爬虫技术 在当今的大数据时代&#xff0c;网络爬虫技术已经成为获取信息的重要手段之一。Python凭借其强大的库支持&#xff0c;成为了进行网页数据抓取的首选语言。在众多的爬虫库中&#xff0c;BeautifulSoup和Scrap…

图像识别和目标检测在超市电子秤上的应用

目录 前言深度学习的目标检测图像识别技术视觉秤的优势其他应用场景中的技术应用未来展望 前言 随着科技的不断发展&#xff0c;电子秤在生鲜超市中的应用也在不断升级。传统的电子秤需要打秤人员手动输入秤码&#xff0c;这不仅耗时费力&#xff0c;还需要大量的培训以记住各…

在Mac上一键安装Mysql(解决所有安装问题)

重点强调安装mysql成功的关键在于安装的版本不能是最新&#xff01;&#xff01; 目录 一&#xff1a;下载mysql数据库安装部分到此结束 二&#xff1a;配置mysql数据库三&#xff1a;启动mysql数据库四&#xff1a;各类奇葩问题总结 一&#xff1a;下载mysql数据库 1.进入MyS…

替换:show-overflow-tooltip=“true“ ,使用插槽tooltip,达到内容可复制

原生的show-overflow-tooltip“true” 不能满足条件&#xff0c;使用插槽自定义编辑&#xff1b; 旧code <el-table-column prop"reason" label"原因" align"center" :show-overflow-tooltip"true" /> <el-table-column pro…

SpringBoot系列:通过AOP+注解优雅实现操作日志记录

文章目录 前言一、简介1.1 操作日志在企业应用中的重要性1.2 使用AOP和注解实现操作日志记录的好处 二、开发环境三、准备工作3.1 创建操作日志记录表3.2 创建系统日志实体类 四、代码实现4.1 创建业务枚举类4.2 创建日志注解4.3 创建操作状态枚举类4.4 创建IP工具类4.5 创建切…

[A-04] ARMv8/ARMv9-Cache的相关策略

ver0.3 前言 前面我们已经通过三篇文章反反复复的讲Cache的概念、结构、架构&#xff0c;相信大家对Cache已经大概有了初步的了解。这里简单归纳一下: (1) Cache从硬件视角看&#xff0c;是连接PE-Core和主存的一种存储介质&#xff0c;存储的数据是主存中数据的副本&#xf…

【算法消费者行为】算法性能预期如何增强冲动性购买?—推文分享—2024-07-16

今天的推文主题是&#xff1a;【算法&消费者行为】 第一篇&#xff1a;如何通过管理多种刺激来优化客户体验&#xff1f;购买行为的驱动因素是隐性还是显性的消费者态度&#xff1f;第二篇&#xff1a;算法性能期望如何增强在线零售中的即兴购买行为。第三篇&#xff1a;社…

【Linux】Ubuntu 漏洞扫描与修复的吃瘪经历

自从上次“劫持”事情后&#xff0c;项目经理将所有跟安全相关的都推给我了&#xff08;不算 KPI 又要被白嫖&#xff0c;烦死了&#xff09;。这次客户又提了一个服务器安全扫描和漏洞修复的“活”&#xff0c;我这边顺手将过程记录一下&#xff0c;就当经验总结跟各位分享一下…

Parallels Desktop 19 for Mac(PD19虚拟机)详细图文安装教程分享

Parallels Desktop 19是一款功能丰富、性能强大且易于使用的虚拟机软件&#xff0c;它可以让您在Mac上同时运行多个操作系统&#xff0c;为您提供更大的灵活性和兼容性。 Parallels Desktop 19 for Mac(PD19虚拟机)下载安装包 Parallels Desktop 19 for Mac(PD19虚拟机)详细图…

【Visual Studio】Visual Studio使用技巧及报错解决合集

目录 目录 一.概述 二.Visual Studio报错问题及解决方法 三.Visual Studio操作过程中遇到的问题及解决方法 四.Visual Studio编译优化选项 五.Visual Studio快捷键 一.概述 持续更新Visual Studio报错及解决方法&#xff0c;包括Visual Studio报错问题及解决方法、Visua…

phenocycler(原CODEX)鉴定三阴乳腺癌不同的治疗反应轨迹

目前临床上需要制定策略来更好地识别哪些患者可以从单独的免疫疗法中受益&#xff0c;或者哪些患者可能需要化疗或放疗等额外疗法来克服耐药性。尽管一些联合放射治疗&#xff08;RT&#xff09;和免疫检查点抑制&#xff08;ICI&#xff09;的临床研究取得了成功&#xff0c;但…

【Linux】常见指令(下)

【Linux】常见指令&#xff08;下&#xff09; 通配符 *man指令cp指令echo指令cat指令&#xff08;简单介绍&#xff09;cp指令 mv指令alias指令which ctrl ccat指令linux下一切皆文件 more指令less指令head指令tail指令管道 通配符 ‘*’ 通配符’ *‘&#xff0c;是可以匹配…

怎样去除视频上的水印和文字,视频水印文本移除教程

在观看和分享视频时&#xff0c;我们经常会遇到带有水印或额外文字的情况。这些标记有时是为了版权保护&#xff0c;有时则是平台的标识&#xff0c;但在某些情况下&#xff0c;它们可能会干扰视频的观赏体验。本文将向你介绍常见的视频水印类型以及如何使用简鹿水印助手去除这…

ARM功耗管理之功耗数据与功耗收益评估

安全之安全(security)博客目录导读 思考&#xff1a;功耗数据如何测试&#xff1f;功耗曲线&#xff1f;功耗收益评估&#xff1f; UPF的全称是Unified Power Format&#xff0c;其作用是把功耗设计意图&#xff08;power intent&#xff09;传递给EDA工具&#xff0c; 从而帮…

05 以物品与用户为基础个性化推荐算法的四大策略

《易经》&#xff1a;“九二&#xff1a;见龙在田&#xff0c;利见大人”。九二是指阳爻在卦中处于第二位&#xff0c;见龙指龙出现在地面上&#xff0c;开始崭露头角&#xff0c;但是仍须努力&#xff0c;应处于安于偏下的位置。 本节是模块二第一节&#xff0c;模块二讲解传…

[Linux+git+Gitee+Jenkins]持续集成实验安装配置详细

首先理解持续集成原理&#xff0c;看懂并理解图 1。 图 1 持续集成原理结构 图 1 中&#xff0c;版本控制服务器指远程代码仓库&#xff0c;本实验使用 GitEE 作为远程代码仓库&#xff1b;Jenkins 自动化部署服务器为虚拟机&#xff0c;操作系统为 Linux &#xff1b…

人工智能与伦理挑战:多维度应对策略

人工智能技术近年来取得了迅猛发展&#xff0c;广泛应用于医疗诊断、金融分析、教育辅助、自动驾驶等各个领域&#xff0c;极大地提升了生产效率和服务质量&#xff0c;推动了科技进步和商业创新。然而&#xff0c;伴随其普及和应用的泛滥&#xff0c;AI也带来了数据隐私侵犯、…

C语言 | Leecode C语言题解之第229题多数元素II

题目&#xff1a; 题解&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*//*假定 num1&#xff0c;num2 为出现次数大于 nums.length / 3 的两个数。&#xff08;最多出现两个&#xff09;遍历 nums&#xff0c; 若出现 num1、num2…

2024年高职云计算实验室建设及云计算实训平台整体解决方案

随着云计算技术的飞速发展&#xff0c;高职院校亟需构建一个与行业需求紧密结合的云计算实验室和实训平台。以下是针对2024年高职院校云计算实验室建设的全面解决方案。 1、在高职云计算实验室的建设与规划中&#xff0c;首要任务是立足于云计算学科的精准定位&#xff0c;紧密…

如何通过SSH协议使用WinSCP实现Windows与Linux之间的远程公网文件传输

目录 ⛳️推荐 前言 1. Windows传输文件至Linux 2. WinSCP使用公网TCP地址连接 3. WinSCP使用固定公网TCP地址访问服务器 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 前…