c#怎么实现打印windows窗体代码

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-30
c#中如何打印窗体

Bitmap memoryImage = null; //定义一个图片
public static PrintDocument printDocument = new PrintDocument(); //定义一个Print文档对象
private void CaptureScreen()//截屏
{
Form form = this;
if (form != null)
{
Graphics mygraphics = form.CreateGraphics();
memoryImage = new Bitmap(form.Width, form.Height, mygraphics);
Graphics memoryGraphics = Graphics.FromImage(memoryImage);
memoryGraphics.CopyFromScreen(form.Location.X, form.Location.Y, 0, 0, form.Size);
}
}

在窗体的load里面写:

printDocument.PrintPage += new PrintPageEventHandler(PrintDocument_PrintPage);
printDocument.Print(); //打印

加上这个事件处理:
void PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
{
e.Graphics.Clear(Color.White);
e.Graphics.DrawImage(memoryImage, 0, 0);
}



代码经过测试了。若还不明白,Hi我或email:lijiuning(a)gmail.com

把你的form项目编译的时候设置一下编译输出类型就行 如图

使用控件执行打印。实现打印的主要组件是“PrintDocument”控件。使用这个控件调用“Print”函数实现“PrintPage”事件。如下是常规命令:
打印事件:
private void tsmiPrint_Click(object sender, EventArgs e){
printDialog1.Document = ThePrintDocument;
string strTest = this.richTextBox1.Text;
myReader = new StringReader(strTest);
if (printDialog1.ShowDialog() == DialogResult.OK){
this.ThePrintDocument.Print();
}
}

打印页事件:
private void ThePrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e){
float linesPerPage = 0;
float yPosition = 0;
int count = 0;
float leftMargin = e.MarginBounds.Left;
float topMargin = e.MarginBounds.Top;
string line = null;

Font printFont = this.richTextBox1.Font;
SolidBrush myBrush = new SolidBrush(Color.Black);
linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics);
while (count < linesPerPage && ((line = myReader.ReadLine()) != null)){
yPosition = topMargin + (count * printFont.GetHeight(e.Graphics));
e.Graphics.DrawString(line, printFont, myBrush, leftMargin, yPosition,
new StringFormat());
count++;
}
if (line != null)
e.HasMorePages = true;
else
e.HasMorePages = false;
myBrush.Dispose();
}

点击“Print”菜单将调用“PrintFile_Click”。这条线路首先访问PrintDialog对象以便文档准备打印。使用“ShowDialog”对话框以便用户能够设置打印属性并决定是否需要打印。在调用“ThePrintDocument.Print方法”后将开始打印过程。系统自动调用“PrintPage”事件打印需要的页面信息。“PrintPageEventArgs”参数“ev”包含打印设备内容,“ev.Graphics”用户绘制打印机。在这个例子中我们将从Rich Text Edit控件中使用StringReader逐行读取信息。 “StringReader”类类似“stream”一样处理字符串并可以以使用ReadLine方法从text edit控件中逐行读取信息。可以根据边框接收位置及字体的大小。我们感兴趣的是记事本可以预览打印机的字体长度,通过使用GetHeight方法(printFont.GetHeight(ev.Graphics()))获得打印机设备内容。因为在屏幕上字体的象素和打印机上的象素是不同的。“PrintPageEventArg”的“HasMorepages”表示连续读取“PrintPage”事件中读取在textbox中比当前页面多的行。
打印预览:
private void tsmiPrintView_Click(object sender, EventArgs e){
try{
string strText = this.richTextBox1.Text;
myReader = new StringReader(strText);
PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog();
printPreviewDialog1.Document = this.ThePrintDocument;
printPreviewDialog1.ShowDialog();
}catch (Exception exp){
Console.WriteLine(exp.Message.ToString());
}
}

示例及详细代码:http://www.dingos.cn/index.php?topic=247.0

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Drawing.Printing;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Issuance : Form
{//实现C 打印窗体
private Button printButton = new Button();
private PrintDocument printDocument1 = new PrintDocument();

public Issuance()
{
printButton.Text = "Print Form";
printButton.Click += new EventHandler(printButton_Click);
printDocument1.PrintPage +=
new PrintPageEventHandler(printDocument1_PrintPage);
this.Controls.Add(printButton);
}

void printButton_Click(object sender, EventArgs e)
{
CaptureScreen();
printDocument1.Print();
}
//实现C 打印窗体
Bitmap memoryImage;

private void CaptureScreen()
{
Graphics myGraphics = this.CreateGraphics();
Size s = this.Size;
memoryImage = new Bitmap(s.Width, s.Height, myGraphics);
Graphics memoryGraphics = Graphics.FromImage(memoryImage);
memoryGraphics.CopyFromScreen(
this.Location.X, this.Location.Y, 0, 0, s);
}

private void printDocument1_PrintPage(System.Object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(memoryImage, 0, 0);
}

//实现C 打印窗体

public static void Main()
{
Application.Run(new Form1());
}
}
}

C#里有个打印控件 ,你去找找
(水晶报表就是一种)

PrintDocument 类中可以实现类似的功能,可以查一下MSDN

  • c的正确发音
    答:c在英文字母中读作“ [si:]”。“c”是英语字母中的第三个字母,大写为“C”,小写为“c”。字母的含义:1、在数学及计算机科学中,表示十六进制的12。2、在化学中,表示碳的化学符号。3、在乐理中,表示音阶中的C音。4、在国际单位制的电荷中表示库仑。5、在营养学中,表示维生素C。6、在生...
  • c表示的三种意义
    答:C有三种含义:碳元素、一个碳原子、金刚石(或者石墨)。碳(C)ⅣA族元素。可形成种类繁多的有机化合物,还能形成一系列无机化合物。国际纯粹与应用化学联合会1961年将12C=12确定为相对原子质量的相对标准。天然碳化合物中12C占98.892%(原子分数)、13C占1.108%(原子分数)。14C是在宇宙射线的影响...
  • c是什么?
    答:c是字母符号。C(大写) 、c(小写)是英文字母顺数第三个,俄语字母顺数第19个。例如:英语单词cloud和“苏联”的俄语缩写СССР的第一个字母就是c。起源:(1)字母C的产生可能是由于一个投掷棒的符号,像在古埃及的象形文字里,并很早出现在闪族的书面当中-大约在公元前1500年的西奈半岛。(...
  • c的意思是怎么样的?
    答:c的意思:1、在化学中,表示碳的化学符号。2、在乐理中,表示:音阶中的C音,调号中于C音开始的音乐的C大调及C小调,拍子记号中的4/4拍子。3、在罗马数字中,表示100。4、在国际单位制中,表示电荷量的单位“库仑”。5、在计算机科学中,有C语言、C++、C#、Objective-C等。6、在营养学中,表示...
  • c在化学中指什么意思
    答:C在化学中有两种含义:1、表示浓度,单位为mol/L,计算式为:C=n/V. C=1000ρω/M。含义:以1升溶液中所含溶质的摩尔数表示的浓度。以单位体积里所含溶质的物质的量(摩尔数)来表示溶液组成的物理量,叫作该溶质的摩尔浓度,又称该溶质物质的量浓度。溶质含量越多,浓度越大。浓度可以用一定...
  • c是什么意思数学
    答:C是数学中的一种常数,常出现在各种式子中。其代表的是一个固定的数值,通常用来表示某种特定的物理量或者数学常量。C的意义在不同的上下文中有所不同,比如C可能代表光速,圆周率或者其他数学上的常量。在数学上,C代表了需要用作计算基础的一些重要数值,因此不同的C值被广泛应用于各种数学分支中。在...
  • c在爱情的含义是什么
    答:c在爱情的含义是什么,用各种各样的符号来代替我们想要表达的真实意思是我们对一份感情的含蓄表示,世间万物存在的意义就是我们赋予的内涵,下面分享c在爱情的含义是什么。 c在爱情的含义是什么1 C指的是现在流行的C型爱情观。 C型爱情观 “C型爱情观”指的是对现代爱情关一种新的定义。在爱情中,有进有退、...
  • c的大写字母是什么?
    答:c的大写字母是C。占四线格的中格,注意要留出一个缺口,不要封住。26个字母英语大小写分别为Aa、Bb、Cc、Dd、Ee、Ff、Gg、Hh、Ii、Jj、Kk、Ll、Mm、Nn、Oo、Pp、Qq、Rr、Ss、Tt、Uu、Vv、Ww、Xx、Yy、Zz。书写英语字母时要按照字母的笔画和字母在三个格中所占据的位置书写,同时每个字母都...
  • c是什么意思的缩写?
    答:c是什么意思的缩写1 C是cell英语名称的简称,意思是细胞。词汇解析:cell 基本词汇 英 [sel] 美 [sel]n. 单人牢房;小房间;细胞;蜂房的巢室;电池;政治小组;(计算机电子表格的)单元格;手机 The prisoner was locked in a cell.那囚犯被关在单人牢房内。diseased cell 发生病变的细胞 d...
  • 为什么c是组合?
    答:C表示的是组合。C右上角是3,右下角是5,就是说从5个东西选出3个东西的排列组合(与顺序无关)有多少个,计算方法:5!/3!*(5-3)!=1*2*3*4*5/1*2*3*1*2=10 跟据任意两边和大于第三边。即为从5个数字里面选出3个数字的组合,有10个,减去不成立的(3,4,7)1个;加上等腰三角...