我正在使用C#开发一个项目。我有一个标签打印机,需要打印我发送的文档。打印机可以打印,但是我无法重写此处所示的自定义
纸张格式(荷兰语为“Papierformaat”)的以下值:https://gyazo.com/e350ed1e355b45b8cae24196d2b5869b。如果我创建的new PaperSize();
高度小于或等于300,它就能工作,但如果我尝试将其设置为更大的值,比如500,它就会被裁剪到300。为什么会发生这种情况?看起来我无法重写链接图片中的值(即300)。
public void Printing()
{
try
{
streamToPrint = new StreamReader(filePath);
try
{
PrinterSettings settings = new PrinterSettings();
printFont = new Font("Arial", 10);
PrintDocument pd = new PrintDocument();
PaperSize paperSize = new PaperSize("Test", 315, 300);
paperSize.RawKind = (int)PaperKind.Custom;
pd.DefaultPageSettings.PaperSize = paperSize;
pd.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
pd.PrinterSettings.DefaultPageSettings.PaperSize = paperSize;
pd.PrinterSettings.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
pd.PrintPage += (sender, args) => Console.Out.WriteLine("Printable Area for printer {0} = {1}", args.PageSettings.PrinterSettings.PrinterName, args.PageSettings.PrintableArea);
Console.Out.WriteLine("My paper size: " + pd.DefaultPageSettings.PaperSize);
pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
// Print the document.
pd.Print();
}
finally
{
streamToPrint.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
控制台中的输出如下所示:
My paper size: [PaperSize Test Kind=Custom Height=500 Width=315]
Printable Area for printer xxx = {X=0,Y=0,Width=400,Height=300}
编辑
想知道的人们,我正在处理一台带连续卷的标签打印机。因此,在技术上,我可以打印一个高度无限、宽度设定为80mm的文档。但是我似乎无法覆盖对话框设置中的自定义300
值。
我还想指出,还有另外两个程序实际上能够超过300的值并扩展可打印区域PrintableArea
。谁能帮忙呢?
编辑2
在Shakir Ahamed的评论后,我更进一步了:
gyazo.com/3298e480b77c5ba837b071b2ec4f7b8d 我得到了这个结果,比我以前使用你的最后一个解决方案获得的结果要多得多。但当我打印时,页面仍然在300处截断,就像以前一样,它总是在对话框中给出的值处截断(具有300和400值的框)
我觉得基本的打印选项不会起作用,因为我认为驱动程序会覆盖页面的值,并且只是将它们截断而不关心纸张尺寸PaperSizes
。我读到了一些关于DEVMODE
结构的内容,那么使用它可以做什么?我能否在此处覆盖打印机驱动程序设置并用连续卷打印无限长的打印品吗?
编辑3(已解决,2016年10月20日)
对于任何感兴趣的人, 我的打印机出现了一些其他问题,开始表现得很奇怪(例如不打印打印作业)。毕竟,我想安装驱动程序时出了问题。我删除了驱动程序并按照驱动程序CD上的说明重新安装了所有内容,现在我最初发布的代码似乎一开始就能正常工作。有点遗憾,因为我浪费了很多时间编写只有一个错误的驱动程序安装程序的代码。现在我能够超过300个单位进行打印,并且如果需要,我可以使用连续卷进行25厘米以上的打印。感谢所有与我一起思考解决这个问题的人!