我正在使用 Ubuntu 18.04 并填写SS-5 社会保障管理局表格。但是,有些字母的位置错误。
Evince 3.28.2-1:
Okular 1.3.3(Ubuntu 版本 4:17.12.3-0ubuntu1):
xpdf 3.04-7:
mudpdf 1.12.0:
Firefox 59.0.2 内置的 PDF 阅读器:
Chromium 65.0.3325.181 内置的 PDF 阅读器:
以下是输出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-installer
和poppler-data
包。
以下是我的问题:
我可以更改用于填写表格单元格的字体吗?
看起来 Evince 和 xpdf 使用了可变宽度字体,而它们应该使用等宽字体,也许这导致了定位问题。
如果我要提交错误报告,我应该将其提交为 poppler 问题、fontconfig 问题还是其他地方?
更新:错误报告:
编辑:@xiota 的解决方案完全可行。然而,这仍然是 poppler 的一个错误,因为当 PDF 查看器由于原始字体未嵌入而替换其他字体时,XFA 表单中的间距应该与替代字体,不是原始字体。有一个拉取请求修复此问题,目前正在进行中。Poppler 开发人员 Tobias Deiminger (@haxtibal) 在不同的错误报告:
那里的策略是,如果没有嵌入字体,则收集并使用来自实际替代字体的指标,而不是来自 PDF 字体描述符或硬编码的指标。
答案1
这个问题应该已修补在下一个版本的 Ubuntu (21.04) 中。还有一个上游的 fontconfig 合并请求#128待办的。
您观察到的问题是由不正确的字体替换引起的。 在我的电脑上,CourierStd 和 ZapfDingbats 被替换为 Ubuntu。这显然无法正确呈现。
要纠正此问题:
安装
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
(可能没有必要)。您可以根据需要向文件中添加其他字体别名。
也可以看看: