zoukankan      html  css  js  c++  java
  • Windows Form 程序打印概述

    本文没有新的技术或技巧,只是对Windows打印做一个小结,内容包括:多页打印,打印预览,打印机设置,页面设置。

    一.打印
    using System.Drawing.Printing;

    private System.Drawing.Printing.PrintDocument printDocument;
    this.printDocument.PrintPage += new PrintPageEventHandler(this.printDocument_PrintPage);

    System.Collections.ArrayList InfoList = new ArrayList();
    int TotalPages = 0;
    int CurrentPage = 0;
    const int LinesPerPage = 10;

    private bool ReadyForPrint()
    {
     InfoList.Clear();
     foreach (string line in this.textBox1.Lines)
     {
      InfoList.Add(line);
     }
     
     int Count = InfoList.Count;  
     if(Count>0)
     {  
      TotalPages = Count / LinesPerPage;
      if(Count%LinesPerPage != 0)
      {
       TotalPages ++;
      }
      CurrentPage = 1;
      return true;
     }
     else
     {
      return false;
     }
    }

    private void Print()
    {
     if(ReadyForPrint())
     {
      this.printDocument.Print();
     }
    }
     
    private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)

     if(CurrentPage <= TotalPages)
     {
      Graphics g = e.Graphics;
      Font drawFont = new Font("Arial", 12);
      SolidBrush drawBrush = new SolidBrush(Color.Black);    

      for(int i=0;i<LinesPerPage;i++)
      {
       int line = (CurrentPage-1)*LinesPerPage + i;
       if(line > InfoList.Count-1){break;}

       string str = (string)InfoList[line];
       int x = 100;
       int y = 200 + 50*i;

       g.DrawString(str,drawFont,drawBrush,x,y);
      }

      CurrentPage++;
      if(CurrentPage <= TotalPages)
      {
       e.HasMorePages = true;
      }
      else
      {
       e.HasMorePages = false;
      }
      }
     }
    }

    当调用this.printDocument.Print();时,打印进程开始执行printDocument_PrintPage的内容。当该函数退出时如果e.HasMorePages为true,则打印进程会再次调用printDocument_PrintPage,打印进程不会知道打印总页数和当前打印页,这需要用户自己组织。


    二.打印预览
    private void PreView()
    {
     if(ReadyForPrint())
     {
      PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
      printPreviewDialog.Document = printDocument;
      try
      {
       printPreviewDialog.ShowDialog();
      }
      catch(Exception excep)
      {
       MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
      } 
     }
    }
    打印预览进程同样会调用printDocument_PrintPage,所以必须运行 ReadyForPrint()以便printDocument_PrintPage能正确执行。


    三.打印机设置
    private void SetPrinter()
    {
     PrintDialog printDialog = new PrintDialog();
     printDialog.Document = printDocument;
     printDialog.ShowDialog();
    }   
      

    四.页面设置
    private void SetPage()
    {
     PageSetupDialog pageSetupDialog = new PageSetupDialog();
     pageSetupDialog.Document = printDocument;
     pageSetupDialog.ShowDialog();



    下载源代码

  • 相关阅读:
    flex + bison multiple parsers
    Educational Codeforces Round 95 (Rated for Div. 2)
    python学习笔记 day20 序列化模块(二)
    python学习笔记 day20 常用模块(六)
    python 学习笔记 常用模块(五)
    python学习笔记 day19 常用模块(四)
    python学习笔记 day19 常用模块(三)
    python学习笔记 day19 常用模块(二)
    python学习笔记 day19 作业讲解-使用正则表达式实现计算器
    python学习笔记 day19 常用模块
  • 原文地址:https://www.cnblogs.com/seabluescn/p/627922.html
Copyright © 2011-2022 走看看