1. 程式人生 > >自定義紙張 未驗證

自定義紙張 未驗證

開始 使用 復制 names 字符串 就會 設置 rsize 一個

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

自定義紙張 未驗證