Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在PJL中设置页面缩放_C#_Printing_Pjl - Fatal编程技术网

C# 在PJL中设置页面缩放

C# 在PJL中设置页面缩放,c#,printing,pjl,C#,Printing,Pjl,我必须编写一个功能,它接收PDF文档并使用一些PJL命令将其发送到打印机。到目前为止,一切顺利,我获取文档,将其转换为Postscript,使用所需命令将Postscript文件发送到打印机,然后打印机打印文档 现在来看实际问题:我们的软件需要打印的大多数文档都是发票,因此它们都是经过仔细制作的,因此每个元素都被精确定位,如果偏离毫米,打印的文档将无效。当直接通过Adobe或任何pdf查看软件打印文档时,我可以选择实际大小选项,一切都很好。虽然如果我通过C和PJL打印文档,文档的页边距会因打印的

我必须编写一个功能,它接收PDF文档并使用一些PJL命令将其发送到打印机。到目前为止,一切顺利,我获取文档,将其转换为Postscript,使用所需命令将Postscript文件发送到打印机,然后打印机打印文档

现在来看实际问题:我们的软件需要打印的大多数文档都是发票,因此它们都是经过仔细制作的,因此每个元素都被精确定位,如果偏离毫米,打印的文档将无效。当直接通过Adobe或任何pdf查看软件打印文档时,我可以选择实际大小选项,一切都很好。虽然如果我通过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'

查看PJL参考手册第12版,这是我见过的最新版本,根本没有办法缩放PJL中的页面内容

即使有,我也会感到惊讶,如果它被转移到PostScript而不是PCL解释器环境中,因为PostScript有一个丰富的功能集来处理这种设置。所以基本上你需要把后记写对

现在,当您获取一个PDF文件并从中生成PostScript时,几乎可以肯定您正在生成通用PostScript;它的设备是中性的,因此它不考虑物理设备的各个方面

最明显的是,这将是硬件边距和不可打印区域。由于纸张处理的原因,许多设备对打印介质的哪些部分有限制。当然,不同的打印机之间会有不同

当然,当您从操作系统打印时,打印机设备驱动程序知道介质的可打印区域是什么,因为它是相关打印机的特定驱动程序,因此它可以安排将内容缩放到实际介质


Ghostscript当然可以使用ps2write设备生成PostScript,该设备针对给定的打印机进行适当的缩放和翻译,前提是您知道该打印机的特性。事实上,如果打印机足够复杂,PostScript程序可能会询问打印机以检索其中一些特征,如框、页偏移量、边距、ImageShift,然后可以编写PostScript程序来动态调整页面内容的大小,基于这些值,ps2write生成的PostScript不会这样做……

您如何将其转换为postscrpt?我使用的是XpdfPS dllMy gut,我的直觉是您想在PostScript中设置这些类型的设置,我不确定PJL是否会满足您的需要。这只是从几年前的记忆中得知的7知道在两台不同打印机上打印的同一postscript文件有不同的页边距,即一台打印机上的页边距比通过Adobe打印的更高,更左,而另一台打印机上的页边距更低,更右?我将看看在转换为PSAlso时我有哪些选项,让ghostscript尝试一下将pdf转换为ps,它有很多参数可以调整,它可能至少有助于确定ps设置是否可行。但是是的,PJL是一件有趣的事情。并非所有打印机都响应所有HP命令,甚至可能有自己的打印机。再一次,这是出于记忆,我在这方面没有权威,谢谢。因此,您的意思是,ps2write无法将pdf设置为实际大小,只能根据所使用的特定打印机调整文档/postscript?您可能会根据postscript打印机及其在页面设备字典中提供的信息,编写一个PostScript prolog程序,该程序可以根据打印机返回的值缩放内容。但是,可能没有任何意义,因为许多打印机不返回有意义的值。因此,在这种情况下,您需要从PDF中创建PostScript,其中包括页边距/不可打印区域。毕竟,这就是从操作系统打印时发生的情况。