Chr*_*ris 1 matlab postscript ghostscript
为什么Ghostscript pswrite在其输出中编码我的文本?考虑以下MWE:
%!PS-Adobe-3.0
%%Title: mwe.ps
%%Pages: 001
%%BoundingBox: 0 0 595 842
%%EndComments
%%Page: 1 1
%%PageBoundingBox: 0 0 595 842
0 0 1 setrgbcolor
0 0 595 842 rectfill
1 0 0 setrgbcolor
247 371 100 100 rectfill
/Times-Roman findfont
72 scalefont
setfont
newpath
247 300 moveto
(Chris) show
showpage
Run Code Online (Sandbox Code Playgroud)
将此MWE保存到文件并在GSview中查看将显示一个蓝色页面,其中包含红色方块和我的名字.现在使用以下命令行通过Ghostscript 9.06运行此文件:
"c:\Program Files\gs\gs9.06\bin\gswin64c.exe" ^
-dSAFER -dBATCH -dNOPAUSE ^
-sDEVICE=pswrite -sPAPERSIZE=a4 -r72 -sOutputFile=mwe_gs.ps mwe.ps
Run Code Online (Sandbox Code Playgroud)
请参阅下面的Ghostscript输出.有人可以解释一下这里发生了什么.虽然两个rectfill命令仍然很明显,但我的文本(Chris)已经编码,不再可以区分.
是否有替代的postscript设备可以保留我的文本?
<snip>
%%Page: 1 1
%%PageBoundingBox: 0 0 595 842
%%BeginPageSetup
GS_pswrite_2_0_1001 begin
595 842 /a4 setpagesize
/pagesave save store 197 dict begin
1 1 scale
%%EndPageSetup
gsave mark
255 0 r6
0 0 595 842 rf
255 0 r3
247 371 100 100 rf
Q q
0 0 595 0 0 842 ^ Y
255 0 r3
249 299 43 50 /5D
$C
,6CW56m1G"ZORNkWR*rB:!c2;9rlWTH="2^^[(q"h>cG<omZ2l^=qC[XbO:8_[?kji-8^"N#3q*
jhL~>
,
289 300 41 49 /0P
$C
4r?0p$m<EkK3,0>s8W-!s8W-!s8W,u]<1irI=*p=<t0>_@<)>Is8K6,aTi'$~>
,
325 300 30 33 /5I
$C
49S"pc4+Rhs8W-!s8W)oqdD:saRZq[4+k%):]~>
,
349 300 24 49 /0T
$C
4q%Ms%;PqCs8W-!s8W%1_qkn/K?*sYFSGd:5Q~>
,
377 299 23 34 /5M
$C
-TQR7$&O'!K+D:XribR9;$mr4#sqUi.T@,dX=Y&Llg+F`d^HC#%$"]~>
,
cleartomark end end pagesave restore
showpage
%%PageTrailer
%%Trailer
%%Pages: 1
%%EOF
Run Code Online (Sandbox Code Playgroud)
注意:这似乎是一个奇怪的活动,但我正在探索使用Ghostscript来"清理"来自Matlab应用程序的postscript输出的想法.
"文本"已转换为图像,而不是矢量路径.这是pswrite设备的严重限制,也是不推荐使用的原因之一,您应该使用ps2write设备.pswrite设备仍然包含的唯一原因是使用它的epswrite(这就是pswrite和epswrite输出看起来相同的原因).在某些时候会有一个eps2write设备和pswrite将被分箱.
ps2write输出默认是压缩的.如果需要未压缩的输出,请在命令行上使用-dCompressPages = false开关.
如果你想要的只是文本的位置,你可以考虑使用txtwrite设备.默认的实现创建了输入的纯文本表示,但是您可以输出伪造的XML,其中包括文本的原点等内容.