• c# PrintDocument 设置自定义纸张大小的示例


    .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设置纸张的情况下使用。如果需要提供界面给用户选择或设置纸张则需要改造

  • 相关阅读:
    confluence重置admin密码
    oracle 11g密码永不过期
    GCC编译器使用
    Emacs常用命令汇总
    bash shell命令(1)
    进程管理3--经典的进程同步问题
    进程管理2--进程的同步与信号量
    C安全问题与指针误用
    C迷途指针
    进程管理1--进程的概念与操作
  • 原文地址:https://www.cnblogs.com/zeroone/p/3306205.html
Copyright © 2020-2023  润新知