首页 > 代码库 > 自定义纸张 未验证

自定义纸张 未验证

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;
    }
}
 

 

自定义纸张 未验证