Linux 上的 PDF 查看器“Evince”无法正确显示某些数学符号 [关闭]

Posted

技术标签:

【中文标题】Linux 上的 PDF 查看器“Evince”无法正确显示某些数学符号 [关闭]【英文标题】:The PDF viewer 'Evince' on Linux can not display some math symbols correctly [closed] 【发布时间】:2012-05-03 21:07:20 【问题描述】:

我使用 Evince 在 Ubuntu Linux 10.04 上查看 PDF 文件。但有时程序无法正确显示数学符号。

一个例子。 PDF 文件可从以下网址下载:

http://jmlr.csail.mit.edu/papers/volume12/zhang11a/zhang11a.pdf

参见公式 (1)。

在 Windows 上,Acrobat Reader 可以正确显示方程式: 但在 Linux 上,\sum 显示为实心点:

我已经安装了包:ttf-symbol-replacementlibpoppler5poppler-data

【问题讨论】:

@Ocaso Protal: (+@***fo, +@Job, +@casperOne) 为什么你只是关闭这个问题而不是简单地将它移到 SuperUser.com ?!? @pipitas:IIRC,我实际上投了赞成票…… 【参考方案1】:

您的 PDF 文件无法在所有 PDF 查看器上运行的原因是:您的 'zhang11a.pdf' 没有嵌入所有字体。尤其缺少的是symbol 字体,您可以从以下列表中看到:

kupfe@abc:~$ pdffonts zhang11a.pdf 名称 类型 emb 子 uni 对象 ID ------------------ --------- --- --- --- --------- NXDEKT+CMSY10 类型 1C 是 是 是 11 0 Times-Italic Type 1 no no no 10 0 Times-Bold Type 1 no no no 9 0 Times-Roman Type 1 no no no 8 0 UYBJCW+MSBM10 Type 1C 是 是 否 29 0 QEAPRL+CMR10 类型 1C 是 是 否 23 0 OBCIBS+CMMI10 类型 1C 是 是 是 25 0 符号类型 1 no no no 33 0 OUPZTL+ZapfChancery-MediumItalic Type 1C 是 是 否 27 0 CFICWF+CMEX10 类型 1C 是 是 否 31 0 XRVDJC+CMMI7 类型 1C 是 是 否 56 0 JQSOYL+CMMI10 Type 1C 是 是 否 54 0 UWKDHL+CMBX10 类型 1C 是 是 否 58 0 AIYCES+CMMI5 类型 1C 是 是 否 60 0 SDIKLH+CMEX9 类型 1C 是 是 否 72 0 EKRXFC+CMSS10 类型 1C 是 是 否 84 0 快递类型 1 不 不 不 91 0 Helvetica 类型 1 否 否 否 97 0 UELPFP+CMMI10 类型 1C 是 是 否 135 0 VZIXBZ+CMR10 Type 1C 是 是 否 133 0

现在,如果 PDF 阅读器遇到未嵌入的字体,它会使用类似于以下的策略。它...

(1) ....搜索本地操作系统并尝试找到具有匹配类型和名称的字体,以便使用它来呈现文本;如果这不成功,它.... (2) ....搜索本地操作系统以查找具有匹配名称的字体(可能是其他字体类型);如果不成功,它.... (3) ....搜索适当的替代字体(其字体规格接近原始字体的规格——原始字体的规格信息应嵌入 PDF 中,即使字体文件本身也是如此不是);如果不成功,那么... (4) ....使用Courier 呈现文本。

我的假设对于您的问题的根本原因是:

ttf-symbol-replacement 字体中缺少 ∑ 字符的字形,或者在替换字体字形表中的其他位置找到此字形。

因此,Evince 无法正确渲染该文件并不是 Evince 的错。

另一方面,Acrobat Reader 确实附带了 TimesCourierHelveticaSymbol,以便它可以呈现此类 PDF。所以 AcroRead 对这个文件没有问题。 (而且由于这些字体的许可证,Evince 不能使用这些技巧......)

标记我的话: 如果您希望所有类型的操作系统系统上的每个 PDF 阅读器都能正确呈现(和打印)PDF 文件万无一失,请确保您的 PDF 嵌入了它使用的所有字体!

修复你的 zhang11a.pdf

但是,可以在 Ghostscript 的帮助下修复有问题的 PDF。我在 Ubuntu Oneiric 系统(使用 Ghostscript v9.02)上使用了这个命令:

/usr/bin/gs \
  -o gs-repaired---zhang11a.pdf \
  -dPDFSETTINGS=/prepress \
  -sDEVICE=pdfwrite \
   zhang11a.pdf 

CLI 参数的-dPDFSETTINGS=/prepress 部分告诉 Ghostscript 嵌入所有非嵌入字体。

修复后的 PDF 的嵌入属性现在看起来像这样:

kupfe@abc:~$ pdffonts gs-repaired---zhang11a.pdf 名称 类型 emb 子 uni 对象 ID ------------------ --------- --- --- --- --------- AFNVKD+Times-Italic Type 1C 是 是 否 12 0 PEQXED+CMSY10 类型 1C 是 是 是 14 0 FYXQNZ+Times-Roman Type 1C 是 是 否 8 0 XILTND+Times-Bold Type 1C 是 是 否 10 0 HZJMVE+符号类型 1C 是 是 否 36 0 EGYAWT+CMR10 类型 1C 是 是 否 26 0 AQGZYJ+CMMI10 Type 1C 是 是 是 28 0 YJATHO+ZapfChancery-MediumItalic Type 1C 是 是 否 30 0 CZXDRN+MSBM10 Type 1C 是 是 否 32 0 KTZJPT+CMEX10 类型 1C 是 是 否 34 0 NYTDMD+CMMI10 类型 1C 是 是 否 58 0 DFQTPB+CMMI7 类型 1C 是 是 否 60 0 GXJYGS+CMBX10 Type 1C 是 是 否 62 0 QAMUEV+CMMI5 类型 1C 是 是 否 64 0 QEWIFQ+CMEX9 类型 1C 是 是 否 76 0 KNOSJH+CMSS10 类型 1C 是 是 否 88 0 UCHHLK+Courier Type 1C 是 是 否 95 0 TWNVND+Helvetica Type 1C 是 是 否 102 0 ZDIWNO+CMR10 类型 1C 是 是 否 139 0 IGJFUT+CMMI10 类型 1C 是 是 否 141 0

我检查了 Evince 如何渲染修复后的 PDF:现在可以了。


更新:

Martin Schröder 正确地指出 -- 根据 ISO PDF 标准 -- 没有“Base 14”PDF 字体(即 4 个“标准”、“斜体”、“需要嵌入 Helvetica、Times 和 Courier 以及 Symbol 和 Dingbats 的粗体'和'粗斜体'变体,并且所有 PDF 查看器都应该提供自己的方法来呈现这些字体中的所有字形,即使它们不是嵌入文件中。

实际上,遵循此建议确实导致了现实生活中的许多问题(例如,在这个问题中展示了一个案例):因为并非所有查看器、渲染器和自动 PDF 处理器都能可靠地渲染未嵌入的字形字体。这就是为什么 PDF/A(归档)和 PDF/X(盲交换)的所有当前 ISO 标准要求嵌入所有字体(甚至是'以 PDF 文件为基础的 14 个)。否则,该文件将被视为不符合相应标准。

正如我的 Ghostscript 命令的结果所示:嵌入 Symbol 字体确实可靠地避免了 Evince 的 ∑ 字形渲染问题。即使您认为它没有正确呈现原始 PDF 是一个 Evince 错误(这是正确的)...

【讨论】:

@Martin Schröder:您指的是非常古老的 Adob​​e 建议(考虑到在昂贵的硬盘驱动器和 RAM 时代的小文件大小)。我所说的是使 PDF 在现实世界中可靠工作所需要的。这就是为什么 f.e.各种 PDF/A ISO 标准确实要求嵌入所有字体,(甚至是符号!)。 叹息...看,马丁。云煌有问题。我对其进行了分析,甚至提供了一个解决方案,即使使用有缺陷的 Evince 也能避免该问题。 谈论的是'让PDF在现实世界中可靠地工作'you 谈论的是 PDF-1.7 规范,它已被证明不会使(所有)PDF 在现实世界中可靠地工作。这就是为什么 PDF-1.7 规范得到了其他规范(甚至是标准!)的补充,例如 PDF/A 和 PDF/X 这不是你相信什么的问题。问题是什么对我和黄云这样的人有用。 @pipitas:感谢您的大力帮助!实际上这个问题出现在JMLR的每篇文章中。我必须在(虚拟)Windows 上打印这些文件,这很不方便。我尝试了gs 推荐,修复后的 PDF 可以正确呈现。您的解决方案对我很有帮助,再次感谢。 @MartinSchröder:也许应该改进 JMLR 提交系统,以确保所有字体都嵌入到提交的论文中。还是一样的谢谢你:)【参考方案2】:

看起来像是 Ubuntu 10.4 中(现在已经两年了)evince 中的一个错误。更新您的 Ubuntu 或向 Ubuntu 提交错误。

【讨论】:

我刚刚检查过:最新的 Ubuntu Oneiric (11.10) 上的 Evince v3.2.1-0ubuntu2.2 无法正确呈现原始 PDF。这意味着:'更新你的 Ubuntu' 的建议对一点帮助都没有。而建议“修复您的 zhang11a.pdf”确实有帮助.... @pipitas:您仍然应该向 Ubuntu 提交错误,因为 PDF 在 Adob​​e Reader 中看起来正确,但在 Okular 中却不正确。 亲爱的 Martin Schröder:如果愿意,我会向 Ubuntu 提交一个错误,而不是听从你的命令。是 说这是一个 evince 错误。那么为什么不去做呢?!? @pipitas:我不使用 Ubuntu 或 Evince。 当时这是一个非常大胆的方法:推荐某人在不知道它或不知道它是否有效的情况下更新到较新版本的软件......

以上是关于Linux 上的 PDF 查看器“Evince”无法正确显示某些数学符号 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在linux终端下打开pdf文件

用于查看 PDF 坐标的免费工具 [关闭]

如何从 pdfLaTeX 生成 PDF 索引? [关闭]

我在linux下看pdf格式的文件,是否需要下载Adobe Reader?

使用 swift 处理在 iOS 上的 PDF 查看器内单击的链接

使用 mpdf 创建的可填写 PDF 未显示复选框