我必须编写一个带有PDF文档的功能,并将其发送到带有一些PJL命令的打印机。到目前为止,我把文档转换为Postscript,使用所需的命令将postscript文件发送到打印机,然后打印机打印文档。
现在解决实际问题:我们软件需要打印的大部分文档都是发票,因此它们都经过精心制作,因此每个元素都是精确定位的,如果它是&#39 ;以毫米为单位的打印文件无效。当通过Adobe或任何pdf查看软件直接打印文档时,我可以选择actual size
选项,一切都很好。虽然如果我通过C#和PJL打印它,文档的边距会有所不同,具体取决于打印的打印机。到目前为止,我们使用了pdfprinting.net,可以通过pdfPrint.Scale = PdfPrint.ScaleTypes.None
选择该选项,但是如何通过PJL进行选择?
// This are all the commands that I've tried, none of which achieved what I need
var parameters = new Dictionary<string, string>
{
{ "SET USERNAME",userName},
//{"SET PAPER", "A4" },
//{"SET MEDIATYPE", "PAPER" },
//{"SET TOPMARGIN", "TM6MM" },
//{"SET PRINTAREA", "INKEDAREA" },
{"SET MARGINS", "SMALLER" },
//{ "ENTER LANGUAGE","PDF"},
{ "ENTER LANGUAGE","POSTSCRIPT"},
};
var documentText = "\x1B%-12345X@PJL JOB NAME=" + jobName + " DISPLAY=" + jobDisplay;
foreach (var parameter in parameters)
{
documentText += "\r\n@PJL " + parameter.Key + "=" + parameter.Value;
}
documentText += "\r\n";
documentText += pdfString;
documentText += "\r\n\x0D\x0A\x1B%-12345X\r\n";
RawPrint(printerAddress, documentText, documentName);
// RawPrint() calls the printer methods found in 'winspool.drv', imported via 'DllImport'
答案 0 :(得分:1)
检查PJL参考手册(第12版,这是我见过的最新版本),根本无法在PJL中缩放页面内容。
即使有,我也会感到惊讶,如果它延续到PostScript(而不是PCL)解释器环境,因为PostScript具有丰富的功能集来处理这种设置。所以基本上你需要让PostScript正确。
现在,当您从中获取PDF文件并生成PostScript时,您几乎肯定会生成通用的PostScript;它的设备中立,因此它没有考虑物理设备的各个方面。
最明显的是,这将是硬件边距和不可打印区域。由于纸张处理,许多设备对可以在其上打印的介质部分具有限制。当然,不同的打印机之间会有所不同。
当然,当您从操作系统进行打印时,打印机设备驱动程序知道介质的可打印区域(因为它是相关打印机的特定驱动程序),所以它可以安排内容缩放到实际媒体。
Ghostscript当然可以生成PostScript(使用ps2write设备),只要您知道该打印机的特性,就可以为给定的打印机进行适当的缩放和翻译。事实上,如果打印机足够复杂,PostScript程序可能会询问打印机以检索其中的一些特性(ImagingBBox,PageOffset,Margins,ImageShift),然后可以编写PostScript程序来动态调整内容的大小。页面,基于这些值(ps2write生成的PostScript 不执行此操作...)。