1

我们想使用 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 -

得到相同的结果。

4

2 回答 2

1

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

我要做的第一件事就是停止像这样的命令,至少在调查问题时是这样。分两个阶段进行,这将允许您(和其他人)查看中间 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

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

这是结果

于 2012-11-27T08:31:49.360 回答
0

我找到了一个解决方案:


gs -q -sDEVICE=ljet4 -sOutputFile=out.pcl -dFIXEDMEDIA -dPDFFitPage -sPAPERSIZE=a3 \
-c " <</Install {-1 -1 scale -843 -1192 translate}>>setpagedevice"
-f SamplePDFnewStamp.pdf -c 退出

于 2012-11-29T16:45:42.950 回答