【问题标题】:Trouble generating Tabloid (11x17) pdf file from Postscript从 Postscript 生成 Tabloid (11x17) pdf 文件时遇到问题
【发布时间】:2014-07-01 14:59:29
【问题描述】:

我有一个打算打印在 11x17 纸上的 Postscript 文件。但在 Mac OSX 下,预览程序坚持将其裁剪为字母大小。如果我真的将它打印到 11x17 纸上,它会被裁剪为字母大小,然后在 11x17 纸上居中。

(请注意,预览程序始终转换为 pdf 作为中间步骤)。

很明显,生成的 pdf 文件是一个字母大小的 pdf 文件。我猜我的 Postscript 文件缺少某种语法糖来提示 pdf 转换器了解纸张大小,但我不知所措。我尝试将%%DocumentMedia%%BeginPaperSize cmets 插入到文档中的正确位置,但没有效果。

我还尝试将文档移至 Linux 系统,运行 ps2pdf,然后将生成的 pdf 文件移回 Mac。没有效果。而且 ps2pdf 以前从未对我做错,所以这就是让我认为问题出在我的 Postscript 而不是 Apple 的 pdf 转换器的原因。

%!PS-Adobe-3.0
%%BoundingBox: 0 0 792 1224
%%Creator: template plugin by Edward Falk
%%DocumentMedia: Tabloid 792 1224 0 () ()
%%Pages: 1
%%PageOrder: Ascend
%%DocumentData: Clean7Bit
%%EndComments
%%BeginDefaults
%%PageMedia: Tabloid
%%EndDefaults
%%BeginProlog

/drawmarker {       % x y --
  gsave
  translate
  newpath
  0 -0.5 moveto 0 0.5 lineto
  -0.5 0 moveto 0.5 0 lineto
  0 0 .25 0 360 arc
  stroke
  grestore
} bind def

/drawmodel {
  newpath
  86.250 35.750 moveto
  80.536 45.500 lineto
  86.250 35.750 moveto
  103.000 35.750 lineto
  80.536 45.500 moveto
  103.000 45.500 lineto
  103.000 35.750 lineto
  stroke
} bind def

%%EndProlog

%%Page: "1" 1

gsave
72 72 scale
-79.54 -34.75 translate
1 72 div setlinewidth
drawmodel
80.54 35.75 drawmarker
89.54 35.75 drawmarker
80.54 50.75 drawmarker
89.54 50.75 drawmarker
grestore
showpage
%%EndPage: "1" 1

%%EOF

【问题讨论】:

  • 大量的实验和阅读表明我犯的一个错误是在标题中有空行。删除那些有帮助的(gv 现在做正确的事情),但我仍然不在那里。

标签: postscript


【解决方案1】:

您的 PostScript 不要求页面大小。以 '%' 开头的行是 PostScript 中的 cmets,没有任何效果(一些 PostScript 使用者会解析 DSC cmets,这会混淆问题...)

如果您需要 11x17 媒体,则需要提出要求:

<</PageSize [792 1224]>> setpagedevice

没有默认媒体,不管是什么。 PostScript 中允许使用空行并且没有任何效果,一个 DSC 解析器在出现空行时表现不同是一个损坏的解析器,但据我所知 gv 真的很老了。

【讨论】:

  • 确实如此。我强烈支持 Mac 的 ps => pdf 转换器实际上是真正的 Ghostscript,因为相同的更改修复了 Linux 上的 ps2pdf 和 Mac 上的 Preview
  • 它的标准 PostScript,如果您不发出媒体请求,您将获得默认值,所以我希望这可以“修复”任何 PostScript 解释器。抱歉代码没有正确显示,我已经回去修复了。
  • 附注感谢您提醒我可以使用 [] 定义数组。自从我上次编写后记以来已经很久了。 &lt;&lt; &gt;&gt; 是定义字典的方式吗?
  • 是的,事实上
【解决方案2】:

好吧,我通过对其他文件进行逆向工程来解决这个问题(pdftops 是你的朋友)。在此处记录我的解决方案,以供将来可能有相同问题的其他人参考。

缺少的元素与 DSC 无关,它实际上是 setdevicepage 运算符。添加此代码解决了我的问题:

%%BeginSetup
2 dict begin
/PageSize 792 1224 2 array astore def
/ImagingBBox null def
currentdict end setpagedevice
%%EndSetup

当然,如果要正确操作,则需要测试 setpagedevice 函数是否存在,因为它是在语言级别 2 中添加的。

更新:使用语言级别 2 功能进行简化:

%%BeginSetup
% set up for pdf
<< /PageSize [792 1224] /ImagingBBox null >> setpagedevice
%%EndSetup

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2015-07-19
    相关资源
    最近更新 更多