zoukankan      html  css  js  c++  java
  • c#打印记忆功能

    下面这些实例都可以拷下直接用


    总体思路:保存打印设置信息到本地文件,下次打印的时候直接读取文件信息,通过序列化与反序列化来获取值。本例只是针对打印的横纵向进行设置,读者也可以增加其他设置信息进行保存读取。


    主方法MemoryPrint


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Drawing.Printing;
    using System.Windows.Forms;
    using System.IO;
    using System.Drawing;
    
    namespace VistaRenderer
    {
        class MemoryPrint
        {
            public MemoryPrint() { }
            /// <summary>
            /// 系统当前路径
            /// </summary>
            public static string GLOBALPATH = Application.StartupPath;
    
            /// <summary>
            /// 是否横向
            /// </summary>
            public  bool pagesetIsHorizon;
    
            /// <summary>
            /// 是否第一次打印
            /// </summary>
            public bool isFirstP=true;
    
            /// <summary>
            /// 主方法
            /// </summary>
            public  void memoryPrint()
            {
                this.GetDate();
                PrintDocument fPrintDocument = new PrintDocument();
                fPrintDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);// 打印内容
                try
                {
                    /** 第一次打印弹出设置框,以后都是从配置文件中读取 */
                    if (!isFirstP)
                    {
                        fPrintDocument.DefaultPageSettings.Landscape = pagesetIsHorizon;
                    }
                    else
                    {
                        //申明并实例化PrintDialog      
                        PrintDialog pDlg = new PrintDialog();
                        //可以选定页      
                        pDlg.AllowSomePages = true;
                        //指定打印文档     
                        pDlg.Document = fPrintDocument;
                        //显示对话框      
                        DialogResult result = pDlg.ShowDialog();
                        if (result == DialogResult.OK)
                        {
                            //保存打印设置      
                            fPrintDocument = pDlg.Document;
                            pagesetIsHorizon = fPrintDocument.DefaultPageSettings.Landscape;
                           
                        }
                    }
                    //打印预览
                    PrintPreviewDialog ppd = new PrintPreviewDialog();
                    ppd.Document = fPrintDocument;
                    ppd.ShowDialog();
                    //打印       
                    fPrintDocument.Print();
                    //保存设置到本地
                    this.SaveDate();
                }
                catch (System.Drawing.Printing.InvalidPrinterException e1)
                {
                    MessageBox.Show("未安装打印机,请进入系统控制面版添加打印机!", "打印", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "打印", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }  
    
            }
    
            /// <summary>
            /// 打印内容
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private  void printDocument_PrintPage(object sender, PrintPageEventArgs e)
            {
                Graphics g = e.Graphics; //获得绘图对象
                e.Graphics.DrawString("打印啦。。。。",
                    new Font("Arial", 20, FontStyle.Bold), Brushes.Black, 150, 125);
            }
    
    
    
            /// <summary>
            /// 保存用户选择信息到文件data/data.dat中
            /// </summary>
            public  void SaveDate()
            {
                
                ClsSaveData csd = null;
                if (File.Exists(GLOBALPATH + "\data\data.dat"))
                {
                    csd = ClsSaveData.deSerialize("data.dat", GLOBALPATH + "\data\");
                }
                else
                {
                    csd = new ClsSaveData();
                }
                csd.pagesetIsHorizon = pagesetIsHorizon;
                csd.isFirstP = false;
                ClsSaveData.serialize("data.dat", GLOBALPATH + "\data\", csd);
            }
    
            /// <summary>
            /// 从data.dat文件取出用户选择项
            /// </summary>
            public  void GetDate()
            {
                if (File.Exists(GLOBALPATH + "\data\data.dat"))
                {
                    ClsSaveData csd = ClsSaveData.deSerialize("data.dat", GLOBALPATH + "\data\");
                    if (csd == null || csd.pagesetIsHorizon == null)
                    {
                        
                    }
                    else
                    {
                        isFirstP = csd.isFirstP;
                        pagesetIsHorizon = csd.pagesetIsHorizon;
                    }
    
                }
    
            }
        }
    }
    

    序列化的对象,保存纵横向设置信息


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Collections;
    
    namespace VistaRenderer
    {
        [Serializable]
        class ClsSaveData
        {
            public bool pagesetIsHorizon;//是否横向
    
            /// <summary>
            /// 是否第一次打印
            /// </summary>
            public bool isFirstP = true;
    
            /// <summary>
            /// 序列化该对象
            /// </summary>
            /// <param name="fileName"></param>
            /// <param name="path"></param>
            /// <param name="obj"></param>
            public static void serialize(string fileName, string path, object obj)
            {
                if (!Directory.Exists(path))
                    Directory.CreateDirectory(path);
                ClsSerial serial = new ClsSerial(path + fileName, obj);
                serial.SerializeNow();
            }
    
            /// <summary>
            /// 反序列化
            /// </summary>
            /// <param name="fileName"></param>
            /// <param name="path"></param>
            /// <returns></returns>
            public static ClsSaveData deSerialize(string fileName, string path)
            {
                ClsSaveData csd = null;
                if (File.Exists(path + fileName))
                {
                    ClsSerial serial = new ClsSerial();
                    csd = (ClsSaveData)serial.DeSerializeNow(path + fileName);
                }
                return csd;
            }
        }
    
        
    }
    

    序列化工具类


    using System;
    using System.Windows.Forms;
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Xml.Serialization;
    
    namespace VistaRenderer
    {
        class ClsSerial
        {
            /// <summary>
            /// 路径
            /// </summary>
            private string path = "";
            /// <summary>
            /// 对象
            /// </summary>
            private object obj = null;
            /// <summary>
            /// 类型
            /// </summary>
            private Type type = null;
    
            public ClsSerial()
            {
            }
            /// <summary>
            /// 构造器
            /// </summary>
            /// <param name="path"></param>
            /// <param name="obj"></param>
            public ClsSerial(string path, object obj)
            {
                this.path = path;
                this.obj = obj;
            }
            /// <summary>
            /// 检查类型
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public bool checkObj(object obj)
            {
                bool check = false;
                type = obj.GetType();
                if (type.IsClass || type.Name == "struct" || type.IsEnum || type.Name == "delegate")
                    check = true;
                return check;
            }
            /// <summary>
            /// 序列化
            /// </summary>
            /// <param name="path"></param>
            /// <param name="obj"></param>
            public void SerializeNow(string path, object obj)
            {
                try
                {
                    this.path = path;
                    this.obj = obj;
                    SerializeNow();
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message, ex);
                }
            }
            /// <summary>
            /// 序列化
            /// </summary>
            public void SerializeNow()
            {
                try
                {
                    if (!checkObj(obj))
                    {
                        MessageBox.Show("该对象不可序列化!", "系统错误");
                        return;
                    }
                    FileStream fileStream = new FileStream(path, FileMode.Create);
                    BinaryFormatter b = new BinaryFormatter();
                    b.Serialize(fileStream, obj);
                    fileStream.Close();
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message, ex);
                }
            }
            /// <summary>
            /// 反序列化
            /// </summary>
            /// <param name="path"></param>
            /// <returns></returns>
            public object DeSerializeNow(string path)
            {
                try
                {
                    this.path = path;
                    return DeSerializeNow();
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message, ex);
                }
            }
            /// <summary>
            /// 反序列化
            /// </summary>
            /// <returns></returns>
            public object DeSerializeNow()
            {
                try
                {
                    object obj = null;
                    FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
                    BinaryFormatter b = new BinaryFormatter();
                    obj = b.Deserialize(fileStream);
                    fileStream.Close();
                    return obj;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message, ex);
                }
            }
            /// <summary>
            /// xml序列化
            /// </summary>
            /// <param name="path"></param>
            /// <param name="obj"></param>
            public void SerializeXMLNow(string path, object obj)
            {
                try
                {
                    this.path = path;
                    this.obj = obj;
                    SerializeXMLNow();
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message, ex);
                }
            }
            /// <summary>
            /// xml序列化
            /// </summary>
            public void SerializeXMLNow()
            {
                try
                {
                    if (!checkObj(obj))
                    {
                        MessageBox.Show("该对象不可序列化!", "系统错误");
                        return;
                    }
                    FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                    XmlSerializer xmlFormatter = new XmlSerializer(type);
                    xmlFormatter.Serialize(fileStream, obj);
                    fileStream.Close();
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message, ex);
                }
            }
            /// <summary>
            /// xml反序列化
            /// </summary>
            /// <param name="path"></param>
            /// <param name="obj"></param>
            /// <returns></returns>
            public object DeSerializeXMLNow(string path, object obj)
            {
                try
                {
                    this.path = path;
                    this.obj = obj;
                    return DeSerializeXMLNow();
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message, ex);
                }
            }
            /// <summary>
            /// xml反序列化
            /// </summary>
            /// <returns></returns>
            public object DeSerializeXMLNow()
            {
                try
                {
                    if (!checkObj(obj))
                    {
                        MessageBox.Show("该对象不可反序列化!", "系统错误");
                        return null;
                    }
                    object objXml = null;
                    FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
                    XmlSerializer formatter = new XmlSerializer(type);
                    obj = formatter.Deserialize(fileStream);
                    fileStream.Close();
                    return objXml;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message, ex);
                }
            }  
        }
    }
    



  • 相关阅读:
    Kafka源码分析9:Controller控制器的原理(图解+秒懂+史上最全)
    nacos高可用 (史上最全 + 图解+秒懂)
    Kafka源码分析11:PartitionStateMachine分区状态机(图解+秒懂+史上最全)
    Kafka源码分析2:Kafka产品选择和Kafka版本选择(史上最全)
    Kafka源码分析10:副本状态机ReplicaStateMachine详解 (图解+秒懂+史上最全)
    Netty解决Selector空轮询BUG的策略(图解+秒懂+史上最全)
    Kafka源码分析1:源码的开发环境搭建 (图解+秒懂+史上最全)
    mysql pxc集群 原理 (图解+秒懂+史上最全)
    seat TCC 实战(图解_秒懂_史上最全)
    seata 源码解析(图解_秒懂_史上最全)
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3161477.html
Copyright © 2011-2022 走看看