C#打印文本文件实例详解

开发 后端
C#打印文本文件是如何实现的呢?C#打印文本文件用到的类是什么呢?C#打印文本文件实现的效果是什么呢?那么本文就向你介绍具体的内容。

这是一个C#打印文本文件的实现类库,这个程序的功能包括:C#打印文本文件预览、C#打印文本文件。C#文本文件的打印时可以选择打印机,可以指定文本文件打印的页码范围。调用方法非常简单,让我们开始吧:

TextFilePrinter p = new TextFilePrinter(tbxFileName.Text);  
p.View();// 打印预览  
p.Print(); // 打印文件 
  • 1.
  • 2.
  • 3.

使用 TextFilePrinter 类的以下构造函数可以指定打印时使用的字体:

TextFilePrinter(string fileName,   
 
Encoding theEncode, Font theFont)  
  • 1.
  • 2.
  • 3.

下面测试C#打印文本文件实现程序运行时的截图:

程序运行 

点击“预览”按钮后:

点击“预览”按钮 

点击“打印”按钮后:

点击“打印”按钮 

这幅图中的打印机:“Microsoft Office Doument Image Writer”是 Microsoft Office 2003 软件提供一个虚拟打印机,用来调试打印程序非常方便(使用“打印预览”也可以调试打印程序,但“打印预览”只能使用默认的打印机和默认的打印属性,也不能设置页码范围),可以设置打印属性和页码范围以及打印份数。使用它来调试打印程序,可以节省不少打印纸。为建设节约型社会作贡献 :)

 

这幅图就是该虚拟打印机在屏幕上的显示的结果。

这里是测试C#打印文本文件程序的源代码:

// PrintFile.cs - 文件打印程序  
// 编译方法: csc /t:winexe PrintFile.cs TextFilePrinter.cs  
 
using System;  
using System.Drawing;  
using System.Windows.Forms;  
using Skyiv.Util;  
 
namespace Skyiv.Ben.Test  
{  
class PrintFileForm : Form  
{  
TextBox tbxFileName;  
 
public PrintFileForm()  
{  
SuspendLayout();  
 
Button btnFileName = new Button();  
btnFileName.Text = "文件名";  
btnFileName.Location = new Point(10, 10);  
btnFileName.Size = new Size(60, 24);  
btnFileName.Click += new EventHandler(BtnFileName_Click);  
 
Button btnPrint = new Button();  
btnPrint.Text = "打印";  
btnPrint.Location = new Point(75, 10);  
btnPrint.Size = new Size(60, 24);  
btnPrint.Click += new EventHandler(BtnPrint_Click);  
 
Button btnView = new Button();  
btnView.Text = "预览";  
btnView.Location = new Point(140, 10);  
btnView.Size = new Size(60, 24);  
btnView.Click += new EventHandler(BtnView_Click);  
 
tbxFileName = new TextBox();  
tbxFileName.Text = "PrintFile.cs";  
tbxFileName.Location = new Point(10, 44);  
tbxFileName.Size = new Size(190, 20);  
tbxFileName.ReadOnly = true;  
tbxFileName.Anchor = (  
AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right);  
 
Controls.AddRange(new Control[]{  
btnFileName, btnPrint, btnView, tbxFileName});  
Text = "文本文件打印程序";  
ClientSize = new Size(210, 80);  
 
ResumeLayout(false);  
}  
 
void BtnFileName_Click(object sender, EventArgs e)  
{  
OpenFileDialog dlg = new OpenFileDialog();  
if(dlg.ShowDialog() != DialogResult.OK) return;  
tbxFileName.Text = dlg.FileName;  
}  
 
void BtnPrint_Click(object sender, EventArgs e)  
{  
TextFilePrinter p = new TextFilePrinter(tbxFileName.Text);  
p.Print();  
}  
 
void BtnView_Click(object sender, EventArgs e)  
{  
TextFilePrinter p = new TextFilePrinter(tbxFileName.Text);  
p.View();  
}  
 
static void Main()  
{  
Application.Run(new PrintFileForm());  
}  
}  
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.

这里是C#打印文本文件实现类的源代码:

using System;  
using System.Drawing;  
using System.Drawing.Printing;  
using System.Windows.Forms;  
using System.IO;  
using System.Text;  
 
namespace Skyiv.Util  
{  
sealed class TextFilePrinter  
{  
string fileName;  
Encoding theEncode;  
Font theFont;  
StreamReader srToPrint;  
int currPage;  
 
public TextFilePrinter(string fileName)  
this(fileName,   
Encoding.GetEncoding("GB18030"), new Font("新宋体", 10))  
{  
}  
 
public TextFilePrinter(string fileName,   
Encoding theEncode, Font theFont)  
{  
this.fileName = fileName;  
this.theEncode = theEncode;  
this.theFont = theFont;  
}  
 
public void Print()  
{  
using (srToPrint =   
new StreamReader(fileName, theEncode))  
{  
PrintDialog dlg = new PrintDialog();  
dlg.Document = GetPrintDocument();  
dlg.AllowSomePages = true;  
dlg.AllowPrintToFile = false;  
if (dlg.ShowDialog() ==   
DialogResult.OK) dlg.Document.Print();  
}  
}  
 
public void View()  
{  
using (srToPrint =   
new StreamReader(fileName, theEncode))  
{  
PrintPreviewDialog dlg = new PrintPreviewDialog();  
dlg.Document = GetPrintDocument();  
dlg.ShowDialog();  
}  
}  
 
PrintDocument GetPrintDocument()  
{  
currPage = 1;  
PrintDocument doc = new PrintDocument();  
doc.DocumentName = fileName;  
doc.PrintPage +=   
new PrintPageEventHandler(PrintPageEvent);  
return doc;  
}  
 
void PrintPageEvent(object sender,   
PrintPageEventArgs ev)  
{  
string line = null;  
float linesPerPage =   
ev.MarginBounds.Height / theFont.GetHeight(ev.Graphics);  
bool isSomePages =   
ev.PageSettings.PrinterSettings.PrintRange ==   
PrintRange.SomePages;  
if (isSomePages)  
{  
while (currPage   
< ev.PageSettings.PrinterSettings.FromPage)  
{  
for (int count = 0; count   
< linesPerPage; count++)  
{  
line = srToPrint.ReadLine();  
if (line == nullbreak;  
}  
if (line == nullreturn;  
currPage++;  
}  
if (currPage >   
ev.PageSettings.PrinterSettings.ToPage) return;  
}  
for (int count = 0; count < linesPerPage; count++)  
{  
line = srToPrint.ReadLine();  
if (line == nullbreak;  
ev.Graphics.DrawString(line,  
 theFont, Brushes.Black, ev.MarginBounds.Left,  
ev.MarginBounds.Top + (  
count * theFont.GetHeight(ev.Graphics)),   
new StringFormat());  
}  
currPage++;  
if (isSomePages &&  
 currPage > ev.PageSettings.PrinterSettings.ToPage) return;  
if (line != null) ev.HasMorePages = true;  
}  
}  
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.

这些程序都相当简当明了,这里就不再解释了。

这个类库有个缺点:当C#文本文件中的一行不能在打印纸的一行中打印完时,该行的后半部就丢失了。

C#打印文本文件的具体内容就向你介绍到这里,希望对你了解和学习C#打印文本文件有所帮助。

【编辑推荐】

  1. C#实现打印功能实例详解
  2. 浅析C#打印和C#打印预览的实现
  3. 全面解析C#实现打印功能
  4. 实现C#打印窗体实例详解
  5. 实现C#打印文档实例详解
责任编辑:仲衡 来源: 博客园
相关推荐

2009-08-19 17:44:15

C#操作文本文件

2009-08-20 10:17:27

C#操作文本文件

2009-08-06 18:33:45

C#处理文本文件

2009-09-02 19:13:08

C#处理文本文件

2009-08-20 09:58:06

C#操作文本文件

2009-09-02 19:08:03

C#实现读取文本文件

2009-08-20 09:15:20

C#操作文本文件

2009-08-12 17:59:48

C#读取文本文

2009-08-20 09:26:14

C#操作文本文件

2009-08-12 17:42:57

C#读文本文件

2010-02-01 14:26:50

C++读写文本文件

2010-04-30 17:38:31

Unix文本

2009-08-26 11:07:36

C#打印窗体

2009-08-26 11:32:37

C#打印文档

2009-08-26 09:22:44

C#实现打印功能

2021-11-29 09:46:11

FileReaderJava开发

2009-08-26 14:31:08

C#打印文件

2010-01-15 10:05:35

VB.NET文件对象

2009-09-04 15:56:35

写入文本文件

2009-08-18 17:05:08

C#操作xml文件
点赞
收藏

51CTO技术栈公众号