1.

1.

对于我正在编写的一份相当大的文档(超过 100 页),我运行pdffonts检查字体是否已适当嵌入。输出如下:

C:\>pdffonts 主要.pdf
名称 类型 emb sub uni 对象 ID
------------------------------------ ----------------- --- --- --- ---------
PEUMGT+Utopia-Regular Type 1C 是 是 否 10 0
QIAYNS+Utopia-Bold Type 1C 是 是 否 8 0
XUFKIZ+Utopia-Italic Type 1C 是 是 否 61 0
CVIUTI+Fourier-Math-Letters-Italic Type 1C 是 是 否 270 0
YJVFRW+Fourier-Math-Symbols Type 1C 是 是 是 282 0
LPRTGE+Fourier-Math-Extension Type 1C 是 是 是 332 0
UYVFMY+Fourier-Math-Letters-Bold-Italic Type 1C 是 是 否 592 0

我一直在使用该\include{fourier}软件包,以便获得我非常喜欢的 Fourier 字体,无论是用于数学还是日常使用。我从字体输出表中看到,我也有一些 Utopia 字体,这些字体来自 Adob​​e,如 Fourier 软件包文档中所述。我有三个问题:

  1. 我想知道表格中字体名称前的“随机”字母是什么意思(例如,第一行有 PEUMGT)。

  2. 我想学习如何更好地解释字体输出表。在倒数第二列的最后一行中,我们有数字592。这是什么意思?

  3. 在哪里可以找到有关该pdffonts命令的更多信息?

答案1

据我所知,问题 1+2 尚未得到完全解答...

1.

“我想知道表格中字体名称前的“随机”字母是什么意思(例如第一行有 PEUMGT)。”

  • 这些字母是原始字体名称的前缀,它们表示该字体是嵌入的,但不是满的该字体可用的字形集,但只能作为子集。根据 PDF 规范,与使用相同完整字体的其他子集字体名称相比,字体名称前缀确实应该是随机的和唯一的。

2.

“我想学习如何更好地解释字体输出表。在倒数第二列的最后一行,我们看到了数字592。这是什么意思?”

  • 正如 Herbert 所说,PDF 文件包含已编号的对象(并具有“代”子编号,在大多数情况下为 0)。如果您想查找对象 592 代 0 的确切 PDF 代码,您应该在 PDF 中搜索以行 开头592 0 obj、以行 结尾的部分endobj。其间的所有内容都定义了此对象。但是,可能会引用其他一些对象:如果您找到字符串,表示691 0 R您知道要查找对象 691,现在以与您最初查找对象 592 相同的方式查找代 0。
  • 如果您想知道您的592对象在 PDF 中的哪个位置使用以及在多少个位置使用,请搜索所有出现的592 0 R...

更新:

3.

列中的值uni代表什么含义?(实际上,这不是原帖作者要求的,而是我自己添加的,因为它符合上下文……:)

  • 列中的值uni表示相关字体是否附带表格/ToUnicode(如果存在,则为 PDF 中的单独对象)。此表提供从“字符代码”到 Unicode 字符或代码点的反向映射。

  • 如果没有正确有效的/ToUnicode表格,任何文本提取都很可能会因Custom编码字体而失败,并导致无法读取的垃圾:

    • pdftotext将无法按预期工作;
    • 屏幕阅读器将无法向有需要的用户大声朗读 PDF 内容;
    • 复制粘贴无法按预期工作。

    您可以通过在文本编辑器中打开任何 PDF 来测试这一点。如果您在其中找到字符串/ToUnicode,请将其更改为/toUnicode。(大写字母的这种变化将使区分大小写的关键字不再可用。)之后,您的 PDF 仍将显示相同的内容,但文本提取将不再起作用(对于禁用的表格所/ToUnicode使用的字体)。

    [您现在可能会问:文本如何在查看器中正确显示?原因是向前(Unicode) 字符或代码点 (到要为其绘制的字形) 的映射使用不同的机制...参见点4

4.

新版本会pdffonts显示一个附加列,encoding如下所示:

name                       type       encoding         emb sub uni object ID
-------------------------- ---------- ---------------- --- --- --- ---------
UBYABV+CMR10               Type 1C    Builtin          yes yes no       8  0

列中的值encoding代表什么含义?(问题也是我添加的:)

  • ‘编码’字体实际上代表了提到的前向映射(参见点3) 从“字符代码”转换为字体内的字形 ID,以便 PDF 渲染器知道如何绘制代表字符代码的特定字形。笔记,此处的技术术语“字符代码”与“字母”或“字符”不同。在 PDF 文本对象中表示字母“a”的“字符代码”可能是“z”,也可能是其他任何内容。)

  • 字体编码有多种机制:

    • 根据编码(对于类型 1字体):其中包括标准编码温控器MacRoman编码。这些是 PDF 阅读器所熟知的,不需要嵌入到 PDF 中。
    • 风俗编码(对于类型 1字体):这些是基于命名的基本编码,但通过/Differences向最终字体编码添加数组进行修改。
    • 身份-H第五人格编码:CID 字体类型的标准编码(字体可包含远多于 Type 1 字体所能包含的最大 256 种不同字形)。
    • 内置编码:每个字体程序(Type 3 字体除外)都必须包含内置编码。

    那么为什么 PDF 并不总是使用“内置”编码呢?因为它们并不总是嵌入满的字体程序。有时它们仅嵌入 PDF 文档中实际出现的字形子集。

答案2

man pdffonts

DESCRIPTION
       Pdffonts lists the fonts used in a Portable Document Format (PDF) file along with various information for each font.
       The following information is listed for each font:
       name   the font name, exactly as given in the PDF file (potentially including a subset prefix)
       type   the font type -- see below for details
       emb    "yes" if the font is embedded in the PDF file
       sub    "yes" if the font is a subset
       uni    "yes"  if  there  is  an explicit "ToUnicode" map in the PDF file (the absence of a ToUnicode map doesn't necessarily
              mean that the text can't be converted to Unicode)
       object ID
              the font dictionary object ID (number and generation)
       PDF files can contain the following types of fonts:
              Type 1
              Type 1C -- aka Compact Font Format (CFF)
              Type 3
              TrueType
              CID Type 0 -- 16-bit font with no specified type
              CID Type 0C -- 16-bit PostScript CFF font
              CID TrueType -- 16-bit TrueType font

相关内容