![cover](https://img-blog.csdnimg.cn/img_convert/e19600e0c7a54c90b8bb4065ad4c5aff.png)
C#的Windows打印控件(PageSetupDialog、PrintDialog、PrintDocument、PrintPreviewControl和PrintPreviewDialog)
应用程序中提供了一组打印控件,包括和控件,开发程序时,开发人员可以直接使用这些控件控制打印的文本和数据格式。一、
目录
一、PageSetupDialog 控件
PageSetupDialog控件用于设置页面详细信息以便打印。允许用户设置边框和边距调整量、页眉和页脚以及纵向或横向打印。
在创建PageSetupDialog类的实例时,读/写属性将被设置为初始值。将AllowMargins、AllowOrientation、AllowPaper、AllowPrinter、ShowNetwork属性设置为true,将Document、MinMargins、PageSettings、PrinterSettings属性设置为null,将ShowHelp属性设置为false。
属 性 | 说 明 |
Documen | 获取页面设置的PrintDocument类对象 |
AllowMargins | 是否启用对话框的边距部分 |
AllowOrientation | 是否启用对话框的方向部分(横向对纵向) |
AllowPaper | 是否启用对话框的纸张部分(纸张大小和纸张来源 |
AllowPrinter | 是否启用“打印机”按钮 |
1.Document属性
Document属性用于获取页面设置的PrintDocument。语法如下:
public PrintDocument Document{get;set;}
属性值:从中获得页面设置的PrintDocument。
2.AllowMargins属性
AllowMargins属性用于设置是否启用对话框的边距部分。语法如下:
public bool AllowMargins {get;set;}
属性值:如果启用了对话框的边距部分,则为true;否则为false。默认为true。
3.AllowOrientation属性
AllowOrientation属性用于设置是否启用对话框的方向部分(横向对纵向)。语法如下:
public bool AllowOrientation{get;set;}
属性值:如果启用了对话框的方向部分,则为true;否则为false。默认为true。
4.AllowPaper属性
AllowPaper属性用于设置是否启用对话框的纸张部分(纸张大小和纸张来源)。语法如下:
public bool AllowPaper{get;set;}
属性值:如果启用了对话框的纸张部分,则为true;否则为false。默认为true。
5.AllowPrinter属性
AllowPrinter属性用于设置是否启用“打印机”按钮。语法如下:
public bool AllowPrinter{get;set;}
6.示例源码及生成效果
// 设置PageSetupDialog控件的相应属性
// VS 2022,Windows窗体应用,.NET 8.0,不需要设计器
using System.Drawing.Printing;
namespace _01
{
public partial class Form1 : Form
{
private PageSetupDialog? pageSetupDialog1;
private readonly PrintDocument printDocument1;
private readonly Button? button1;
public Form1()
{
InitializeComponent();
printDocument1 = new PrintDocument();
//
// button1
//
button1 = new Button
{
Location = new Point(150, 12),
Name = "button1",
Size = new Size(75, 23),
TabIndex = 0,
Text = "页面设置",
UseVisualStyleBackColor = true
};
button1.Click += new EventHandler(Button1_Click);
//
// Form1
//
AutoScaleDimensions = new SizeF(6F, 12F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(400, 300);
Controls.Add(button1);
Name = "Form1";
Text = "页面设置";
ResumeLayout(false);
}
private void Button1_Click(object? sender, EventArgs e)
{
pageSetupDialog1 = new PageSetupDialog
{
Document = printDocument1,
AllowMargins = true, //启用边距
AllowOrientation = true,
AllowPaper = true,
AllowPrinter = true
};
pageSetupDialog1.ShowDialog(); //显示页面设置对话框
}
}
}
二、PrintDialog控件
PrintDialog控件用于选择打印机、选择要打印的页以及确定其他与打印相关的设置。通过PrintDialog控件可以选择全部打印、打印选定的页范围或打印选定内容。
PrintDialog类与System.Windows.Forms.PrintDialog不同,后者用于Windows窗体应用程序。
属 性 | 说 明 |
Documen | 获取PrinterSettings类的PrintDocument对象 |
AllowCurrentPage | 是否显示“当前贞”选项按钮 |
AllowPrintToFile | 是否启用“打印到文件”复选框 |
AllowSelection | 是否启用“选择”选项按钮 |
AllowSomePages | 是否启用“页”选项按钮 |
1.Document属性
Document属性用于获取PrinterSettings的PrintDocument对象。语法如下:
public PrintDocument Document {get;set;}
属性值:PrinterSettings的PrintDocument对象。
2.AllowCurrentPage属性
AllowCurrentPage属性用于设置是否显示“当前页”选项按钮。语法如下:
public bool AllowCurrentPage {get;set;}
属性值:如果显示“当前页”选项按钮,则为true;否则为false。默认为false。
3.AllowPrintToFile属性
AllowPrintToFile属性用于设置是否启用“打印到文件”复选框。语法如下:
public bool AllowPrintToFile{get;set;}
属性值:如果启用“打印到文件”复选框,则为true;否则为false。默认为true。
4.AllowSelection属性
AllowSelection属性用于设置是否启用“选择”选项按钮。语法如下:
public bool AllowSelection{get;set;}
属性值:如果启用“选择”选项按钮,则为true;否则为false。默认为false。
5.AllowSomePages属性
AllowSomePages属性用于设置是否启用“页”选项按钮。语法如下:
public bool AllowSomePages {get;set;}
属性值:如果启用“页”选项按钮,则为true;否则为false。默认为false。
6.示例源码及生成效果
//打印机设置
//VS2022,Windows窗体应用,不用设计器
using System.Drawing.Printing;
namespace _02
{
public partial class Form1 : Form
{
private readonly Button button1;
private readonly PrintDialog printDialog1;
private PrintDocument printDocument1;
public Form1()
{
InitializeComponent();
printDocument1 = new PrintDocument();
//
// button1
//
button1 = new Button
{
Location = new Point(98, 12),
Name = "button1",
Size = new Size(85, 23),
TabIndex = 0,
Text = "打印机设置",
UseVisualStyleBackColor = true
};
button1.Click += new EventHandler(Button1_Click);
//
// printDialog1
//
printDialog1 = new PrintDialog
{
UseEXDialog = true
};
//
// Form1
//
AutoScaleDimensions = new SizeF(6F, 12F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(300, 250);
Controls.Add(button1);
Name = "Form1";
Text = "打印机设置";
}
private void Button1_Click(object? sender, EventArgs e)
{
printDialog1.Document = printDocument1;
printDialog1.AllowPrintToFile = true; //启用"打印到文件"复选框
printDialog1.AllowCurrentPage = true; //显示“当前项”按钮
printDialog1.AllowSelection = true; //启用"选择按钮"
printDialog1.AllowSomePages = true; //启用"页"按钮
printDialog1.ShowDialog();
}
}
}
三、PrintDocument控件
PrintDocument控件设置打印的文档。PrintDocument控件中比较常见的是控件的PrintPage事件和Print()方法。PrintPage事件在需要为当前页打印的输出时发生。调用Print()方法开始文档的打印进程。
在打印开始后,通过DefaultPageSettings属性更改页设置对正在打印的页没有任何影响。
// 打印文件设置
// VS2022,Windows窗体应用,不用设计器
using System.Drawing.Printing;
namespace _03
{
public partial class Form1 : Form
{
private readonly Button button1;
private readonly PrintDocument printDocument1;
private readonly PrintPreviewDialog printPreviewDialog1;
public Form1()
{
InitializeComponent();
System.ComponentModel.ComponentResourceManager resources = new(typeof(Form1));
printDocument1 = new PrintDocument();
//
// button1
//
button1 = new Button
{
Location = new Point(112, 12),
Name = "button1",
Size = new Size(75, 23), //横坐标=(窗体有效宽-按钮宽)/2
TabIndex = 0,
Text = "打印",
UseVisualStyleBackColor = true
};
button1.Click += new EventHandler(Button1_Click);
//
// printDocument1
//
printDocument1.PrintPage += new PrintPageEventHandler(PrintDocument1_PrintPage);
//
// printPreviewDialog1
//
printPreviewDialog1 = new PrintPreviewDialog
{
AutoScrollMargin = new Size(0, 0),
AutoScrollMinSize = new Size(0, 0),
ClientSize = new Size(400, 300),
Document = printDocument1,
Enabled = true,
Icon = resources.GetObject("printPreviewDialog1.Icon") as Icon,
Name = "printPreviewDialog1",
Visible = false
};
//
// Form1
//
AutoScaleDimensions = new SizeF(6F, 12F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(300, 250);
Controls.Add(button1);
Name = "Form1";
Text = "打印文件设置";
}
private void PrintDocument1_PrintPage(object? sender, PrintPageEventArgs e)
{
e.Graphics!.DrawString("蝶恋花", new Font("宋体", 15), Brushes.Black, 350, 80);
e.Graphics!.DrawLine(new Pen(Color.Black, (float)3.00), 100, 185, 720, 185);
e.Graphics!.DrawString("伫倚危楼风细细,望极春愁,黯黯生天际。", new Font("宋体", 12), Brushes.Black, 110, 195);
e.Graphics!.DrawString("草色烟光残照里,无言谁会凭阑意。", new Font("宋体", 12), Brushes.Black, 110, 220);
e.Graphics!.DrawString("拟把疏狂图一醉,对酒当歌,强乐还无味。", new Font("宋体", 12), Brushes.Black, 110, 245);
e.Graphics!.DrawString("衣带渐宽终不悔。为伊消得人憔悴。", new Font("宋体", 12), Brushes.Black, 110, 270);
e.Graphics!.DrawLine(new Pen(Color.Black, (float)3.00), 100, 300, 720, 300);
}
private void Button1_Click(object? sender, EventArgs e)
{
if (MessageBox.Show("是否要预览打印文档", "打印预览", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
printPreviewDialog1.UseAntiAlias = true;
printPreviewDialog1.Document = printDocument1; //设置要预览的文档
printPreviewDialog1.ShowDialog();
}
else
{
printDocument1.Print(); //调用Print方法直接打印文档
}
}
}
}
四、PrintPreviewControl控件
PrintPreviewControl控件用于按文档打印时的外观显示文档。该控件只为用户提供一个预览打印文档的功能,因此通常只有在希望编写自己的打印预览用户界面时才使用PrintPreviewControl控件。PrintPreviewControl控件比较重要的是Document属性,该属性用于设置要预览的文档。 语法如下:
public PrintDocument Document {get;set;}
属性值:PrintDocument表示要预览的文档
在创建PrintPreviewControl类的实例时,一些读/写属性被设置为初始值。如AutoZoom为true、Document为null、Columns为1、Rows为0、StartPage为0。
// 打印预览
// VS2022,Windows窗体应用,不用设计器
using System.Drawing.Printing;
namespace _04
{
public partial class Form1 : Form
{
//private const string Value = "\\";
private readonly PrintPreviewControl printPreviewControl1;
private readonly PrintDocument printDocument1;
public Form1()
{
InitializeComponent();
//
// printPreviewControl1
//
printPreviewControl1 = new PrintPreviewControl
{
Location = new Point(12, 12),
Name = "printPreviewControl1",
Size = new Size(500, 420),
TabIndex = 0
};
//
// printDocument1
//
printDocument1 = new PrintDocument();
printDocument1.PrintPage += new PrintPageEventHandler(PrintDocument1_PrintPage);
//
// Form1
//
AutoScaleDimensions = new SizeF(6F, 12F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(520, 445);
Controls.Add(printPreviewControl1);
Name = "Form1";
Text = "打印预览控制";
Load += new EventHandler(Form1_Load);
}
private void Form1_Load(object? sender, EventArgs e)
{
printPreviewControl1.Document = printDocument1;
}
private void PrintDocument1_PrintPage(object? sender, PrintPageEventArgs e)
{
//string str = Application.StartupPath[..Application.StartupPath[..Application.StartupPath.LastIndexOf(Value)].LastIndexOf(Value)];
string str = Application.StartupPath;
str += @"\img.jpg";
e.Graphics!.DrawImage(Image.FromFile(str), 10, 10, 607, 452);
}
}
}
调整DrawImage()方法里的参数宽度和高度,就会让输出的图片适应打印预览区域。为了不使图片比例失真,要做到参数宽度和高度与打印预览区域尤其与图片的像素比例一致。
五、PrintPreviewDialog控件
PrintPreviewDialog控件用于显示文档打印后的外观。该控件包含此对话打印、放大、显示一页或多页和关闭框的按钮。PrintPreviewDialog控件的常见属性和方法有Document属性、UseAntiAlias属性和ShowDialog()方法。
1.Document属性
Document属性用于设置要预览的文档。语法如下:
public PrintDocument Document{get;set;}
属性值:PrintDocument表示要预览的文档。
2.UseAntiAlias属性
UseAntiAlias属性用于设置打印是否使用操作系统的防锯齿功能。语法如下:
public bool UseAntiAlias{get;set;}
属性值:如果使用防锯齿功能,则为true;否则为false。
3.ShowDialog()方法
ShowDialog()方法将窗体显示为模式对话框,并将当前活动窗口设置为它的所有者。语法如下:
public DialogResult ShowDialog()
返回值:DialogResult值之一。
![Logo](https://devpress.csdnimg.cn/79de2bf0b7994defa4242ef90d5513fa.jpg)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)