.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# 打印自定义纸张设置相关推荐

  1. 弄了一整天,终于把打印自定义纸张大小搞定了(上)--IT man

    Csdn-Blog <script language="javascript" src="http://www.023rcsc.com/count/count2.a ...

  2. pb11 打印 自定义纸张_pb自定义纸张(连续走纸)

    Pb中定制打印页长实现连续打印 pb与打印机的通讯使用ASCII码进行,其中标准ASCII码包括可打印字符及非打印字符(控制码), 打印机使用控制码来定制打印机.大多数打印机指令使用控制码escape ...

  3. 弄了一整天,终于把打印自定义纸张大小搞定了

    长江支流说的办法保留太多了,结果不行,很多类都是他在程序集里自定义的,源码又没公开 不过还是要感谢他的提示 今天和小陈搞了一天,他在国外的论坛上看到了一篇文章得到了启示,最后我们在凌晨3点终于把自定义 ...

  4. Java调用PDFBox打印自定义纸张PDF

    打印对象 一份设置为A3纸张, 页面边距为(10, 10, 10, 10)mm的PDF文件. PageFormat 默认PDFPrintable无法设置页面大小. 1 PDFPrintable pri ...

  5. XtraReport报表打印自定义纸张问题

    当在打印 机设置完自定义纸张后 设置User Paper为YES后,指定打印机,页面就采用了打印机的默认纸张了. 可在属性中设置需指向的打印机 Printer Name来设置打印机,Paper Kin ...

  6. .NET 横向打印,自定义纸张的横向打印

    最近做项目打印模块时,遇到了一个让人很头疼的问题.微软提供的打印中的landscape属性设置了没效果. 于是在网上查了一番资料,有些人人说微软的这个System.Drawing.Printing里面 ...

  7. pb11 打印 自定义纸张_如何设置datawindow的打印纸张大小为指定的长、宽

    Pb中定制打印页长 ---- 在使用连续纸打印数据窗口的情况下,需要定制打印的页长,以保证打印机 走纸正确,不用人工干预,实现连续打印.在PB中须调用外部函数来自定义纸张 长度,比较繁琐.本文介绍一种 ...

  8. 菜鸟打印自定义区域设置

    选择商家自定义区域建一个物流模板 2. 2.设置固定打印区域和动态打印区域,然后保存,发布 3.复制模板url 地址 4.然后调用 5.测试效果

  9. java 计算打印纸大小_java – 如何打印自定义纸张尺寸(检查8“x 4”)?

    打印设计为每英寸像素.基本打印API使用DPI为72. 您需要相应地转换测量值- double paperWidth = 8 * 72d; double paperHeight = 4 * 72d; ...

  10. Excel自定义纸张打印设置碰到无法对上尺寸的问题

    作者:iamlaosong 据操作人员反映,自定义纸张设置不管用,打印时每页表头都会下移,很快就跑偏到下涨纸了. 打印机是针打,齿轮进纸,应该很精确的,初步怀疑纸张尺寸量的有问题,建议其多量几页纸的长 ...

最新文章

  1. 【终于等到你】7种策略解除云风险警报
  2. es管理kabina_ES和Kibana在Linux上的安装
  3. impacket安装 python_安装impacket
  4. LeetCode——N-Queens II
  5. 视频的传输方式【转】
  6. iOS终于能微信双开了!原理竟然是这样…
  7. 美团网2015秋季校园招聘面试题(上)
  8. 头条都在用的边下边播方案
  9. 如果你对未来还有点迷茫不妨来看一下,必看的软件测试指引!!!
  10. 水晶高跟鞋(测试版)
  11. PDF Converter OCR for Mac(PDF转换器和OCR识别工具)
  12. 根据运单号查询快递物流详情
  13. 爬虫-Python编程入门
  14. geoserver(xml和json带属性互转,获取工作区-图层-样式-更新样式(解决乱码问题))
  15. 网络需求分析课堂作业
  16. 使用datapump 导出导入同义词
  17. 那些年啊,那些事——一个程序员的奋斗史 ——82
  18. android 电池监控软件,电池监控器 Battery Monitor Widget Pro for Android
  19. 9月全球披露区块链应用项目70个,中国市场降温
  20. 半波振子空间方向图matlab,关于半波振子的辐射方向图,下列说法中正确的是:【】。...

热门文章

  1. Win10 LTSC 2019进入桌面时假死的拆中处理方法
  2. L9110H电机驱动模块-FPGA
  3. Google Office 战略 途经:收购JotSpot
  4. 中国5G频谱即将公布,5G牌照或发放四张,中国广电强势入局
  5. 英特尔第二代神经计算棒(Intel Neural Compute Stick 2)相关测试
  6. 12月21诛仙服务器维护,【12月31日】全服停机更新维护公告
  7. 【转1】 OpenWrt Chaos Calmer 15.05使用mwan3单线多拨教程
  8. C盘哪些文件可以删除?windows7瘦身攻略
  9. 苹果手机左上角的数字怎么弄_手把手教你把抖音视频音乐设置为手机铃声。
  10. 命令行 笔记本键盘禁用_Panasonic(松下)笔记本 使用技巧资料整理