zoukankan      html  css  js  c++  java
  • C#打印

    public partial class Form1 : Form
    {
    PrintDocument printDocument;
    StringReader lineReader = null;
    public Form1()
    {
    InitializeComponent();
    // 这里的printDocument对象可以通过将PrintDocument控件拖放到窗体上来实现,注意要设置该控件的PrintPage事件。
    printDocument=new PrintDocument();
    printDocument.PrintPage += new PrintPageEventHandler (this.printDocument_PrintPage);
    }

        private void Form1_Load(object sender, EventArgs e)
        {
    
        }
    
        private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
        {
            Graphics g = e.Graphics; //获得绘图对象
            float linesPerPage = 0; //页面的行号
            float yPosition = 0;   //绘制字符串的纵向位置
            int count = 0; //行计数器
            float leftMargin = e.MarginBounds.Left; //左边距
            float topMargin = e.MarginBounds.Top; //上边距
            string line = null; ///行字符串
            Font printFont = this.textBox1.Font; //当前的打印字体
            SolidBrush myBrush = new SolidBrush(Color.Black);//刷子
            linesPerPage = e.MarginBounds.Height / printFont.GetHeight(g);//每页可打印的行数
            //逐行的循环打印一页
            while (count < linesPerPage && ((line = lineReader.ReadLine()) != null))
            {
                yPosition = topMargin + (count * printFont.GetHeight(g));
                g.DrawString(line, printFont, myBrush, leftMargin, yPosition, new StringFormat());
                count++;
            }
            // 注意:使用本段代码前,要在该窗体的类中定义lineReader对象:
            //       StringReader lineReader = null;
            //如果本页打印完成而line不为空,说明还有没完成的页面,这将触发下一次的打印事件。在下一次的打印中lineReader会
            //自动读取上次没有打印完的内容,因为lineReader是这个打印方法外的类的成员,它可以记录当前读取的位置
            if (line != null)
                e.HasMorePages = true;
            else
            {
                e.HasMorePages = false;
                // 重新初始化lineReader对象,不然使用打印预览中的打印按钮打印出来是空白页
                lineReader = new StringReader(textBox1.Text); // textBox是你要打印的文本框的内容
            }
        }
    
        //打印设置
        private void FileMenuItem_PrintSet_Click(object sender, EventArgs e)
        {
             PrintDialog printDialog = new PrintDialog();
             printDialog.Document = printDocument;
             printDialog.ShowDialog();
        }
    
        //页面设置
        private void FileMenuItem_PageSet_Click(object sender, EventArgs e)
        {
            PageSetupDialog pageSetupDialog = new PageSetupDialog();
            pageSetupDialog.Document = printDocument;
            pageSetupDialog.ShowDialog();
        }
    
        //打印预览
        private void FileMenuItem_PrintView_Click(object sender, EventArgs e)
        {
            PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
            printPreviewDialog.Document = printDocument;
            lineReader = new StringReader(textBox1.Text);
            try
            {
                printPreviewDialog.ShowDialog();
            }
            catch (Exception excep)
            {
                MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    
        //打印
        private void FileMenuItem_Click(object sender, EventArgs e)
        {
            PrintDialog printDialog = new PrintDialog();
            printDialog.Document = printDocument;
            lineReader = new StringReader(textBox1.Text);
            if (printDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    printDocument.Print();
                }
                catch (Exception excep)
                {
                    MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    printDocument.PrintController.OnEndPrint(printDocument, new PrintEventArgs());
                }
            }
        }
    
        private void btnDocmentPrint_Click(object sender, EventArgs e)
        {
            string strBinPath = GetFilePath();
            Process pr = new Process();
            pr.StartInfo.FileName = "PACK生产进度查询.xlt.";//文件全称-包括文件后缀
            pr.StartInfo.CreateNoWindow = true;
            pr.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            pr.StartInfo.Verb = "Print";
            pr.Start();
        }
    
    
        private static string GetFilePath()
        {
            string filepath = AppDomain.CurrentDomain.BaseDirectory;
            int binPos = filepath.IndexOf("bin");
            string binPath = filepath.Remove(binPos);
            return binPath;
        } 
    
    
    }
  • 相关阅读:
    对MVC模式与MVVM模式的认识
    优雅降级和渐进增强
    入园第一天
    看看AQS阻塞队列和条件队列
    简单看看LockSupport和AQS
    简单看看LongAccumulator
    JUC中的原子操作类及其原理
    java并发基础知识
    简单看看es6解构赋值
    简单使用vue-cli
  • 原文地址:https://www.cnblogs.com/VictorBlog/p/5832958.html
Copyright © 2011-2022 走看看