使用 ghostscript 9.0 将大型横向 PDF 绘图打印到 a3 LaserJet4(纵向)

Posted

技术标签:

【中文标题】使用 ghostscript 9.0 将大型横向 PDF 绘图打印到 a3 LaserJet4(纵向)【英文标题】:print a big, landscape PDF drawing to a3 LaserJet4 (portrait) using ghostscript 9.0 【发布时间】:2012-11-26 11:03:05 【问题描述】:

我们想使用 ghostscript 将大图纸(最多 A0 甚至更长)打印到 A3 打印机:

gs -o - -sDEVICE=pdfwrite -r1200x1200 -sPAPERSIZE=a3 -f
/S/tmp/SamplePDFnewStamp.pdf | gs -o resized.pcl -sDEVICE=ljet4
-g7012x4961 -dPDFFitPage -

我在 A3 纵向纸上获得 A4 横向。我也尝试过旋转:

gs -sOutputFile="-" -sDEVICE=pdfwrite -r1200x1200 -sPAPERSIZE=a3 -d
-dBATCH -dNOPAUSE -dAutoRotatePages=/None -dPDFFitPage -c "<</Orientation 1>> setpagedevice 90 rotate 0 -595 translate" -f
/S/tmp/SamplePDFnewStamp.pdf -c quit | gs -o resized.pcl
-sDEVICE=ljet4 -g7012x4961 -dPDFFitPage -

得到相同的结果。

【问题讨论】:

【参考方案1】:

如果不查看 PDF 文件就不可能发表评论,但是您在其中使用的许多命令行选项在您拥有的组合中没有意义。

我要做的第一件事是停止像这样的命令,至少在调查问题时是这样。分 2 个阶段进行,这将允许您(和其他人)查看中间 PDF 文件。

其次,我不相信你能做你想做的事。看起来您正试图通过第二次调用通过管道传输第一次调用 gs 生成的 PDF。我没有看到任何可行的方法,pdfwrite 设备需要在文件周围寻找才能创建外部参照表,它不能使用标准输出,至少在当前版本中是这样。您使用的是什么版本的 Ghostscript?

我也看不到这一点,为什么要获取一个 PDF,从中制作一个新的 PDF,然后再渲染第二个 PDF?为什么不直接渲染原件?

您指定的媒体大小开关都不会产生任何影响,因为您没有告诉 Ghostscript 媒体大小是固定的(使用 -dFIXEDMEDIA)。因此,PDF 解释器会将媒体大小设置为与 PDF 文件中的 MediaBox 相同。类似的问题适用于发送 PostScript 并期望它在呈现 PDF 文件时改变 Ghostscript 的行为。

为 pdfwrite 设置分辨率不是一个好主意,通常不会有任何效果。即使它确实有效果,您也可能不想将其设置为设备的分辨率(并且 -g 值似乎表明这也不是 1200 dpi 设备)。分辨率的唯一影响是当对象必须渲染为图像时,因为无法在 PDF 中表示。您不想以打印机分辨率创建图像,通常分辨率的四分之一到二分之一就足够了。

如果您愿意分享一个示例 PDF 文件,我或许可以告诉您如何解决您的方向问题。在去 PCL 之前,您需要解释为什么要通过 pdfwrite 运行它,但我看不出有任何原因。

这个:

gs -sDEVICE=pdfwrite -sOutputFile=\temp\out.pdf -dDEVICEHEIGHTPOINTS=2386.08 -dDEVICEWIDTHPOINTS=1685.7600 -dFIXEDMEDIA -dPDFFitPage SamplePDFnewStamp.pdf

将获取您的原始 PDF 文件并生成一个旋转 90 度的 PDF 文件。如果我这样做:

gs -sDEVICE=ljet4 -sOutputFile=\temp\out.pcl \temp\out.pdf

我得到一个 PCL 文件,当 GhostPDL 以适当的媒体大小处理该文件时,它似乎可以满足您的需求。

由于缺少可打印的实际设备,我没有尝试过,但我希望:

gs -sDEVICE=ljet4 -sOutputFile=\temp\out.pcl -dDEVICEHEIGHTPOINTS=2386.08 -dDEVICEWIDTHPOINTS=1685.7600 -dFIXEDMEDIA -dPDFFitPage SamplePDFnewStamp.pdf

将在一个步骤中生成相同的文件。

【讨论】:

我刚刚找到了一种方法来转换我的PDF (DIN A1) to PCL (DIN A3) 抱歉,我无法编辑上面的评论。 @KenS:我刚刚找到了一种方法来转换我的PDF (DIN A1) to PCL (DIN A3) gs -q -o - -sDEVICE=ljet4 -g9921x7015 -dPDFFitPage \ -f /S/tmp/rot_a3.ps -f /S/tmp/SamplePDFnewStamp.pdf \ | sed "s/l0o/l2o/" | sed "s/l-180u/l140u/" > testA3.pcl rot_a3.ps 用于旋转也在下载中 我可以直接在 Ghostscript 中替换 sed hack 吗? 我已经对我的答案添加了一个编辑,因为我无法格式化 cmets。 我在@KenS 的回答中添加了一张结果图片,因为我无法在评论中添加图片。 这是 PDF 的图片,还是生成的 PCL,还是其他什么?【参考方案2】:

我找到了解决办法:


gs -q -sDEVICE=ljet4 -sOutputFile=out.pcl -dFIXEDMEDIA -dPDFFitPage -sPAPERSIZE=a3 \-c "&lt;&lt;/Install -1 -1 scale -843 -1192 translate&gt;&gt; setpagedevice" -f SamplePDFnewStamp.pdf -c 退出

【讨论】:

是的,我会推荐 PDFFitPage。它会自动旋转并 (oops) 使用 -dFIXEDMEDIA 时页面大小居中。

以上是关于使用 ghostscript 9.0 将大型横向 PDF 绘图打印到 a3 LaserJet4(纵向)的主要内容,如果未能解决你的问题,请参考以下文章

Ghostscript将pdf转换为方向错误的pcl

让 Ghostscript 以不同于横向页面的方式处理纵向页面?

Ghostscript -- 将 PS 转换为 PNG、旋转和缩放

使用 Ghostscript 调整 PDF 大小

使用 Ghostscript 调整多页混合格式 PDF 的大小?

奇怪的问题,ghostscript 和 pdf 文件