打印系统开发(23) 您所在的位置:网站首页 设置打印机a4纸张规格 打印系统开发(23)

打印系统开发(23)

2024-07-12 23:41| 来源: 网络整理| 查看: 265

.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设置纸张的情况下使用。如果需要提供界面给用户选择或设置纸张则需要改造。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有