zoukankan      html  css  js  c++  java
  • 自定义纸张 未验证

    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设置纸张
    

      ----------------------------------------------------------------------------------------------

    NT,2000,XP,2003....下不能用DefaultPageSettings.PaperSize = new PaperSize("Custom", 826, 492)这种方式定义纸张大小,Win98可以。

    你需要在服务器属性中添加自定义表单,然后用

    C# code
    foreach (PaperSize paperSize in printDoc.PrinterSettings.PaperSizes)
    {
     
        if (paperSize.PaperName =="自定义表单名称"&& paperSize.Height == width && paperSize.Height == height)         {
    printDoc.DefaultPageSettings.PaperSize = paperSize; break;
        }
     
    }

    这种方式来设置自定义纸张

    --------------------------------------------------------------------------------------------------------------

    在c#的gdi+中,graphics对象的PageUnit 属性 设置为 GraphicsUnit.Millimeter,这样使用drawstring方法输出字符串时,坐标的单位就变成了毫米,然后进行精确位置的文本输出就会很容易。

    -----------------------------------------------------------------------------------------

    在Window 98下使用
    PrintDocument Document = new PrintDocument();
    Document.DefaultPageSettings.PaperSize = new PaperSize("A5", 827, 583);
     
    在Win2000,XP以上的版本中使用
    PaperSize ps = new PaperSize("自定", 627, 583);
    foreach (PaperSize ps2 in Document.PrinterSettings.PaperSizes)
    {
        if (ps2.PaperName == "A5")
        {
            printDocument1.DefaultPageSettings.PaperSize = ps2;//打印A5尺寸
        }
        //如果是自定尺寸,则用下面的语句
        if (ps2.PaperName == "自定")
        {
            printDocument1.DefaultPageSettings.PaperSize = ps;
        }
    }
     
  • 相关阅读:
    wmware虚拟机的克隆
    解决SecureCRT无法用非root账号登录ssh
    Docker容器操作
    Docker镜像操作
    Docker的安装和启动
    linux安装tomcat
    POJ 2456 Aggressive cows ( 二分搜索)
    POJ 1064 Cable master (二分查找)
    2008 APAC local onsites C Millionaire (动态规划,离散化思想)
    贿赂囚犯 Bribe the prisoners ( 动态规划+剪枝)
  • 原文地址:https://www.cnblogs.com/xiangxiong/p/7064822.html
Copyright © 2011-2022 走看看