我使用 Evince 在Ubuntu Linux 10.04上查看PDF文件。但有时程序无法正确显示数学符号。
一个例子。 PDF文件可从以下网址下载:
见等式(1)。
在Windows上,Acrobat Reader正确显示公式:
但是在Linux上,\sum
显示为一个实心点:
我已经安装了软件包:ttf-symbol-replacement
,libpoppler5
,poppler-data
。
答案 0 :(得分:29)
您的PDF文件无法在所有PDF查看器上运行的原因是:您的'zhang11a.pdf'没有嵌入所有字体。特别缺少的是symbol
字体,您可以从以下列表中看到:
kupfe@abc:~$ pdffonts zhang11a.pdf name type emb sub uni object ID -------------------------------- --------- --- --- --- --------- NXDEKT+CMSY10 Type 1C yes yes yes 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 yes yes no 29 0 QEAPRL+CMR10 Type 1C yes yes no 23 0 OBCIBS+CMMI10 Type 1C yes yes yes 25 0 Symbol Type 1 no no no 33 0 OUPZTL+ZapfChancery-MediumItalic Type 1C yes yes no 27 0 CFICWF+CMEX10 Type 1C yes yes no 31 0 XRVDJC+CMMI7 Type 1C yes yes no 56 0 JQSOYL+CMMI10 Type 1C yes yes no 54 0 UWKDHL+CMBX10 Type 1C yes yes no 58 0 AIYCES+CMMI5 Type 1C yes yes no 60 0 SDIKLH+CMEX9 Type 1C yes yes no 72 0 EKRXFC+CMSS10 Type 1C yes yes no 84 0 Courier Type 1 no no no 91 0 Helvetica Type 1 no no no 97 0 UELPFP+CMMI10 Type 1C yes yes no 135 0 VZIXBZ+CMR10 Type 1C yes yes no 133 0
现在,如果PDF阅读器遇到未嵌入的字体,则使用类似于以下的策略。它...
Courier
呈现文本。我的假设找出问题的根本原因是:
ttf-symbol-replacement
字体中缺少Σ字符的字形,或者该字形位于该替换字体的字形表中的不同位置。
因此,无法正确呈现该文件不是Evince的错误。
另一方面,Acrobat Reader附带了嵌入式应用程序的实例 Times , Courier , Helvetica 和 Symbol < / em>,以便它可以呈现此类PDF。所以AcroRead对这个文件没有问题。 (由于这些字体的许可证,Evince不能使用这些技巧......)
标记我的话:
如果您想要所有类型的OS系统上的每个PDF阅读器都能正确呈现(和打印)的万无一失的 PDF文件,请确保您的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 name type emb sub uni object ID -------------------------------- --------- --- --- --- --------- AFNVKD+Times-Italic Type 1C yes yes no 12 0 PEQXED+CMSY10 Type 1C yes yes yes 14 0 FYXQNZ+Times-Roman Type 1C yes yes no 8 0 XILTND+Times-Bold Type 1C yes yes no 10 0 HZJMVE+Symbol Type 1C yes yes no 36 0 EGYAWT+CMR10 Type 1C yes yes no 26 0 AQGZYJ+CMMI10 Type 1C yes yes yes 28 0 YJATHO+ZapfChancery-MediumItalic Type 1C yes yes no 30 0 CZXDRN+MSBM10 Type 1C yes yes no 32 0 KTZJPT+CMEX10 Type 1C yes yes no 34 0 NYTDMD+CMMI10 Type 1C yes yes no 58 0 DFQTPB+CMMI7 Type 1C yes yes no 60 0 GXJYGS+CMBX10 Type 1C yes yes no 62 0 QAMUEV+CMMI5 Type 1C yes yes no 64 0 QEWIFQ+CMEX9 Type 1C yes yes no 76 0 KNOSJH+CMSS10 Type 1C yes yes no 88 0 UCHHLK+Courier Type 1C yes yes no 95 0 TWNVND+Helvetica Type 1C yes yes no 102 0 ZDIWNO+CMR10 Type 1C yes yes no 139 0 IGJFUT+CMMI10 Type 1C yes yes no 141 0
我查看了Evince如何呈现修复过的PDF:现在可以了。
更新:
MartinSchröder说得对 - 根据ISO PDF标准 - 没有' Base 14 'PDF字体(这是4'标准','斜体','需要嵌入Helvetica,Times和Courier以及Symbol和Dingbats的大胆'和'粗体 - 斜体'变体,并且所有PDF查看器都应提供自己的方法来渲染这些字体中的所有字形,即使它们不是嵌入在文件中。
实际上,遵循这一建议确实导致了现实生活中的许多问题(例如在这个问题中展示了一个案例):因为并非所有观众,渲染器和自动PDF处理器都能可靠地渲染未嵌入的字形字体。这就是为什么所有现行的PDF / A(归档)和PDF / X(盲目交换)的ISO标准都需要来嵌入所有字体(甚至是'基础14 '个)PDF文件。否则该文件不符合相应标准。
正如我的Ghostscript命令的结果所示:嵌入Symbol字体确实可以避免Evince的Σ字形渲染问题。即使您认为它是一个Evince错误(您可以正确地),它也无法正确呈现原始PDF ...
答案 1 :(得分:-2)
在Ubuntu 10.4中看起来像是(现在两岁)的一个错误。要么更新你的Ubuntu,要么用Ubuntu提交bug。