C#打印文件的簡單實例
作者:佚名
C#打印文件是按照文件內(nèi)的內(nèi)容進(jìn)行打印的過程,這其中需要.NET Framework組件的部分功能進(jìn)行支持,希望本文能對大家有所幫助。
C#打印文件的過程中,需要對所打印文件進(jìn)行預(yù)覽,對版式也有所要求。C#打印文件期間,也有可能出現(xiàn)錯誤推出,這些都是我們開發(fā)人員需要考慮的問題。
以下是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>
- /// 必需的設(shè)計器變量。
- /// </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 窗體設(shè)計器支持所必需的
- //
- InitializeComponent();
- //
- // TODO: 在 InitializeComponent 調(diào)用后添加任何構(gòu)造函數(shù)代碼
- //
- }
- /**//// <summary>
- /// 清理所有正在使用的資源。
- /// </summary>
- protected override void Dispose( bool disposing )
- ...{
- if( disposing )
- ...{
- if (components != null)
- ...{
- components.Dispose();
- }
- }
- base.Dispose( disposing );
- }
- Windows 窗體設(shè)計器生成的代碼#region Windows 窗體設(shè)計器生成的代碼
- /**//// <summary>
- /// 設(shè)計器支持所需的方法 - 不要使用代碼編輯器修改
- /// 此方法的內(nèi)容。
- /// </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 = "打印預(yù)覽...";
- this.mnuFilePrintPreview.Click += new System.EventHandler(this.mnuFilePrintPreview_Click);
- //
- // mnuFilePageSetup
- //
- this.mnuFilePageSetup.Index = 1;
- this.mnuFilePageSetup.Text = "頁面設(shè)置...";
- 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>
- /// 應(yīng)用程序的主入口點。
- /// </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("打印結(jié)束");
- }
- 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; //本頁已打印行數(shù)
- 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(); //開始執(zhí)行打印
- }
- }
- 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#打印文件的簡單實例就介紹到這里。
【編輯推薦】
責(zé)任編輯:彭凡
來源:
CSDN