GhostScript(PostScript):从A *缩小到A4时打印机切断边框

时间:2017-01-16 07:43:15

标签: c ghostscript postscript

我正在使用“GS Wrapper”(使用9.20 SDK)供外部应用程序使用。在那里我缩小例如A0表到A1,A2和A3,它工作正常。 (PDF到PS,然后打印)

问题:当我将任何输入格式缩小到A4时,打印机会切断内容的边框(这些是带有黑色边框的技术图纸,距离纸张边缘各5mm)。

  • 是否有机会再次缩小A4(至A4)约95%并使图像居中? (这应该会产生一个较小的基本图像,比如说黑色边框距离纸张边框约10mm左右)

我使用以下参数进行缩放:

GhostArg[0] = "-dNOPAUSE";
GhostArg[1] = "-dBATCH";
GhostArg[2] = "-dSAFER";
GhostArg[3] = "-dNOPAUSE";
GhostArg[4] = "-g2480x3508";
GhostArg[5] = "-dPDFFitPage";
GhostArg[6] = "-r300x300";
GhostArg[7] = "-sDEVICE=ps2write";
GhostArg[8] = Output;
GhostArg[9] = Input;

解决方案更新:

我设法通过在Arg [8]和Arg [9]之间插入这三行来解决这个问题:

GhostArg[9] = "-c";
GhostArg[10] = "<< /BeginPage { 0.99 0.99 scale 10 10 translate } >> setpagedevice";
GhostArg[11] = "-f"; 

感谢KenS的/ BeginPage提示。

1 个答案:

答案 0 :(得分:1)

听起来您的打印机有一个不可打印的区域。这种情况并不罕见,纸张处理需要在打印时保持纸张,这可能导致介质的某些区域无法打印。

如果您的内容到达媒体边缘,打印机可能无法在那里打印,导致内容被裁剪。

完全可以让ps2write将媒体内容降低到较小的尺寸,但是你不能(自动)缩小它并移动内容位置,因为内容适合媒体大小。

但是,FitPage机制不会查看内容,只查看媒体大小请求。因此,如果输入请求A3和所选媒体是A4(并且是固定的),则应用比例因子以将内容缩放到所需的媒体大小(并且忽略对A3的媒体请求)。

所以你可以做的就是保留你现有的代码,但是添加一个BeginPage或Install程序,它使用scale操作符来进一步减小页面上标记的大小,并使用translate操作符移动略微起源,以便最终内容居中。

像(仅限示例,未经测试):

<<
  /BeginPage {
    0.95 0.95 scale
    16 20 translate
  }
>> setpagedevice

顺便说一句,您是否意识到Ghostscript是根据AGPL许可的?

此外,我强烈建议您不要使用-g和-r开关,而只需使用-dDEVICEWIDTHPOINTS和-dDEVICEHEIGHTPOINTS来改变介质尺寸。

-g开关以像素为单位工作,但高级输出设备(例如pdfwrite和ps2write)不发射像素,它们会写入高级矢量对象。但是,由于PostScript和PDF图形模型的不同,某些元素需要渲染到图像中,并以这种方式封装在PostScript输出中。通过将分辨率设置为300,您将修复这些元素(例如,包含透明度的页面)的分辨率。我建议您不要这样做,除非您在严格控制的工作流程中工作并知道最终输出的分辨率。

通过使用DEVICEHEIGHTPOINTS和DEVICEWIDTHPOINTS开关,您可以控制介质尺寸而无需参考分辨率。请注意,在PostScript(和PDF)中,1点= 1/72英寸。