.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. Oracle外部表详解(转载)

    (外部表创建主要注意创建目录访问权限问题.目录路径格式无空格等不相关字符,即必须是当前表访问用户可以访问:关于表中行数的限制问题,如果不加限制注意添加reject limit unlimited:表中 ...

  2. Web前端新人笔记之jquery入门

    本章将为大家介绍以下几点内容: 1.jquery的主要特点: 2.建立jquery的编码环境: 3.简单jquery脚本示例: 4.选择jquery而不是纯javaScript的理由: 5.常用的jq ...

  3. spring data mongodb中,如果对象中的属性不想加入到数据库字段中

    spring data mongodb中,如果对象中的属性不想加入到数据库字段中,可加@Transient注解,声明为透明属性 spring data mongodb 官网帮助文档 http://ww ...

  4. 模拟请求之 HTTP_Request2

    简单安装: pear install HTTP_Request2 使用例子: <?php require_once 'HTTP/Request2.php'; $request = new HTT ...

  5. Windows下使用cmd启动Oracle EM和sql命令使用+主机身份认证

    (1)cmd命令下使用sql命令 >sqlplus / as sysdba sql>select * from v$version; (2)cmd命令下启动Oracle EM 安装完ora ...

  6. 【IT历史】SP和CP

    1.什么是SP?SP是英文Service Provider的缩写,中文翻译为服务提供商,通常是指在移动网内运营增值业务的社会合作单位.它们建立与移动网络建立相连的服务平台,为手机用户提供一系列信息服务 ...

  7. 【hibernate】spring+ jpa + hibername 配置过程遇到的问题

    org.springframework.data.jpa.domain.support.AuditingEntityListener Auditing: 审计:查账Hades:Hades是一个开源库, ...

  8. sass教程汇总

    Sass @at-root http://www.w3cplus.com/preprocessor/Sass-3-3-new-feature-at-root-bem.html Sass中连体符(&am ...

  9. 再eclipse的javaweb项目中添加JQuery文件时jquery-2.1.4.min.js报错

    解决方法: eclipse导入jquery包后报错,下面有个不错的解决方法,需要的朋友可以参考下 eclipse导入jquery包后报错,处理步骤如下: 1.打开项目.project文件,去掉如下内容 ...

  10. 2D多边形碰撞器优化器

    http://www.unity蛮牛.com/thread-19827-1-1.html http://pan.baidu.com/s/1qW2mWS8 Asset Store Link: http: ...