我可以在 TCPDF 中使用“旧式”(非衬里)数字吗?

2024-02-25

Unicode 不区分衬里数字(与大写字母具有相同的比例,在表格中很有用,但在运行文本中很突出)和非衬里数字,它们看起来更像小写字母,具有上升部分和下降部分,因为它认为它们是彼此的变体。不过,许多字体都具有两组数字,并提供了一种在它们之间进行选择的方法。 TCPDF 有什么办法可以实现这一点吗?

理想情况下,我希望编号列表使用衬线数字,运行文本中的数字使用非衬线,邮政编码(英国和爱尔兰邮政编码是字母数字)使用非衬线数字和小块大写字母。这可以在 LaTeX 中实现\oldstylenums{1234567890}.

我能找到的唯一类似的问题是关于调整 TCPDF 中的字体规格,使非衬线图形看起来像衬线 https://stackoverflow.com/q/42201756/209139。理想情况下,我希望在同一文档中使用相同的字体。 TCPDF 是否允许访问 OpenType 字符变体? (公平警告:我有点超出了我的能力范围。)


不幸的是,据我所知,TCPDF 不支持 OpenType 变体。查看字体声明文件freesans例如,pnum变体字形甚至不包含在字符宽度数组中。

但是,您可以做的是使用 font forge 将变体字形复制到 Unicode 范围,并将字符映射到您想要使用它们的上下文中。例如,如果您不使用下标数字字形,它们是很好的候选者,因为搜索似乎仍然可以在我测试的几个 PDF 阅读器中找到它们。

为了让我可以测试一些东西,我运行了similar场景:使用 Free Sans,但想在某些具有相同字体文件的地方使用比例数字。我用 FontForge 打开 Free Sans 字体,查看字形信息以查看哪些变体可用于零字形,用它来查找一组pnum字形,然后将它们复制到下标数字上。 (u2080 - u2089) 范围是任意的,因此如果您使用这些字形,则存在例如私有使用范围,尽管这会破坏可搜索性而无需一些额外的步骤。

然后在 TCPDF 中,只需对我想要影响的字母数字字符串运行字符串替换。

$pdf->writeHTMLCell(0, 0, '', '', '<span style="font-family: freesansmod">H90173A8301X5</span>', 0, 1, 0, true, '', true);

//I feel like there's a shorter way to write this...
$special_numbers = str_replace(['0','1','2','3','4','5','6','7','8','9'],
    ["\u{2080}", "\u{2081}", "\u{2082}", "\u{2083}",
         "\u{2084}", "\u{2085}", "\u{2086}", "\u{2087}",
         "\u{2088}", "\u{2089}"], 'H90173A8301X5');

$pdf->writeHTMLCell(0, 0, '', '', '<span style="font-family: freesansmod">'.$special_numbers.'</span>', 0, 1, 0, true, '', true);

结果仍然是可搜索的,尽管复制粘贴有点奇怪。 [注:该功能已关闭,因为我想看看是否可以调整字形定位。]

回到您的具体情况,如果您愿意放宽“相同字体”要求,另一种选择是创建一个单独的衍生字体,其中变体字形覆盖标准数字,并在您需要的情况下切换到它。我没有搜索过,但可能有预先存在的工具可以自动为您执行此操作。内容将完全保留其语义,并且代码可能会更干净一些,但代价是有效嵌入相同字体的两个副本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在 TCPDF 中使用“旧式”(非衬里)数字吗? 的相关文章

随机推荐

  • 如何正确地将文本宽度设置为图表条上方中心标签?

    我目前有一个图表 每个条形上方显示有关联的条形值 但由于无法获取每个文本元素的宽度 因此我很难将值标签居中 这就是我目前绘制的图表的方式 我需要做的就是减去每个文本元素宽度的一半 但我似乎无法使用以下 Coffeescript 来做到这一点
  • 使用 AVFoundation 录制具有自定义尺寸的视频? [复制]

    这个问题在这里已经有答案了 我正在使用 AVFoundation 录制 MOV 文件 但我无法找到如何更改视频的尺寸 我有videoGravity的财产captureVideoPreviewLayer set to AVLayerVideo
  • 核心图和 NSDate (iPhone)

    我希望绘制一个折线图 其中 x 轴定义为两个日期之间的天数 y 轴是每天变化的值 我可以将 y 值绘制为 NSNumber 但我不知道如何在 x 轴上设置范围和标记 我查看了 core plot 发行版的 examples 目录中的日期示例
  • 像 FireBug 一样获取 PostData

    任何人 帮助我 如何使用 xpcom 其他东西获取扩展内的 headers 和 PostData 我无法在 firebug 中找到函数 因为它的代码库很大 谢谢你们 我假设您需要请求标头 而不是响应标头 然后你注册一个观察者http on
  • 在 C 中返回错误的 MD5 哈希值

    我正在尝试为字符串生成 MD5 哈希值 你好世界 使用原始 未修改的 md5 h 和md5c c http www arp harvard edu eng das manuals QNX6libs md5c 8c source html f
  • Tizen WEB 应用程序在 2.2 版本中无法运行

    我是 Tizen 的新手 并通过在 64 位 Windows 7 计算机中将 SDK 版本设置为 2 2 来开始开发 我创建了一个新的 WEB 应用程序 在尝试运行它 在模拟器和真实设备上 时 安装后没有任何反应 我尝试了几次启动该应用程序
  • Windows 上 PyCharm 中 numpy 的安装

    当我尝试在 Pycharm Windows 中安装 numpy 时 我不断收到错误 这是我得到的错误 C Python27 lib distutils dist py 267 UserWarning 未知的分发选项 define macro
  • cmd.exe 的 CSS 字体系列

    我在CSS中找不到任何与CMD exe中使用的字体系列类似的字体系列 请你帮助我好吗 您可以使用 font family monospace 指定您希望使用等宽字体 控制台使用等宽字体以确保所有字符具有相同的宽度 请注意 某些浏览器无法正确
  • 如何访问在条件匹配组 Javascript 正则表达式中导致匹配的表达式?

    我有一个条件匹配分组正则表达式 例如 sun bmoon 当我访问字符串中的匹配项时 我希望能够看到导致匹配的表达式 let regex sun bmoon let match regex exec moon return bmoon 这可
  • 通俗地说,Java 中的“静态”是什么意思? [复制]

    这个问题在这里已经有答案了 我被告知了它的几个定义 查看了维基百科 但作为 Java 的初学者 我仍然不确定它的含义 有人精通 Java 吗 static 意味着标记为此类的变量或方法在类级别可用 换句话说 您不需要创建该类的实例来访问它
  • 如何使用 RefersToRange?

    谁能告诉我如何在vba中使用RefersToRange 以及什么时候需要它 请先提供简单的例子 提前致谢 在Excel中 有一个概念 命名范围 这是一个带有名称的单元格范围 这由Name https msdn microsoft com e
  • 刷新 firebase id 令牌服务器端

    我正在开发一个使用 Next js 13 和带有 id 令牌的 firebase auth 的应用程序 我想利用服务器端组件的 Next JS 内置功能来更快地获取用户数据 因此我需要在初始请求时验证服务器上的 id 令牌 当没有用户登录受
  • 使用pdfminer从pdf中提取文本给出多个副本

    我正在尝试使用 PDFMiner 从 PDF 文件中提取文本 代码位于在Python中使用PDFMiner从PDF文件中提取文本 https stackoverflow com questions 26494211 extracting t
  • 以编程方式选择 jqGrid 中的所有行?

    以编程方式选择设置为多选的 jqGrid 中的所有行的最佳方法是什么 该代码可以一次循环遍历所有行并选择每一行 但不会选中网格标题中的复选框 我正在考虑只触发标题行复选框的单击事件 但这会对底层 jqGrid 实现做出假设 一定会有更好的办
  • 使用动态规划将球分配到“给定容量的箱子”中

    我想知道如何使用DP解决这样的问题 给定 n 个球和 m 个箱子 每个箱子有 max 容量 c1 c2 cm 将这 n 个球分配到这 m 个箱子中的方式总数是多少 我面临的问题是 如何找到递归关系 当容量都是单个常数 c 时我可以 将有多个
  • 如何在 django 中安排将来某个时间发送电子邮件?

    我想安排在执行特定操作时向用户发送电子邮件 但是 如果用户采取其他操作 我想取消该电子邮件并且不发送它 我该如何在 django 或 python 中做到这一点 豆茎 如果可以安装的话豆茎 http kr github com beanst
  • C 的 GCD 函数

    Q 1 问题5 可整除 我尝试了蛮力法 但是需要时间 所以我参考了几个网站 找到了这段代码 include
  • ChartJS 甜甜圈图表渐变填充

    因此 我尝试为 ChartJS 圆环图进行渐变填充 但这仅适用于水平方向 而不适用于圆形 这是我正在使用的代码 var ctx document getElementById chart area getContext 2d var gra
  • 仅显示 shell_exec('df') 中磁盘使用数据的特定列

    我正在尝试编写一个 PHP 脚本来执行用于报告的 shell 函数 我从磁盘使用报告开始 我想要以下格式 drive path total size free space 没有其他的 我的脚本是 output shell exec df h
  • 我可以在 TCPDF 中使用“旧式”(非衬里)数字吗?

    Unicode 不区分衬里数字 与大写字母具有相同的比例 在表格中很有用 但在运行文本中很突出 和非衬里数字 它们看起来更像小写字母 具有上升部分和下降部分 因为它认为它们是彼此的变体 不过 许多字体都具有两组数字 并提供了一种在它们之间进