如何在C#中覆盖自定义Papersize

我正在用C#开展一个项目。 我有一个labelprinter,需要打印我发送的文件。 但是,打印机打印时,我无法覆盖以下所示的Custom纸张格式(荷兰语的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的文档。 但我似乎无法从对话框设置中覆盖Custom 300值。

我还想指出,还有2个其他程序实际上可以超过300值并扩展PrintableArea 。 谁可以帮忙?

编辑2

在Shakir Ahamed的评论之后我进一步说:

gyazo.com/3298e480b77c5ba837b071b2ec4f7b8d我得到了这个,这比我以前使用你的上一个解决方案要多得多。 但是当我打印它时,页面再次像过去一样切断300,它总是切断对话框中给出的值(具有300和400值的框)

我觉得它不适用于基本的打印选项,因为我认为驱动程序会覆盖页面值,只是在不关心PaperSizes情况下将其剪掉。 我读了一些有关DEVMODE结构的内容,有什么可能的呢? 我可以在这里覆盖打印机驱动程序设置并使用连续卷打印无限长的打印件吗?

编辑3 (已解决,2016年10月20日)

对于任何感兴趣的人,我的打印机出现了一些其他问题,并开始表现得很奇怪(比如不打印打印作业)。 毕竟我猜安装驱动程序出了问题。 我删除了驱动程序,并根据驱动程序CD重新安装了所有内容,现在我最初发布的代码似乎在第一时间正常工作。 有点糟糕,因为我浪费了很多时间编码只是一个糟糕的驱动程序安装。 现在我可以在300个单位上打印,如果我愿意的话,我可以用连续卷打印超过25厘米。 感谢所有与我一起思考解决这个问题的人!

在设置自定义设置之前,请尝试使用此设置而不是您的设置,将PrinterSettings的实例分配给PrintDocument的实例

 PrinterSettings ps = new PrinterSettings(); PrintDocument printDoc = new PrintDocument(); printDoc.PrinterSettings = ps; printDoc.DefaultPageSettings.PaperSize = new PaperSize("Custom", 315, 300); 

或尝试这种方式,我希望这将有效

 PrintDocument pd = new PrintDocument(); pd.DefaultPageSettings.PaperSize = new PaperSize("Custom", 315, 300); pd.DefaultPageSettings.PaperSize.RawKind = 119; pd.PrinterSettings.DefaultPageSettings.PaperSize.RawKind = 119; pd.DefaultPageSettings.Landscape = false; 

如果您想在自定义尺寸的PDF上打印,那么这段代码将对您有所帮助。

添加DLL文件

iTextSharp的。

 protected void btn_SaveAs_Click(object sender, EventArgs e) { string FileName = "Image_" + System.DateTime.Now.ToString("dd_MM_yyyy_hh_mm_ss") + ".pdf"; // Download File Name here. Response.ContentType = "application/pdf"; Response.AddHeader("content-disposition", "attachment;filename=" + FileName); Response.Cache.SetCacheability(HttpCacheability.NoCache); StringWriter sw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(sw); pnlPrint.RenderControl(hw); // In which panal name that want to convert in PDF StringReader sr = new StringReader(sw.ToString()); Document pdfDoc = new Document(new RectangleReadOnly(1500, 1500), 5, 5, 5, 5); // Pge size Chgnge Using RectangleReadOnly(1500, 1500) You can put on size value. HTMLWorker htmlparser = new HTMLWorker(pdfDoc); PdfWriter.GetInstance(pdfDoc, Response.OutputStream); pdfDoc.Open(); htmlparser.Parse(sr); pdfDoc.Close(); Response.Write(pdfDoc); Response.End(); } 

哪条线

文件pdfDoc = new Document(new RectangleReadOnly(1500,1500),5,5,5,5);

在页面上显示页面大小和填充的高度和宽度。

只是一个想法:你将RawKind-Property设置为PaperKind.Custom,即= 0. 文档说:

等于48或49或大于118的值表示自定义纸张尺寸

那里没有定义RawKind = 0。

也许打印机驱动程序无法正确处理它,您可能想尝试设置RawKind = 119或s.th. 像这样。

问候