如何将非封装PostScript页面嵌入其他文档?兼询psnup工作机制
PSNUP工作原理与PostScript页面嵌入实现疑问
我想搞懂psnup的工作逻辑。现在我有一份符合规范的PostScript文档,能扫描提取它的prolog、trailer和单页内容。我需要把指定页面嵌入到另一份文档的输出里,还要支持缩放和平移。之前试过遵循Encapsulated PostScript(EPS)规范,但它要求源文档满足特定规则,不太适用。
我做了如下尝试:
先在prolog里定义了以下函数:
/BeginEPSF { /b4_inc_state save def % 保存当前状态用于后续恢复 /dict_count countdictstack def % 统计字典栈上的对象数量 /op_count count 1 sub def % 统计操作数栈上的对象数量 userdict begin % 将userdict压入字典栈 /showpage { } def % 重定义showpage为空操作 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath /languagelevel where {pop languagelevel 1 ne {false setstrokeadjust false setoverprint } if } if } bind def /EndEPSF { count op_count sub {pop} repeat % 清理操作数栈 countdictstack dict_count sub {end} repeat b4_inc_state restore } bind def
之后在输出文档的某一页中执行了以下操作:
%%Page: "1" 1 BeginEPSF gsave 0.00000 49.76471 translate 0.64706 0.64706 scale (复制源文档中的单页内容,仅移除开头的%%Page注释) grestore EndEPSF showpage
但嵌入的页面没按预期渲染,看起来嵌入页面里的某些内容覆盖了我定义的BeginEPSF函数。我对比后确认,我的代码和psnup都没修改页面内容(只删了%%Page注释),问题出在包装代码上。
我不想花几天时间啃psnup的源码,想知道有没有类似EPS规范的文档,能指导这种PostScript页面嵌入操作的实现方法。
内容的提问来源于stack exchange,提问作者Edward Falk
相关产品推荐
相关产品推荐

