PHP:直接利用 Unicode 字形和 Open Type 字体 (otf) 的字距调整表的优势来创建 PDF 作为服务器响应

Posted

技术标签:

【中文标题】PHP:直接利用 Unicode 字形和 Open Type 字体 (otf) 的字距调整表的优势来创建 PDF 作为服务器响应【英文标题】:PHP: Using advantages of Unicode glyphs and kerning tables of Open Type fonts (otf) directly for creating PDF as a server response 【发布时间】:2012-07-20 16:23:57 【问题描述】:

我使用文档数据库,每个内容包含 5 到 20 页的文本数据。 我有三个任务:

    将多语言输出为 PDF 文档。 UTF8 格式的文本,可能包含英语、法语、德语、俄语等内容以及翻译等组合。 在 PDF 中添加自动排版,这意味着使用 Unicode 字符对字母进行字距调整和替换。 我的工作有 MinionPro-xxx.otf(10 ligatures)字体。

我尝试使用 Wayne Munro (pdf@ros.co.nz) 的 php Cphf 库,并添加了很多正则表达式。我添加了很多 PDF 文本格式操作符,例如 Ts, TL, T*, Tc, Tw, Tz,我几乎完成了,但我无法访问 Type 1 字符表之外的字符字形,而且我不知道 如何获得“kern”和字体文件中的“hmtx”表?如何嵌入字形?

我相信,我可以通过矩阵变换 PDF 文本指令进行字距调整:

[ (A) 120 (W) 120 (A) 95 (Y again) ] TJ

UPD#1: MinionPro 字体没有“kern”表。它有“GPOS”(字形定位表),我非常接近解决问题。顺便说一句,通过 PHP 走进二进制文件是一场噩梦((

【问题讨论】:

这听起来工作量很大。为什么不使用 XeTeX 或 LuaTeX 等支持 OpenType 且支持 Unicode 的 TeX 引擎? 我喜欢 LaTeX!我第一眼就爱上了Tex。也许,有一天我会意识到,我目前的想法完全是浪费时间,我会尝试连接 mysql->PHP 编译器->XeTeX(server?)->representation。但目前我有几个理由相信,MySQL->PHP 编译器->表示链对我有一些优势。但谁知道呢? 【参考方案1】:

在小字体文本字符串中使用手动字距调整是完全错误的策略。 Microsoft Excel PDF 文本导出器也是如此,结果不可接受。

【讨论】:

以上是关于PHP:直接利用 Unicode 字形和 Open Type 字体 (otf) 的字距调整表的优势来创建 PDF 作为服务器响应的主要内容,如果未能解决你的问题,请参考以下文章

用于表示组合字符的 unicode 字形是啥?

有没有看起来像“钥匙”图标的 Unicode 字形? [关闭]

有没有办法以编程方式确定字体文件是不是具有特定的 Unicode 字形?

在基于 Debian 的系统上,如何找到字体具有字形的 Unicode 代码点?

Unicode 字符如何映射到字体中的字形?

我可以在我的代码中硬编码字形索引吗?