[原]postscript中插入eps

作者: 锦城牛仔 | 来源:发表于2019-08-14 10:00 被阅读6次

由于某些需求,要实现在postscript文档中插入eps二维码。经过一番搜索阅读试验,终于成功的在windows和linux上都实现了。整理来给大家分享。


明确一下需求:

有一个已经生成好的postscript格式文件(.ps文件),要在这个postscript文件中插入一个包含特定信息的二维码(eps格式)。

步骤如下:

1. 生成好的postscript文件(test101.ps)


test101.ps包括一个像素化的直升飞机图片,文件内容如下:

%!PS-Adobe-3.0

/Helicopter

<dd ff 00 ff 54 1f 80 03 fb f9 00 1e> def

150 400 translate

144 144 scale

16 6 1 [6 0 0 6 0 0] {Helicopter} image

showpage

test101.ps绘制的图片

2. 用zint生成eps二维码

zint --notext -b 58 -o epsfile.eps -d "testqrcode"

-d "testqrcode" 表示testqrcode是二维码包含的字符串。

-o epsfile.eps 表示生成的二维码文件名为epsfile.eps。

-b 58 表示生成二维码

zint 生成的二维码

生成的epsfile.eps内容如下:

%!PS-Adobe-3.0 EPSF-3.0

%%Creator: Zint 2.4.2

%%Title: Zint Generated Symbol

%%Pages: 0

%%BoundingBox: 0 0 21 21

%%EndComments

/TL { setlinewidth moveto lineto stroke } bind def

/TC { moveto 0 360 arc 360 0 arcn fill } bind def

/TH { 0 setlinewidth moveto lineto lineto lineto lineto lineto closepath fill } bind def

/TB { 2 copy } bind def

/TR { newpath 4 1 roll exch moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath fill } bind def

/TE { pop pop } bind def

newpath

0.00 0.00 0.00 setrgbcolor

1.00 1.00 1.00 setrgbcolor

21.00 0.00 TB 0.00 21.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 0.00 TB 0.00 7.00 TR

TB 8.00 1.00 TR

TB 10.00 2.00 TR

TB 15.00 1.00 TR

TB 17.00 1.00 TR

TB 19.00 1.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 1.00 TB 0.00 1.00 TR

TB 6.00 1.00 TR

TB 8.00 1.00 TR

TB 10.00 1.00 TR

TB 17.00 2.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 2.00 TB 0.00 1.00 TR

TB 2.00 3.00 TR

TB 6.00 1.00 TR

TB 8.00 4.00 TR

TB 13.00 1.00 TR

TB 18.00 1.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 3.00 TB 0.00 1.00 TR

TB 2.00 3.00 TR

TB 6.00 1.00 TR

TB 8.00 2.00 TR

TB 12.00 2.00 TR

TB 16.00 3.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 4.00 TB 0.00 1.00 TR

TB 2.00 3.00 TR

TB 6.00 1.00 TR

TB 8.00 2.00 TR

TB 12.00 1.00 TR

TB 14.00 2.00 TR

TB 17.00 1.00 TR

TB 20.00 1.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 5.00 TB 0.00 1.00 TR

TB 6.00 1.00 TR

TB 10.00 4.00 TR

TB 15.00 4.00 TR

TB 20.00 1.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 6.00 TB 0.00 7.00 TR

TB 8.00 2.00 TR

TB 12.00 1.00 TR

TB 17.00 1.00 TR

TB 19.00 1.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 7.00 TB 8.00 1.00 TR

TB 10.00 4.00 TR

TB 15.00 2.00 TR

TB 18.00 3.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 8.00 TB 1.00 1.00 TR

TB 3.00 1.00 TR

TB 6.00 6.00 TR

TB 14.00 2.00 TR

TB 17.00 1.00 TR

TB 19.00 1.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 9.00 TB 2.00 1.00 TR

TB 4.00 2.00 TR

TB 8.00 1.00 TR

TB 13.00 1.00 TR

TB 16.00 3.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 10.00 TB 0.00 1.00 TR

TB 2.00 5.00 TR

TB 8.00 1.00 TR

TB 10.00 2.00 TR

TB 13.00 2.00 TR

TB 17.00 3.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 11.00 TB 0.00 1.00 TR

TB 2.00 1.00 TR

TB 5.00 1.00 TR

TB 7.00 1.00 TR

TB 10.00 1.00 TR

TB 12.00 7.00 TR

TB 20.00 1.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 12.00 TB 0.00 5.00 TR

TB 6.00 4.00 TR

TB 12.00 2.00 TR

TB 15.00 1.00 TR

TB 17.00 1.00 TR

TB 19.00 1.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 13.00 TB 10.00 3.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 14.00 TB 0.00 7.00 TR

TB 8.00 1.00 TR

TB 10.00 1.00 TR

TB 12.00 1.00 TR

TB 14.00 7.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 15.00 TB 0.00 1.00 TR

TB 6.00 1.00 TR

TB 8.00 3.00 TR

TB 12.00 1.00 TR

TB 14.00 1.00 TR

TB 20.00 1.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 16.00 TB 0.00 1.00 TR

TB 2.00 3.00 TR

TB 6.00 1.00 TR

TB 10.00 3.00 TR

TB 14.00 1.00 TR

TB 16.00 3.00 TR

TB 20.00 1.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 17.00 TB 0.00 1.00 TR

TB 2.00 3.00 TR

TB 6.00 1.00 TR

TB 8.00 1.00 TR

TB 11.00 1.00 TR

TB 14.00 1.00 TR

TB 16.00 3.00 TR

TB 20.00 1.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 18.00 TB 0.00 1.00 TR

TB 2.00 3.00 TR

TB 6.00 1.00 TR

TB 9.00 1.00 TR

TB 14.00 1.00 TR

TB 16.00 3.00 TR

TB 20.00 1.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 19.00 TB 0.00 1.00 TR

TB 6.00 1.00 TR

TB 8.00 1.00 TR

TB 11.00 1.00 TR

TB 14.00 1.00 TR

TB 20.00 1.00 TR

TE

0.00 0.00 0.00 setrgbcolor

1.00 20.00 TB 0.00 7.00 TR

TB 9.00 1.00 TR

TB 12.00 1.00 TR

TB 14.00 7.00 TR 

showpage   

3. 修改test101.ps插入epsfile.eps文件

核心代码是:

save /showpage {} bind def (epsfile.eps) run restore

阅读了参考文档之后,在插入eps前后要做状态保存和恢复。

%!PS-Adobe-3.0

/BeginEPSF { %def

    /b4_Inc_state save def                  %Save state for cleanup

    /dict_count countdictstack def          %Count objects on dict stack

    /op_count count 1 sub def              %Count objects on operand stack

    userdict begin                          %Push userdict on dict stack

    /showpage { } def                      %Redefine showpage, { } = null proc

    0 setgray 0 setlinecap                  % Prepare graphics state

    1 setlinewidth 0 setlinejoin

    10 setmiterlimit [ ] 0 setdash newpath

    /languangelevel where                  %If level not equal to 1 then

    {pop languangelevel                    %set strokeadjust and

    1 ne                                    %overprint to their defaults

      {false setstrokeadjust false setoverprint

      } if

    } if

} bind def

/EndEPSF { %def

    count op_count sub {pop} repeat        %Clean up stacks

    countdictstack dict_count sub{end} repeat

    b4_Inc_state restore

} bind def

BeginEPSF

20 20 translate

10 10 scale

%-10 -10 translate

%%BeginDocument: epsfile.eps

save /showpage { } bind def (epsfile.eps) run restore

%%EndDocument

EndEPSF

/Helicopter

<dd ff 00 ff 54 1f 80 03 fb f9 00 1e> def

150 400 translate

144 144 scale

16 6 1 [6 0 0 6 0 0] {Helicopter} image

showpage

4. 用ps2pdf生成pdf文件:

ps2pdf -I. G:\teemmp\test101\test101.ps

-I参数指定ghostscript的搜索路径(-I.)

注意,将test101.ps和epsfile.eps放在同一个目录下。这一步要加上-I参数,并且指定当前路径.,否则会出现ghostscript不能找到epsfile.eps文件的报错

插入二维码之后的结果

相关文章

  • [原]postscript中插入eps

    由于某些需求,要实现在postscript文档中插入eps二维码。经过一番搜索阅读试验,终于成功的在windows...

  • Word插入矢量图问题eps to pdf

    eps文件转为pdf(无损矢量) 需要用到 方案是eps转emf(插入word效果最好) epstopdf eps...

  • latex插入eps图片

    1. 创建eps图片 从png图片转换: texlive中自带了一个命令: bmeps 从python创建, 调用...

  • LTE QoS

    1 EPS承载 LTE中EPS承载分为两类: 默认EPS承载 专用EPS承载 EPS承载就是一个连接UE和P-GW...

  • Core Graphics 之 PostScript Conve

    PostScript Conversion 预览应用程序自动将PostScript文件转换为PDF。Quartz ...

  • PostScript字体(Type 1)

    按 PostScript 页面描述语言 (PDL) 规则定义的字体,并且只能在 PostScript 兼容的打印机...

  • java 对象数组去重

    java对象数组去重; 将原数组插入到新数组的时候,将插入的对象和新数组中的已插入对象进行比较,若不相同,则插入到...

  • postscript(转载)

    介绍 POSTSCRIPT语言是打印机页面描述的一种程序设计语言。他拥有着广泛的图形操作,并且可以以任意方式,包含...

  • CFA I级 财报分析笔记-6

    EPS Earnings per Share(每股净收入) Basic EPS Basic EPS = NI -...

  • Acknowledgement and Reflection

    The other day Ann recommended me a postscript of a doctor...

网友评论

    本文标题:[原]postscript中插入eps

    本文链接:https://www.haomeiwen.com/subject/iigbjctx.html