C#打印文件的过程中,需要对所打印文件进行预览,对版式也有所要求。C#打印文件期间,也有可能出现错误推出,这些都是我们开发人员需要考虑的问题。
以下是C#打印文件的代码。
- using System;
- using System.Drawing;
- using System.Collections;
- using System.ComponentModel;
- using System.Windows.Forms;
- using System.Data;
- using System.IO;
- using System.Text;
- using System.Drawing.Printing;
- namespace PrintDemo
- ...{
- /**//// <summary>
- /// Form1 的摘要说明。
- /// </summary>
- public class DemoForm : System.Windows.Forms.Form
- ...{
- private System.Windows.Forms.TextBox txtDoc;
- private System.Windows.Forms.MainMenu mnuMain;
- private System.Windows.Forms.MenuItem mnuFile;
- private System.Windows.Forms.MenuItem mnuFileOpen;
- private System.Windows.Forms.MenuItem mnuFilePrint;
- private System.Windows.Forms.MenuItem mnuFormat;
- private System.Windows.Forms.MenuItem mnuFormatFont;
- private System.Windows.Forms.OpenFileDialog dlgOpen;
- private System.Windows.Forms.FontDialog dlgFont;
- private System.Drawing.Printing.PrintDocument pdoc;
- /**//// <summary>
- /// 必需的设计器变量。
- /// </summary>
- private System.ComponentModel.Container components = null;
- private System.Windows.Forms.MenuItem mnuFilePrintPreview;
- private System.Windows.Forms.MenuItem mnuFilePageSetup;
- private System.Windows.Forms.PrintPreviewDialog ppd;
- private System.Windows.Forms.PageSetupDialog dlgPageSetup;
- private System.Windows.Forms.PrintDialog dlgPrinterSetup;
- private int totalLines;
- public DemoForm()
- ...{
- //
- // Windows 窗体设计器支持所必需的
- //
- InitializeComponent();
- //
- // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
- //
- }
- /**//// <summary>
- /// 清理所有正在使用的资源。
- /// </summary>
- protected override void Dispose( bool disposing )
- ...{
- if( disposing )
- ...{
- if (components != null)
- ...{
- components.Dispose();
- }
- }
- base.Dispose( disposing );
- }
- Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码
- /**//// <summary>
- /// 设计器支持所需的方法 - 不要使用代码编辑器修改
- /// 此方法的内容。
- /// </summary>
- private void InitializeComponent()
- ...{
- System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(DemoForm));
- this.txtDoc = new System.Windows.Forms.TextBox();
- this.mnuMain = new System.Windows.Forms.MainMenu();
- this.mnuFile = new System.Windows.Forms.MenuItem();
- this.mnuFileOpen = new System.Windows.Forms.MenuItem();
- this.mnuFilePrint = new System.Windows.Forms.MenuItem();
- this.mnuFormat = new System.Windows.Forms.MenuItem();
- this.mnuFormatFont = new System.Windows.Forms.MenuItem();
- this.dlgOpen = new System.Windows.Forms.OpenFileDialog();
- this.dlgFont = new System.Windows.Forms.FontDialog();
- this.pdoc = new System.Drawing.Printing.PrintDocument();
- this.mnuFilePrintPreview = new System.Windows.Forms.MenuItem();
- this.mnuFilePageSetup = new System.Windows.Forms.MenuItem();
- this.ppd = new System.Windows.Forms.PrintPreviewDialog();
- this.dlgPageSetup = new System.Windows.Forms.PageSetupDialog();
- this.dlgPrinterSetup = new System.Windows.Forms.PrintDialog();
- this.SuspendLayout();
- //
- // txtDoc
- //
- this.txtDoc.Dock = System.Windows.Forms.DockStyle.Fill;
- this.txtDoc.Location = new System.Drawing.Point(0, 0);
- this.txtDoc.Multiline = true;
- this.txtDoc.Name = "txtDoc";
- this.txtDoc.ScrollBars = System.Windows.Forms.ScrollBars.Both;
- this.txtDoc.Size = new System.Drawing.Size(560, 309);
- this.txtDoc.TabIndex = 0;
- this.txtDoc.Text = "";
- this.txtDoc.WordWrap = false;
- this.txtDoc.TextChanged += new System.EventHandler(this.txtDoc_TextChanged);
- //
- // mnuMain
- //
- this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] ...{
- this.mnuFile,
- this.mnuFormat});
- //
- // mnuFile
- //
- this.mnuFile.Index = 0;
- this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] ...{
- this.mnuFileOpen,
- this.mnuFilePageSetup,
- this.mnuFilePrintPreview,
- this.mnuFilePrint});
- this.mnuFile.Text = "文件(&F)";
- //
- // mnuFileOpen
- //
- this.mnuFileOpen.Index = 0;
- this.mnuFileOpen.Text = "打开(&O)...";
- this.mnuFileOpen.Click += new System.EventHandler(this.mnuFileOpen_Click);
- //
- // mnuFilePrint
- //
- this.mnuFilePrint.Index = 3;
- this.mnuFilePrint.Text = "打印(&P)...";
- this.mnuFilePrint.Click += new System.EventHandler(this.mnuFilePrint_Click);
- //
- // mnuFormat
- //
- this.mnuFormat.Index = 1;
- this.mnuFormat.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] ...{
- this.mnuFormatFont});
- this.mnuFormat.Text = "格式(&F)";
- //
- // mnuFormatFont
- //
- this.mnuFormatFont.Index = 0;
- this.mnuFormatFont.Text = "字体(&O)";
- this.mnuFormatFont.Click += new System.EventHandler(this.mnuFormatFont_Click);
- //
- // dlgOpen
- //
- this.dlgOpen.Filter = "文本文件|*.txt|所有文件|*.*";
- //
- // pdoc
- //
- this.pdoc.DocumentName = "abc";
- this.pdoc.BeginPrint += new System.Drawing.Printing.PrintEventHandler(this.pdoc_BeginPrint);
- this.pdoc.EndPrint += new System.Drawing.Printing.PrintEventHandler(this.pdoc_EndPrint);
- this.pdoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.pdoc_PrintPage);
- //
- // mnuFilePrintPreview
- //
- this.mnuFilePrintPreview.Index = 2;
- this.mnuFilePrintPreview.Text = "打印预览...";
- this.mnuFilePrintPreview.Click += new System.EventHandler(this.mnuFilePrintPreview_Click);
- //
- // mnuFilePageSetup
- //
- this.mnuFilePageSetup.Index = 1;
- this.mnuFilePageSetup.Text = "页面设置...";
- this.mnuFilePageSetup.Click += new System.EventHandler(this.mnuFilePageSetup_Click);
- //
- // ppd
- //
- this.ppd.AutoScrollMargin = new System.Drawing.Size(0, 0);
- this.ppd.AutoScrollMinSize = new System.Drawing.Size(0, 0);
- this.ppd.ClientSize = new System.Drawing.Size(400, 300);
- this.ppd.Document = this.pdoc;
- this.ppd.Enabled = true;
- this.ppd.Icon = ((System.Drawing.Icon)(resources.GetObject("ppd.Icon")));
- this.ppd.Location = new System.Drawing.Point(317, 17);
- this.ppd.MinimumSize = new System.Drawing.Size(375, 250);
- this.ppd.Name = "ppd";
- this.ppd.TransparencyKey = System.Drawing.Color.Empty;
- this.ppd.Visible = false;
- //
- // dlgPageSetup
- //
- this.dlgPageSetup.Document = this.pdoc;
- //
- // dlgPrinterSetup
- //
- this.dlgPrinterSetup.Document = this.pdoc;
- //
- // DemoForm
- //
- this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
- this.ClientSize = new System.Drawing.Size(560, 309);
- this.Controls.Add(this.txtDoc);
- this.Menu = this.mnuMain;
- this.Name = "DemoForm";
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
- this.Text = "打印";
- this.ResumeLayout(false);
- }
- #endregion
- /**//// <summary>
- /// 应用程序的主入口点。
- /// </summary>
- [STAThread]
- static void Main()
- ...{
- Application.Run(new DemoForm());
- }
- private void mnuFileOpen_Click(object sender, System.EventArgs e)
- ...{
- if (dlgOpen.ShowDialog()==DialogResult.OK)
- ...{
- StreamReader sr=null;
- try
- ...{
- sr=new StreamReader(dlgOpen.FileName,Encoding.Default,true);
- txtDoc.Text=sr.ReadToEnd();
- }
- catch
- ...{
- MessageBox.Show("打开文件失败!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
- }
- finally
- ...{
- if (sr!=null) sr.Close();
- }
- }
- }
- private void mnuFormatFont_Click(object sender, System.EventArgs e)
- ...{
- dlgFont.Font=txtDoc.Font;
- if (dlgFont.ShowDialog()==DialogResult.OK)
- ...{
- txtDoc.Font=dlgFont.Font;
- }
- }
- private void pdoc_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
- ...{
- //MessageBox.Show("开始打印啦");
- }
- private void pdoc_EndPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
- ...{
- //MessageBox.Show("打印结束");
- }
- private void pdoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
- ...{
- Graphics g=e.Graphics;
- float lineHeight=txtDoc.Font.GetHeight(g);
- int linesPerPage=(int)(e.MarginBounds.Height/lineHeight);
- int count=0; //本页已打印行数
- while (count<linesPerPage && totalLines<txtDoc.Lines.Length)
- ...{
- g.DrawString(txtDoc.Lines[totalLines],txtDoc.Font,Brushes.Black,e.MarginBounds.X,e.MarginBounds.Y+lineHeight*count);
- count++;
- totalLines++;
- }
- if (totalLines<txtDoc.Lines.Length)
- ...{
- e.HasMorePages=true;
- }
- else
- ...{
- e.HasMorePages=false;
- totalLines=0;
- }
- }
- private void mnuFilePrint_Click(object sender, System.EventArgs e)
- ...{
- if (dlgPrinterSetup.ShowDialog()==DialogResult.OK)
- ...{
- pdoc.Print(); //开始执行打印
- }
- }
- private void txtDoc_TextChanged(object sender, System.EventArgs e)
- ...{
- }
- private void mnuFilePrintPreview_Click(object sender, System.EventArgs e)
- ...{
- ppd.ShowDialog();
- }
- private void mnuFilePageSetup_Click(object sender, System.EventArgs e)
- ...{
- Margins oldMargins=dlgPageSetup.PageSettings.Margins;
- dlgPageSetup.PageSettings.Margins=new Margins((int)(oldMargins.Left*2.54),(int)(oldMargins.Right*2.54),(int)(oldMargins.Top*2.54),(int)(oldMargins.Bottom*2.54));
- if (dlgPageSetup.ShowDialog()==DialogResult.Cancel)
- ...{
- dlgPageSetup.PageSettings.Margins=oldMargins;
- }
- }
- }
- }
C#打印文件的简单实例就介绍到这里。
【编辑推荐】