首页 > 解决方案 > 发出绘画/显示操作符后设置页面大小

问题描述

我正在用 PostScript 开发一个打印机模拟器(部分)。我要模拟的命令系统是为卷纸热敏打印机设计的,主要用于打印销售点收据。我宁愿以与真实打印机相同的顺序执行操作,这意味着我的程序在遇到“剪切”命令之前不知道页面大小。我希望该程序可以使用可变纸张尺寸的 CUPS 打印机¹

我可以在发出绘画/显示命令后更改页面高度而不会使文档的填充部分消失吗?

我尝试在文档末尾修改页面设备字典,但是如果我更改 PageSize 数组,文档上的所有内容都会消失。

例如,如果我运行以下程序:

<< /PageSize [ 100 30 ] >> setpagedevice

0 0 moveto
(Text) show
showpage

我得到输出:

在此处输入图像描述

但是当我在 showpage 命令之前修改代码以调整页面大小时:

<< /PageSize [ 100 30 ] >> setpagedevice

0 0 moveto
(Text) show

<< /PageSize [ 100 100 ] >> setpagedevice

showpage

我只得到一个空白图像:

在此处输入图像描述

我知道我可以推迟绘制/显示运算符的执行,所以我的程序在绘制之前计算文档大小,并且只在遇到剪切命令时执行操作。我可以自己实现,目前我不需要这种解决方案的帮助。我很想知道,是否有一种更简单的解决方案可以将已绘制的文档切割成计算出的页面大小。

标签: ghostscriptpostscriptcups

解决方案


您不能使用标记操作然后在 PostScript 中选择页面尺寸。在 PostScript 中设置介质大小会执行一个隐式擦除页面,它会清除页面上的所有标记。

请参阅第 3 版 PLRM 的第 408 页上的注释(第 6.1.1 节 PageDevice Dictionary):

注意:setpagedevice 是一个面向页面的操作符,用于控制一个页面描述的一个或多个页面的输出处理。任何对 setpagedevice 的调用都会隐式调用 erasepage 和 initgraphics,因此必须在受影响页面的描述之前。


推荐阅读