.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",,);
//将缺省的纸张设置为新建的自定义纸张
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 * );
}
} /*纸张高度 单位定义为毫米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 * );
}
} /*页面打印*/
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设置纸张的情况下使用。如果需要提供界面给用户选择或设置纸张则需要改造

c# PrintDocument 设置自定义纸张大小的示例的更多相关文章

  1. [Q]自定义纸张大小

    问:当打印机纸张列表里没有符合要求的纸张大小,例如如何打印加长图?答:当打印非标准图框时,你可能在图纸列表里找不到想要纸幅.你需要自己新建你需要的纸幅,以pdfFactory虚拟打印机为例(其它打印机 ...

  2. 在C#中设置打印机纸张大小

    using System.Drawing.Printing.PrintDocument using System.Drawing.Printing.PrinterSettings.PaperSizeC ...

  3. 水晶报表自定义纸张大小打印 (Crystal Report Print with custom paper size)

    System.Drawing.Printing.PrintDocument doc = new PrintDocument(); doc.PrinterSettings.PrinterName = & ...

  4. C# 将Excel转为PDF时自定义表格纸张大小

    通过后端程序将Excel表格转为PDF格式时,直接转换后的PDF效果可能出现表格页面过小或者过大,导致页面内容分布不均.要改善转换后的文档效果,只需在转换前自定义表格纸张大小,即可调整转换后的PDF页 ...

  5. 利用ActiveX实现web页面设置本地默认打印机、纸张大小

    通常web技术无法设置本地计算机的默认打印机,包括用代码设置纸张大小,如果业务系统中真遇到这种需求,只能通过其它辅助手段(比如ActiveX)实现.下面这段代码,出自网上被广泛使用的"泥人张 ...

  6. C#控制条码打印机 纸张大小,间距,绘制内容(所有条码打印机通用)

    其他条码知识 请访问:http://www.ybtiaoma.com ,本文仅供参考,请勿转载,谢谢 using System; using System.Drawing; using System. ...

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

    /// <summary> /// 打印的按钮 /// </summary> /// <param name="sender"></par ...

  8. C#中使用自定义的纸张大小

    using System.Drawing.Printing; using System.Drawing; private void Test() { PrintDocument m_pdoc = ne ...

  9. C#调用windows api控制打印机 状态获取 打印 自定义纸张 完整版

    using System; using System.Text; using System.Runtime.InteropServices; using System.Security; using ...

随机推荐

  1. 如何去掉 Discuz标题后缀power by discuz

    如何去掉 Discuz标题后缀power by discuz 打开如下文件 template/default/common/header_common.htm/php 找到如下代码 $navtitle ...

  2. 【PHP ThinkPHP框架】小bug汇总[更新]

    目录结构 1.函数调用 2.绑定select下拉框数据 3.PHP查询功能 4.格式化时间和价钱 5.IF标签比较两个变量 6.eq标签比较两个变量 7.新增信息或者修改信息的自动验证和自动填充 8. ...

  3. mysql 远程连接 2003 Can't connect to MySQL server (10060)

    mysql server 端的端口被防火墙挡出,没有开放

  4. C#表驱动法+一点反射实现“得到指定位数随机不重复字符串”三种方式的封装

    1.结构 第一个类 public class GetMethods{...}      类中的变量:                                                   ...

  5. zoom 用法

    from: http://www.jb51.net/css/40285.html 其实Zoom属性是IE浏览器的专有属性,Firefox等浏览器不支持.它可以设置或检索对象的缩放比例.除此之外,它还有 ...

  6. 微信开发之开发环境搭建( visual studio 2015we + IIS express + ngrok)

    1. 申请个人测试使用的微信订阅号 https://mp.weixin.qq.com 可注册微信订阅号. 不会?请自行百度. 2. 安装 ngrok 微信开发首先要解决如何让微信链接到本地开发环境.有 ...

  7. NGUI系列教程一

    NGUI是Unity的一个插件,使用它来制作你的游戏UI必定将事半功倍.为什么这么说呢?首先我们说说GUI与NGUI的区别,GUI是Unity自带的绘制界面工具,它的成像原理是基于表层的,所以执行效率 ...

  8. cocos2dx伸缩式列表效果

    效果: 代码: ElasticListView.h #pragma once //std #include <string> #include <map> //cocos #i ...

  9. nodejs child process

    //Create child processvar thread = require('child_process'); var msg = thread.fork(__dirname + '/chi ...

  10. BZOJ 1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机

    Description 约翰正在制造一台新型的挤奶机,但他不希望别人知道.他希望尽可能久地隐藏这个秘密.他把挤奶机藏在他的农场里,使它不被发现.在挤奶机制造的过程中,他需要去挤奶机所在的地方T(1≤T ...