.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. HTML5的离线储存

    在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件.        原理:HTML5的离线存储是基于一个新建的.appcache文件的缓存机制(不是存储技 ...

  2. 使用WebClient上传文件时的一些问题

    最近在使用WebClient做一个客户端上传图片到IIS虚拟目录的程序的时候,遇到了一些问题,这里主要给出参考步骤分享给大家. 测试环境 服务器端:Windows Server 2003,IIS6.0 ...

  3. matlab2014在mac Yosemite下出现java空指针情况

    恢复方法为 使用xcode打开 /System/Library/CoreServices/SystemVersion.plist 将 ProductVersion 下的10.10或10.10.1改为1 ...

  4. HTTP协议(4)

    HTTP  概括总结 方便以后使用.遗忘时有侧重点的去学习,方便查阅: 开始看到webservice 和restful 有些不理解 现在可以简单理解为 : webservice = http协议+XM ...

  5. [旧博客]Python 第一次

    决定学习Python,发现其需要安装的东西很小,只需要在官方网站下载和15MB左右的安装包,Python for windows.安装完毕就双击IDE快捷方式就打开IDE了. 你很发现IDE好像很面熟 ...

  6. hdu 1251 统计难题 trie入门

    统计难题 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本 ...

  7. Sublime Text 3插件之SublimeTmpl:新建文件的模版插件

    SublimeTmpl能新建html.css.javascript.php.python.ruby六种类型的文件模板,所有的文件模板都在插件目录的templates文件夹里,可以自定义编辑文件模板. ...

  8. 在Ubuntu Linux下怎样安装QQ

    最近好多人在吐槽Linux下上QQ简直就是煎熬,网页版的不方便,网上各种版本的QQ要么是功能不全.要么是界面丑到爆,要么是运行不稳定.那么这次为大家带来一个功能完整.运行稳定的wineQQ安装过程. ...

  9. 【applicationContext.xml】配置文件找不到

    配置文件找不到时可以手动配置一下此处 信息: Initializing Spring root WebApplicationContext 八月 12, 2015 5:36:45 下午 org.apa ...

  10. VS Extension: Open Web Address with Visual Studio Browser

    使用VS 打开链接 using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; ... public ...