zoukankan      html  css  js  c++  java
  • C# 字符流打印类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing;
    using System.Drawing.Printing;
    using System.IO;
    using System.Runtime.InteropServices;
    
    namespace PrintService
    {
    
    
        sealed class TextFilePrinter
        {
            string sTreamPriStr;
            Encoding theEncode;
            Font theFont;
            StreamReader srToPrint;
            int currPage;
    
            public TextFilePrinter(string sTreamPriStr)
                : this(sTreamPriStr, Encoding.GetEncoding("utf-8"), new Font("新宋体", 10))
            {
            }
    
            public TextFilePrinter(string sTreamPriStr, Encoding theEncode, Font theFont)
            {
                this.sTreamPriStr = sTreamPriStr;
                this.theEncode = theEncode;
                this.theFont = theFont;
            }
    
            public void Print()
            {
                srToPrint = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(sTreamPriStr)));
                PrintDialog dlg = new PrintDialog();
                dlg.Document = GetPrintDocument();
                dlg.AllowSomePages = true;
                dlg.AllowPrintToFile = false;
                if (dlg.ShowDialog() == DialogResult.OK) dlg.Document.Print();
    
            }
    
            /// <summary>
            /// 不需要打印预览直接打印
            /// </summary>
            public void Print2()
            {
                srToPrint = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(sTreamPriStr)));
                PrintDialog dlg = new PrintDialog();
                dlg.Document = GetPrintDocument();
                dlg.AllowSomePages = true;
                dlg.AllowPrintToFile = false;
                dlg.Document.Print();
            }
    
            public void View()
            {
                srToPrint = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(sTreamPriStr)));
                PrintPreviewDialog dlg = new PrintPreviewDialog();
                dlg.Document = GetPrintDocument();
                dlg.ShowDialog();
            }
    
            PrintDocument GetPrintDocument()
            {
                currPage = 1;
                PrintDocument doc = new PrintDocument();
                doc.DocumentName = "打印";
                doc.PrintPage += new PrintPageEventHandler(PrintPageEvent);
                return doc;
            }
    
    
            void PrintPageEvent(object sender, PrintPageEventArgs ev)
            {
                string line = null;
                float linesPerPage = ev.MarginBounds.Height / theFont.GetHeight(ev.Graphics);
                bool isSomePages = ev.PageSettings.PrinterSettings.PrintRange == PrintRange.SomePages;
                if (isSomePages)
                {
                    while (currPage < ev.PageSettings.PrinterSettings.FromPage)
                    {
                        for (int count = 0; count < linesPerPage; count++)
                        {
                            line = srToPrint.ReadLine();
                            if (line == null) break;
                        }
                        if (line == null) return;
                        currPage++;
                    }
                    if (currPage > ev.PageSettings.PrinterSettings.ToPage) return;
                }
                for (int count = 0; count < linesPerPage; count++)
                {
                    line = srToPrint.ReadLine();
                    if (line == null) break;
                    //ev.Graphics.DrawString(line, theFont, Brushes.Black, ev.MarginBounds.Left,
                    //  ev.MarginBounds.Top + (count * theFont.GetHeight(ev.Graphics)), new StringFormat());
    
                    ev.Graphics.DrawString(line, theFont, Brushes.Black, 2,
                      count * theFont.GetHeight(ev.Graphics) - 1, new StringFormat());
                }
                currPage++;
                if (isSomePages && currPage > ev.PageSettings.PrinterSettings.ToPage) return;
                if (line != null) ev.HasMorePages = true;
            }
        }
    
        public static class PrinterHel
        {
            //GetDefaultPrinter用到的API函数说明 
            [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
            internal static extern bool GetDefaultPrinter(StringBuilder pszBuffer, ref int size);
    
            //SetDefaultPrinter用到的API函数声明 
            [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
            internal static extern bool SetDefaultPrinter(string Name);
    
            #region 获取本地打印机列表
            /// <summary> 
            /// 获取本地打印机列表 
            /// </summary> 
            /// <returns>打印机列表</returns> 
            public static List<string> GetPrinterList()
            {
                List<string> printRet = Cprinter.GetLocalPrinter();
                return printRet;
            }
            #endregion 获取本地打印机列表
    
            #region 获取本机的默认打印机名称
            /// <summary> 
            /// 获取本机的默认打印机名称 
            /// </summary> 
            /// <returns>默认打印机名称</returns> 
            public static string GetDeaultPrinterName()
            {
                StringBuilder dp = new StringBuilder(256);
                int size = dp.Capacity;
                if (GetDefaultPrinter(dp, ref size))
                {
                    return dp.ToString();
                }
                else
                {
                    return string.Empty;
                }
            }
            #endregion 获取本机的默认打印机名称
    
            #region 设置默认打印机
            /// <summary> 
            /// 设置默认打印机 
            /// </summary> 
            /// <param name="PrinterName">可用的打印机名称</param> 
            public static void SetPrinterToDefault(string PrinterName)
            {
                SetDefaultPrinter(PrinterName);
            }
            #endregion 设置默认打印机
    
            #region 判断打印机是否在系统可用的打印机列表中
            ///// <summary> 
            ///// 判断打印机是否在系统可用的打印机列表中 
            ///// </summary> 
            ///// <param name="PrinterName">打印机名称</param> 
            ///// <returns>是:在;否:不在</returns> 
            public static bool PrinterInList(string PrinterName)
            {
                bool bolRet = false;
                List<string> alPrinters = GetPrinterList();
                for (int i = 0; i < alPrinters.Count; i++)
                {
                    if (PrinterName == alPrinters[i].ToString())
                    {
                        bolRet = true;
                        break;
                    }
                }
                alPrinters.Clear();
                alPrinters = null;
                return bolRet;
            }
            #endregion 判断打印机是否在系统可用的打印机列表中
        }
    
    
    }
    View Code
  • 相关阅读:
    CS231n 学习笔记(1) Image CLassification
    caffe-winsows封装成dll
    Nuget安装程序包源
    PCA降维demo
    AI方面的国际会议
    caffe solver
    caffe数据层
    一些有意思的技术博客
    js cookie 设置
    knockout.validation.js 异步校验
  • 原文地址:https://www.cnblogs.com/weixing/p/3286978.html
Copyright © 2011-2022 走看看