微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

后记:同时重新缩放和调整页面大小

如何解决后记:同时重新缩放和调整页面大小

对于我的一个绘图项目,我按照 How-to by Eric Weeks 重新缩放我的脚本后页面,以便一个单位匹配 1 厘米的长度。我的 PS 文件标题如下所示:

%!PS
matrix currentmatrix /originmat exch def
/umatrix {originmat matrix concatmatrix setmatrix} def
[28.3465 0 0 28.3465 0 0] umatrix

它可以完成这项工作,但我需要做的另一件事是将页面大小从 US Letter 调整为 A4。例如,根据 Postscript - document size 我应该 setpagedevice 类似:

<< /PageSize [595 842] >> setpagedevice

但是我无法让它工作。当我把它放在 matrix 重定义的前面时,它不起作用。当我把它放在 matrix 重新定义之后(甚至将新尺寸转换为厘米)它会重置矩阵比例并且页面仍然显示美国字母,只有图形被缩小了,因为坐标现在以pts为单位。

如何重新缩放页面并定义其大小?

编辑:我附上一个 MWE 来说明我的问题。这将绘制一个矩形,在页面周围绘制一个框,如果页面为 A4 大小,则留 10 毫米的边距。在信纸大小的介质上,它显示纸张更短但更宽。

%!PS
matrix currentmatrix /originmat exch def
/umatrix {originmat matrix concatmatrix setmatrix} def
[28.3465 0 0 28.3465 0 0] umatrix
0.020000 setlinewidth
1.0 1.0 moveto 1.0 27.7 lineto 20.0 27.7 lineto 20 1.0 lineto 1.0 1.0 lineto
stroke

解决方法

文件中是否有另一个调用 setpagedevice 来设置字母格式?最后执行的调用将赢得页面大小,并且在该调用之后以不同的方式设置矩阵,因为它会在设置页面设​​备时重置所有图形设置。

如果你找不到它被调用的地方,你可以在 userdict 中重新定义 setpagedevice 操作符。这可能会起作用,也可能不起作用,这取决于整个 PostScript 文件的构造方式。在重新定义中,您将创建一个新的 dict 操作数来设置页面设​​备,复制所有条目,但将任何 PageSize 替换为您想要的值。

这可能会:

userdict /setpagedevice {
    dup length dict begin
        {
            1 index /PageSize eq {
                pop [595 842]
            } if
            def
        } forall
    currentdict
    end
    setpagedevice
} bind put

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。