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();



    下载源代码

  • 相关阅读:
    获取物料批次特性取值BAPI
    获取域的固定值的函数:DD_DOMVALU…
    CJ20N中对WBS元素执行删除操作时触…
    SM30相关操作
    CL03对应的BAPI(根据类查特性)
    两个数值交换
    char*,string,float,int 转换
    字符串 分割
    C++ 关于I/O
    TCP
  • 原文地址:https://www.cnblogs.com/seabluescn/p/627922.html
Copyright © 2011-2022 走看看