PDF 格式中的错误字母定位和字体

PDF 格式中的错误字母定位和字体

我正在使用 Ubuntu 18.04 并填写SS-5 社会保障管理局表格。但是,有些字母的位置错误。

Evince 3.28.2-1:

evince 截图(有字距调整问题)

Okular 1.3.3(Ubuntu 版本 4:17.12.3-0ubuntu1):

Okular 屏幕截图(有字距调整问题)

xpdf 3.04-7:

xpdf 屏幕截图(有字距调整问题)

mudpdf 1.12.0:

mupdf 截图(无字距调整问题)

Firefox 59.0.2 内置的 PDF 阅读器:

Firefox 屏幕截图(无字距调整问题)

Chromium 65.0.3325.181 内置的 PDF 阅读器:

chromium 截图(无字距调整问题)

以下是输出pdffonts

$ pdffonts ss-5.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
IHPIKC+ArialMT                       CID TrueType      Identity-H       yes yes yes    824  0
ArialMT                              TrueType          WinAnsi          no  no  no     826  0
Arial-BoldMT                         TrueType          WinAnsi          no  no  no     828  0
CourierStd                           Type 1            WinAnsi          no  no  no     145  0
Helvetica                            Type 1            WinAnsi          no  no  no     197  0
MyriadPro-Regular                    Type 1            WinAnsi          no  no  no     198  0
ZapfDingbats                         Type 1            ZapfDingbats     no  no  no     199  0

我已经安装了ttf-mscorefonts-installerpoppler-data包。

以下是我的问题:

  • 我可以更改用于填写表格单元格的字体吗?

    看起来 Evince 和 xpdf 使用了可变宽度字体,而它们应该使用等宽字体,也许这导致了定位问题。

  • 如果我要提交错误报告,我应该将其提交为 poppler 问题、fontconfig 问题还是其他地方?

更新:错误报告:

编辑:@xiota 的解决方案完全可行。然而,这仍然是 poppler 的一个错误,因为当 PDF 查看器由于原始字体未嵌入而替换其他字体时,XFA 表单中的间距应该与替代字体,不是原始字体。有一个拉取请求修复此问题,目前正在进行中。Poppler 开发人员 Tobias Deiminger (@haxtibal) 在不同的错误报告

那里的策略是,如果没有嵌入字体,则收集并使用来自实际替代字体的指标,而不是来自 PDF 字体描述符或硬编码的指标。

答案1

这个问题应该已修补在下一个版本的 Ubuntu (21.04) 中。还有一个上游的 fontconfig 合并请求#128待办的。


您观察到的问题是由不正确的字体替换引起的。 在我的电脑上,CourierStd 和 ZapfDingbats 被替换为 Ubuntu。这显然无法正确呈现。

pdf 字体属性

要纠正此问题:

  • 安装fonts-urw-base35。这应该可以纠正 Dingbats 和大多数其他 pdf 字体替换。但是,CourierStd 替换尚未修复,因为它不在配置文件中。

  • ~/.config/fontconfig/conf.d/10-pdf-aliases.conf要更正 CourierStd,请创建包含以下内容的文件:

      <?xml version="1.0"?>
      <!DOCTYPE fontconfig SYSTEM "/etc/fonts/conf.d/fonts.dtd">
      <fontconfig>
    
      <alias binding="same">
        <family>Courier Std</family>
        <accept>
        <family>Courier</family>
        </accept>
      </alias>
    
      <alias>
        <family>Courier Std</family>
        <default><family>monospace</family></default>
      </alias>
    
      </fontconfig>
    

    然后运行fc-cache(可能没有必要)。

    您可以根据需要向文件中添加其他字体别名。

也可以看看:

相关内容