文章类型: .NET
关键词: c#,PrintDocument,设置自定义纸张大小的示例
内容摘要: c# PrintDocument 设置自定义纸张大小的示例

c# PrintDocument 设置自定义纸张大小的示例

2016/2/18 22:43:32    来源:apple    阅读:

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

↑ 上一篇文章:并非要孩子“人见人爱”,但这23个礼貌习惯必须在9岁前教给孩子! 关键词:人见人爱,23个礼貌习惯,必须在9岁前教给孩子 发布日期:2016/2/18 3:01:58
↓ 下一篇文章:C# 数字货币转换大写方法,包含中英文写法(完整) 关键词:C#,钱,数字,大写,转换,写法,完整 发布日期:2016/2/19 11:58:16
相关文章:
C#中DataGridView的多表数据展示的方法总结 关键词:C#,DataGridView,多表数据,展示,方法,总结 发布日期:2015-07-18 12:01
C#的WinForm开发中AutoComplete 输入提示、自动补全 关键词:C#,CSharp,WinForm,TextBox,AutoComplete,输入提示,自动补全.. 发布日期:2016-01-21 21:08
Java、C#编程逻辑训练题(见上一篇)的参考答案 关键词:C#,C,Sharp,Java,java,编程逻辑,训练题,if,switch,while,fo.. 发布日期:2015-07-22 16:34
相关目录:.NET
我要评论
正在加载评论信息......