我使用Evince在Ubuntu Linux 10.04上查看PDF文件.但有时程序无法正确显示数学符号.
一个例子.PDF文件可以从以下网址下载:
参见等式(1).
在Windows上,Acrobat Reader正确显示公式:
但在Linux上,
\sum
它显示为一个实心点:
我已经安装的软件包:ttf-symbol-replacement
,libpoppler5
,poppler-data
.
Kur*_*fle 30
您的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实例,因此它可以呈现此类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
Run Code Online (Sandbox Code Playgroud)
-dPDFSETTINGS=/prepress
CLI参数的一部分告诉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标准 - 没有' 基本 14'PDF字体(这是4'标准','斜体','粗体'和'粗体 - 斜体'变体对于Helvetica,Times和Courier以及Symbol和Dingbats)需要嵌入,并且所有PDF查看器都应提供自己的方法来渲染这些字体中的所有字形,即使它们没有嵌入到文件中.
实际上,遵循这一建议确实导致了现实生活中的许多问题(例如在这个问题中展示了一个案例):因为并非所有观众,渲染器和自动PDF处理器都能可靠地渲染未嵌入字体的字形.这就是为什么所有当前的PDF/A(归档)和PDF/X(盲目交换)ISO标准都要求在PDF文件中嵌入所有字体(甚至是' Base 14 ' 字体)的原因.否则该文件不符合相应标准.
并且正如我的Ghostscript命令的结果所示:嵌入Symbol字体确实可以避免Evince的Σ字形渲染问题.即使你认为它是一个Evince错误(你可以正确),它没有正确呈现原始PDF ...