`
wuguowenq
  • 浏览: 2741 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论
阅读更多

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

转载自:http://www.cnblogs.com/doonewei/archive/2012/02/27/2370262.html

 

 

分享到:
评论

相关推荐

    c#RDLC自定义纸张打印

    下面将详细探讨如何在C#中实现RDLC自定义纸张打印。 首先,理解RDLC报表。RDLC是一种XML格式,用于描述报表的布局和数据源。在C#应用中,RDLC报表通常通过ReportViewer控件来展示,它允许用户在客户端查看、打印和...

    自定义水晶报表纸张大小

    - **导出和共享**: 如果你需要将报表与他人共享,确保他们也有相同或兼容的自定义纸张设置,否则可能无法正确显示。 - **编程接口**: 对于高级用户,水晶报表还提供了编程接口(API),可以通过编程方式动态设置纸张...

    C#自定义纸张格式源码

    在C#编程环境中,自定义纸张格式是一个常见的需求,特别是在开发打印相关的应用程序时。本示例源码提供了实现这一功能的方法,适用于Visual Studio 2005 (VS2005) 平台,使用C#语言(csharp)进行开发。下面将详细...

    c#实现打印功能,可以设置纸张大小,字体和颜色等

    ### 二、自定义纸张大小 - **代码示例**:通过`PaperSize`构造函数创建新的纸张大小,并将其设置为`PrintDocument`对象的默认纸张大小。 ```csharp this.printDocument1.DefaultPageSettings.PaperSize = new ...

    C#写的打印程序,可以设置纸张大小,字体等

    ### C#打印程序知识点解析 #### 一、概述 本文将详细介绍一个基于C#语言编写的打印程序,该程序能够自定义打印时的纸张大小、字体等参数。通过具体的代码示例,我们将深入理解如何在.NET框架下利用C#进行打印功能...

    .net winform调用打印机使用自定义纸张实现连续打印及自动撕纸

    总的来说,通过.NET WinForm的打印功能,结合自定义纸张设置、连续打印逻辑和打印机特定的控制命令,可以实现项目中的榜单票据打印,包括自动进纸和撕纸功能。虽然可能需要一些调试和优化,但这是实现此类需求的有效...

    水晶报表自定义纸张

    在 Crystal Report 中,自定义纸张设置是非常重要的,因为不同的纸张大小和方向对报表的打印结果有着很大的影响。下面将详细介绍如何在 C# 中使用 Crystal Report 自定义纸张设置。 一、使用 CrystalReportViewer ...

    DataTable 自定义打印(c#)

    本文将详细讲解如何在C#环境中实现DataTable的自定义打印,特别是针对DataGridView的打印。 首先,理解“自定义打印”意味着我们需要控制打印的内容、样式以及布局,而不仅仅是简单的屏幕视图的复制。在.NET中,...

    改进了 VS2008 C# 打印实例 合同打印 添加了自定义纸张的小票打印示例

    改进了 VS2008 C# 打印实例 合同打印 添加了自定义纸张大小的小票打印实例 ,本实例在虚拟打印机 eprint是测试通过 本实例采用VS2008开发,轻松解决打印过程中的文本定位,展示了PrintDocument对象的应用以及对...

    在win2000/xp/2003server中自定义纸张打印票据

    这个命名空间提供了`PrintDocument`、`PrinterSettings`和`PageSettings`等类,用于定义打印任务和设置自定义纸张。 提到的`defaultpage.pbl`文件,这可能是Progress 4GL(一种编程语言)的页面定义文件,用于存储...

    C#.net编写的向XP或NT系统当前黙认打印机添加自定义纸张DLL

    在IT领域,尤其是在Windows操作系统开发和打印服务管理中,自定义纸张的创建和管理是一项常见任务。本文将深入探讨如何使用C#.NET编写DLL(动态链接库)来实现这一功能,特别是在Windows XP和NT系统上向默认打印机...

    打印走纸问题,自定义纸张

    在IT领域,打印走纸问题和自定义纸张设置是常见的技术挑战,尤其在需要适应特殊打印需求的环境中。自定义纸张功能允许用户根据实际需求创建非标准尺寸的打印格式,以满足如海报、标签、手册等特殊文档的打印需求。...

    C#打印操作实例--设置横向或纵向打印实例--完整版)

    以下是一份完整的C#打印操作实例,包括关键概念、步骤以及相关API的解析。 1. **System.Drawing.Printing Namespace** 在C#中,我们主要通过`System.Drawing.Printing`命名空间来实现打印功能。这个命名空间包含了...

    单据自定义纸张打印测试

    1. **自定义纸张设置**:在Windows操作系统中,可以通过控制面板的打印机设置来添加自定义的纸张大小。开发者需要了解`PageSetup`对话框和`PrinterSettings`类,以便在程序中设定纸张尺寸和方向。 2. **编程语言与...

    水晶报表 套打 设置纸张大小

    本文详细介绍了如何在水晶报表中设置自定义纸张尺寸的方法,包括操作系统级别的纸张设置以及通过编程方式指定纸张规格。正确设置纸张尺寸是确保打印质量的关键,特别是在处理票据打印任务时尤为重要。通过上述步骤,...

    C#自定义横向或纵向打印纸张

    一个关于C#打印的例子,自定义纸张的横向或纵向打印,实例需要连接数据库读取内容,不过本例中的数据库没有提供,但打印程序核心代码完整,测试的朋友自己配上数据库吧。  仔细看下,在C#代码中可设置打印方向、...

    winform自定义打印设计工具实现,windows打印组件,可自定义设计,代码动态调用进行打印操作。

    本文将深入探讨如何在C#环境下,利用.NET的打印组件实现自定义打印设计。 首先,我们需要了解.NET框架提供的`System.Drawing.Printing`命名空间,其中包含了一系列与打印相关的类,如`PrintDocument`、`...

    C#打印操作实例--设置横向或纵向打印实例_0520.rar

    这个“C#打印操作实例--设置横向或纵向打印实例_0520.rar”压缩包文件提供了关于如何在C#中进行打印设置的实例,包括如何选择打印方向——横向或纵向。以下将详细介绍相关的C#打印知识点。 1. **PrintDocument对象*...

    C# 自定义打印标签 vs2008

    本项目基于Visual Studio 2008,提供了一种实现方式来创建和打印自定义标签,同时包含了打印预览功能。源码开放使得开发者能够深入理解其工作原理并进行定制化开发。 首先,我们要了解C#中的打印机制。C#通过.NET ...

    C#票据打印系统 可自定义设置模版 图形化编辑

    《C#票据打印系统:自定义模板与图形化编辑详解》 在信息技术高速发展的今天,企业对于高效、灵活的管理工具需求日益增长。C#票据打印系统作为一种专业的业务处理工具,以其可自定义模板和图形化编辑的特点,为企业...

Global site tag (gtag.js) - Google Analytics