当前位置: 代码迷 >> 综合 >> 打印系统开发(23)——c# PrintDocument 设置自定义纸张大小的示例
  详细解决方案

打印系统开发(23)——c# PrintDocument 设置自定义纸张大小的示例

热度:37   发布时间:2023-10-01 15:44:35.0

.Net 提供的打印类PrintDocument 非常简洁易用,不过在实际应用开发中往往需要对纸张进行自定义,尤其是需要进行票据打印时。这个问题也困扰了我许久,经过查阅相关的资料和多次尝试,发现其实也很简单。下面的示例就是我在.Net2.0已经验证可行的办法:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Printing;namespace PrintService
{class AFCSPrinter : {/*页面打印委托*/public delegate void DoPrintDelegate(Graphics g, ref bool HasMorePage);PrintDocument iSPriner = null;bool m_bUseDefaultPaperSetting = false;DoPrintDelegate DoPrint = null;public AFCSPrinter(){iSPriner = new PrintDocument();iSPriner.PrintPage += new PrintPageEventHandler(this.OnPrintPage);}public void Dispose(){if (iSPriner != null) iSPriner.Dispose();iSPriner = null;}/*设置打印机名*/public string PrinterName{get { return iSPriner.PrinterSettings.PrinterName; }set { iSPriner.PrinterSettings.PrinterName = value; }}/*设置打印文档名*/public string DocumentName{get { return iSPriner.DocumentName; }set { iSPriner.DocumentName = value; }}/*设置是否使用缺省纸张*/public bool UseDefaultPaper{get { return m_bUseDefaultPaperSetting; }set { m_bUseDefaultPaperSetting = value;if (!m_bUseDefaultPaperSetting){//如果不适用缺省纸张则创建一个自定义纸张,注意,必须使用这个版本的构造函数才是自定义的纸张PaperSize ps=new PaperSize("Custom Size 1",827,1169);//将缺省的纸张设置为新建的自定义纸张iSPriner.DefaultPageSettings.PaperSize = ps;}}}/*纸张宽度 单位定义为毫米mm*/public float PaperWidth {get { return iSPriner.DefaultPageSettings.PaperSize.Width / 100f * 25.4f; }set{//注意,只有自定义纸张才能修改该属性,否则将导致异常if(iSPriner.DefaultPageSettings.PaperSize.Kind==PaperKind.Custom)iSPriner.DefaultPageSettings.PaperSize.Width = (int)(value / 25.4 * 100); }}/*纸张高度 单位定义为毫米mm*/public float PaperHeight{get { return (int)iSPriner.PrinterSettings.DefaultPageSettings.PaperSize.Height / 100f * 25.4f; }set {//注意,只有自定义纸张才能修改该属性,否则将导致异常if (iSPriner.DefaultPageSettings.PaperSize.Kind == PaperKind.Custom)iSPriner.DefaultPageSettings.PaperSize.Height = (int)(value / 25.4 * 100); }}/*页面打印*/private void OnPrintPage(object sender, PrintPageEventArgs ev){//调用委托绘制打印内容if (DoPrint != null){bool bHadMore = false;DoPrint(ev.Graphics, ref bHadMore);ev.HasMorePages = bHadMore;}}/* 开始打印*/public void Print(DoPrintDelegate doPrint){DoPrint = doPrint;      this.iSPriner.Print();}}
}

这个示例是在不要需要用户通过UI设置纸张的情况下使用。如果需要提供界面给用户选择或设置纸张则需要改造。