.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自定义纸张打印。 首先,理解RDLC报表。RDLC是一种XML格式,用于描述报表的布局和数据源。在C#应用中,RDLC报表通常通过ReportViewer控件来展示,它允许用户在客户端查看、打印和...
- **导出和共享**: 如果你需要将报表与他人共享,确保他们也有相同或兼容的自定义纸张设置,否则可能无法正确显示。 - **编程接口**: 对于高级用户,水晶报表还提供了编程接口(API),可以通过编程方式动态设置纸张...
在C#编程环境中,自定义纸张格式是一个常见的需求,特别是在开发打印相关的应用程序时。本示例源码提供了实现这一功能的方法,适用于Visual Studio 2005 (VS2005) 平台,使用C#语言(csharp)进行开发。下面将详细...
### 二、自定义纸张大小 - **代码示例**:通过`PaperSize`构造函数创建新的纸张大小,并将其设置为`PrintDocument`对象的默认纸张大小。 ```csharp this.printDocument1.DefaultPageSettings.PaperSize = new ...
### C#打印程序知识点解析 #### 一、概述 本文将详细介绍一个基于C#语言编写的打印程序,该程序能够自定义打印时的纸张大小、字体等参数。通过具体的代码示例,我们将深入理解如何在.NET框架下利用C#进行打印功能...
总的来说,通过.NET WinForm的打印功能,结合自定义纸张设置、连续打印逻辑和打印机特定的控制命令,可以实现项目中的榜单票据打印,包括自动进纸和撕纸功能。虽然可能需要一些调试和优化,但这是实现此类需求的有效...
在 Crystal Report 中,自定义纸张设置是非常重要的,因为不同的纸张大小和方向对报表的打印结果有着很大的影响。下面将详细介绍如何在 C# 中使用 Crystal Report 自定义纸张设置。 一、使用 CrystalReportViewer ...
本文将详细讲解如何在C#环境中实现DataTable的自定义打印,特别是针对DataGridView的打印。 首先,理解“自定义打印”意味着我们需要控制打印的内容、样式以及布局,而不仅仅是简单的屏幕视图的复制。在.NET中,...
改进了 VS2008 C# 打印实例 合同打印 添加了自定义纸张大小的小票打印实例 ,本实例在虚拟打印机 eprint是测试通过 本实例采用VS2008开发,轻松解决打印过程中的文本定位,展示了PrintDocument对象的应用以及对...
这个命名空间提供了`PrintDocument`、`PrinterSettings`和`PageSettings`等类,用于定义打印任务和设置自定义纸张。 提到的`defaultpage.pbl`文件,这可能是Progress 4GL(一种编程语言)的页面定义文件,用于存储...
在IT领域,尤其是在Windows操作系统开发和打印服务管理中,自定义纸张的创建和管理是一项常见任务。本文将深入探讨如何使用C#.NET编写DLL(动态链接库)来实现这一功能,特别是在Windows XP和NT系统上向默认打印机...
在IT领域,打印走纸问题和自定义纸张设置是常见的技术挑战,尤其在需要适应特殊打印需求的环境中。自定义纸张功能允许用户根据实际需求创建非标准尺寸的打印格式,以满足如海报、标签、手册等特殊文档的打印需求。...
以下是一份完整的C#打印操作实例,包括关键概念、步骤以及相关API的解析。 1. **System.Drawing.Printing Namespace** 在C#中,我们主要通过`System.Drawing.Printing`命名空间来实现打印功能。这个命名空间包含了...
1. **自定义纸张设置**:在Windows操作系统中,可以通过控制面板的打印机设置来添加自定义的纸张大小。开发者需要了解`PageSetup`对话框和`PrinterSettings`类,以便在程序中设定纸张尺寸和方向。 2. **编程语言与...
本文详细介绍了如何在水晶报表中设置自定义纸张尺寸的方法,包括操作系统级别的纸张设置以及通过编程方式指定纸张规格。正确设置纸张尺寸是确保打印质量的关键,特别是在处理票据打印任务时尤为重要。通过上述步骤,...
一个关于C#打印的例子,自定义纸张的横向或纵向打印,实例需要连接数据库读取内容,不过本例中的数据库没有提供,但打印程序核心代码完整,测试的朋友自己配上数据库吧。 仔细看下,在C#代码中可设置打印方向、...
本文将深入探讨如何在C#环境下,利用.NET的打印组件实现自定义打印设计。 首先,我们需要了解.NET框架提供的`System.Drawing.Printing`命名空间,其中包含了一系列与打印相关的类,如`PrintDocument`、`...
这个“C#打印操作实例--设置横向或纵向打印实例_0520.rar”压缩包文件提供了关于如何在C#中进行打印设置的实例,包括如何选择打印方向——横向或纵向。以下将详细介绍相关的C#打印知识点。 1. **PrintDocument对象*...
本项目基于Visual Studio 2008,提供了一种实现方式来创建和打印自定义标签,同时包含了打印预览功能。源码开放使得开发者能够深入理解其工作原理并进行定制化开发。 首先,我们要了解C#中的打印机制。C#通过.NET ...
《C#票据打印系统:自定义模板与图形化编辑详解》 在信息技术高速发展的今天,企业对于高效、灵活的管理工具需求日益增长。C#票据打印系统作为一种专业的业务处理工具,以其可自定义模板和图形化编辑的特点,为企业...