您当前的位置:首页 > 计算机 > 精彩资源

PDF附加字体和不附加字体

时间:07-17来源:作者:点击数:

PDF附加字体

gs -q -dNOPAUSE -dBATCH -dPDFSETTINGS=/prepress -sDEVICE=pdfwrite -sOutputFile=output.pdf input.pdf

gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dPDFSTOPONERROR -dNOOUTERSAVE -dPDFSETTINGS=/prepress -dCompressFonts=true -dSubsetFonts=false -dEmbedAllFonts=true -sColorConversionStrategy=RGB -dCompatibilityLevel=1.6 -sOutputFile=output.pdf 1000027661706311repair1.pdf

从PDF删除附件字体

gs -sDEVICE=pswrite -sOutputFile=- -q -dNOPAUSE With-Fonts.pdf -c quit | ps2pdf - > No-Fonts.pdf

Embed fonts in PDF using Ghostscript · GitHub

Remove embedded fonts from a pdf. Using gs

gs 用来转换pdf ps,也可以用于诊断一些PDF字体的问题

比如

gs print.pdf 如果其中包含的字体有问题,可能就会打印出来,当然pdf字体还是用pdffont来查看。

gs -h 会列出默认的outpu设备以及可用设备以及查询路径等默认值。

gs的字体map文件在/usr/share/ghostscript/9.xx/Resource/Init/Fontmap.GS 要新添加字可以编辑这个文件

在末尾添加

/GLFont tab键 (GLFONT.TTF)tab键

也可以手工指定字体文件 如:

gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=png16m -sOutputFile=test.jpg -sFONTPATH=/usr/local/share/fonts/default/TrueType www/product_images/test.pdf

这样输出PDF为图片。

gs -dNOPAUSE -dSAFER -sDEVICE=pdfwrite -sOUTPUTFILE=/tmp/blahblahblah.pdf -dBATCH page1.pdf page2.pdf

合并2个PDF为一个。

包含所有字体到PDF中。

gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sPAPERSIZE=letter

-dPDFSETTINGS=/printer -dCompatibilityLevel=1.3 -dMaxSubsetPct=100

-dSubsetFonts=true -dEmbedAllFonts=true -sOutputFile=output.pdf

input.ps

GhostScript question: embedding all fonts in PDF

最近一个PDF打印的问题,linux机器上看是正常的,但是打印出来就是符号走位了。

首先看PDF信息,pdfinfo pdffont

xx@-PC:~/Desktop$ pdfinfo print.pdf
Producer:       iText 1.4.4 (by lowagie.com); modified using iText® 5.5.11 ©2000-2017 iText Group NV (AGPL-version)
CreationDate:   Sat Nov 20 15:40:30 2021 CST
ModDate:        Sat Nov 20 15:40:32 2021 CST
Tagged:         no
UserProperties: no
Suspects:       no
Form:           none
JavaScript:     no
Pages:          1
Encrypted:      no
Page size:      595 x 841 pts
Page rot:       0
File size:      49263 bytes
Optimized:      no
PDF version:    1.4
xx@-PC:~/Desktop$ pdffonts print.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
STSong-Light-UniGB-UCS2-H            CID Type 0        UniGB-UCS2-H     no  no  no       6  0

itext程序生成的pdf,其中字体设置的是STSong-Light 编码选择的UniGB-UCS2-H,但是emb部分是no,PDF里面不自带,系统lp模拟打印到PDF打印机,出来的符号走位,但用WPS打印出来就没问题。

使用gs加载上来看看

#gs print.pdf
GPL Ghostscript 9.27 (2019-04-04)
Copyright (C) 2018 Artifex Software, Inc.  All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Processing pages 1 through 1.
Page 1
Can't find CID font "STSong-Light".
Attempting to substitute CID font /Adobe-GB1 for /STSong-Light, see doc/Use.htm#CIDFontSubstitution.
The substitute CID font "Adobe-GB1" is not provided either. attempting to use fallback CIDFont.See doc/Use.htm#CIDFontSubstitution.
Loading a TT font from /usr/share/ghostscript/9.27/Resource/CIDFSubst/DroidSansFallback.ttf to emulate a CID font Adobe-GB1 ... %%BoundingBox: 27 364 559 836
%%HiResBoundingBox: 27.292921 364.103989 558.707045 835.999990
Done.
>>showpage, press <return> to continue<<

可以明确的看到,gs找不到STSong-Light这个CID字体,结果用Adobe-GB1字体来替代,结果也没有,只有用DroidSansFallback.ttf来模拟了。

这个原因应该就是系统没有STSong-Light字体以及替代的Adobe-GB1字体导致。STSong-Light这个字体是Adobe的PDF阅读器的字体,老版本的打开这些PDF还需要单独下载字体包才能显示。

在linux上确实还没找到如何搞定这个字体的。

但WPS确实是可以渲染这个符号的,WPS PDF打开显示符号就是正常的,UOS系统的文档阅读器显示也正常,但WPS打印到CUPS-PDF出来的PDF打开开符号位置也是正常的,,要么WPS有这个字体,要么WPS做了替换处理。

用系统的文档阅读器或者lp -d CUPS-PDF print.pdf这样打出来的PDF是符号错位,所以WPS应该打印之前对字体做了处理。

接下来做了个小验证,验证了WPS PDF 阅读器确实对PDF文件做了处理再发送到cups去打印的。而无论是系统的文档阅读器还是lp命令,都是直接把PDF发给cups的。

原理其实很简单,因为打印机是队列方式排队作业的,所以首先直接取消队列,让文件直接排在队列的文件夹里面,然后cd到这个目录去查看发送过来的文件就知道了。

参考的地址

CUPSDebugging - Debian Wiki

cupsdisable CUPS-PDF

然后cancel -x -a

再然后wps pdf阅读器去打印一下这个PDF,然后在/var/spool/cups/里面就会看到有新的文件进来,file 命令查看一下,是PDF文件类型,然后用pdfinfo 查看,并和原PDF文件对比就知道是不是重新处理过了。

#pdfinfo d00194-001 
Title:          
Creator:        
Producer:       Qt 5.12.9
CreationDate:   Sat Nov 27 22:35:23 2021 CST
Tagged:         no
UserProperties: no
Suspects:       no
Form:           none
JavaScript:     no
Pages:          1
Encrypted:      no
Page size:      612 x 792 pts (letter)
Page rot:       0
File size:      1765310 bytes
Optimized:      no
PDF version:    1.4

可以看到Producer部分,已经是QT5.12.9,应该是WPS用QT写的调用的QT的打印函数吧。

当然,参考debian网站的文章,还可以一级一级追下去,pdf2pdf pdf2ps ps2光栅文件,都可以dump出来,做最终的分析。

但实际这个问题还是没解决,毕竟Linux上没有STSong-Light这个字体,只希望研发大爷们生成PDF的时候不要为了节约那点空间而不内嵌特殊字体,跨平台太重要了。

实际上这个应该是以前的开发都是想着生成的PDF在windows上打开,这个字体根据查找,应该是Adobe找华文给定做的一款自己,而且还没法分离出来。所以要想原生支持这个字体,只能windows了,

参考下面的说法。ubuntu16.04 系统ghostscript 缺少中文语言包导致字体重叠问题

在pdf转图片的时候会经常报错缺少CID Frot。类似如下信息Can't find CID font "STSong-Light".Attempting to substitute CID font /Adobe-GB1 for /STSong-Light, see doc/Use.htm#CIDFontSubstitution.这会导致pdf在转图片的时候数字重...

但是实际上gs可以指定替代字体,比如下面

 gs -dNOPAUSE -dSAFER -sDEVICE=pdfwrite -sOUTPUTFILE=/tmp/print2021.pdf -dBATCH -sCIDFSubstPath=/usr/share/ghostscript/9.27/Resource/CIDFSubst -sCIDFSubstFont=wqy-microhei.ttc  ~/Desktop/print.pdf  

GPL Ghostscript 9.27 (2019-04-04)
Copyright (C) 2018 Artifex Software, Inc.  All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Processing pages 1 through 1.
Page 1
Can't find CID font "STSong-Light".
Attempting to substitute CID font /Adobe-GB1 for /STSong-Light, see doc/Use.htm#CIDFontSubstitution.
The substitute CID font "Adobe-GB1" is not provided either. attempting to use fallback CIDFont.See doc/Use.htm#CIDFontSubstitution.
Loading a TT font from /usr/share/ghostscript/9.27/Resource/CIDFSubst/wqy-microhei.ttc to emulate a CID font Adobe-GB1 ... Done.

新生成的PDF,字体就用文泉驿字体替代了。

这样再直接打印,就不会有字符走位的问题了。

修改gs的cid字体替代配置文件的方法还没测试成功。后面再更新吧。

参考系统文档以及网上的修改均不成功。后面再慢慢弄吧。

按照格式改,下载了文泉驿字体修改成功,其他字体就报有问题。

另外,用CUPS-PDF打印机lp 打印出来的PDF阅读是没问题的。但是把cups-pdf打印机的gs命令搞出来输出的pdf就不正常斜杠会挤到字里面去,感觉cups-pdf打印机在送到spool里面还做了一些事情,搞不懂咋回事。理论上就是用gs去写了个pdf。

后面有空把物理打印机的流程一步一步的dump出来看看。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门