我是用Graphics来画出要打印的内容的,一次要连续打印好几张(不同的内容),用了e.HasMorePages = true;但是却变成死循环了。
比如,我第一页要打印AA,第二页要打印CC,第三页要打印DD,该怎么实现啊。
比如,我第一页要打印AA,第二页要打印CC,第三页要打印DD,该怎么实现啊。
解决方案 »
- 我将项目的版本由3.5降为2.0后,出现报错,如何解决?(有图)
- 如何在winfrom里转换中文网址成UTF-8
- datagridview问题?如何做到没有第一列前的灰的一列
- C#怎么实现把xml作为数据源导入excel
- 求网站流量统计代码
- .net 分页问题,记录COOKIE值,急急!!!!
- 让c#唱出美妙的音乐~~!
- 没见过这么奇怪的问题,
- 请高手指点:给Messenger做插件,做实现指定的接口的COM,迷茫中
- C#怎么将一个窗口的串口接收到的数据在另一个窗口显示
- 为什么NetworkStream读取不了传来的数据,永远的阻塞在了那里
- 极有难度,透明flash作为窗体背景,或者说只播放透明的flash播放
你把整个打印方法看成一个while循环
需要分页的时候就跳出来
打印完了e.HasMorePages = false就可以了
this.printDocument1.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("A3", A3纸宽度, A3纸高度);//方法2
foreach (PaperSize ps in printDocument1.DefaultPageSettings.PrinterSettings.PaperSizes)
{
if (ps.Kind.ToString().Equals(System.Drawing.Printing.PaperKind.A3.ToString()))
{
this.printDocument1.DefaultPageSettings.PaperSize = ps;
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.Drawing;namespace Test
{
/// <summary>
/// 打印测试
/// </summary>
public class PrintTest
{
private PrintDocument printDoc = null; //打印文档
private PrintPreviewDialog preivewDialog = null; //预览对话框 private int currentPage = 1; //当前页 /// <summary>
/// 构造函数
/// </summary>
public PrintTest()
{
printDoc = new PrintDocument();
preivewDialog = new PrintPreviewDialog(); preivewDialog.Document = printDoc; //打印事件
printDoc.PrintPage += new PrintPageEventHandler( printDoc_PrintPage ); //在访问页面设置前
printDoc.QueryPageSettings += new QueryPageSettingsEventHandler( printDoc_QueryPageSettings ); //以下三行代码不是必须的 //关闭预览的自动缩放
preivewDialog.PrintPreviewControl.AutoZoom = false; //显示比例为100%
preivewDialog.PrintPreviewControl.Zoom = 1.0D; //预览窗口最大化
( (Form)preivewDialog ).WindowState = FormWindowState.Maximized; } /// <summary>
/// 预览
/// </summary>
public void Print()
{
preivewDialog.ShowDialog(); //打印换成下面的
//printDoc.Print();
} //设置纸张
void printDoc_QueryPageSettings( object sender, QueryPageSettingsEventArgs e )
{
if ( currentPage == 1 )
{
//A3
foreach ( PaperSize ps in e.PageSettings.PrinterSettings.PaperSizes )
{
if ( ps.Kind.ToString().Equals( System.Drawing.Printing.PaperKind.A3.ToString() ) )
{
e.PageSettings.PaperSize = ps;
}
}
}
else
{
//A4
foreach ( PaperSize ps in e.PageSettings.PrinterSettings.PaperSizes )
{
if ( ps.Kind.ToString().Equals( System.Drawing.Printing.PaperKind.A4.ToString() ) )
{
e.PageSettings.PaperSize = ps;
}
}
}
} /// <summary>
/// 打印
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void printDoc_PrintPage( object sender, PrintPageEventArgs e )
{
switch ( currentPage )
{
case 1:
//第一页内容
e.Graphics.DrawString( string.Format( "第 {0} 页,这一页是A3", currentPage ), new Font( "黑体", 20 ), new SolidBrush( Color.Red ), new PointF( 10f, 10f ) );
break; case 2:
//第二页内容
e.Graphics.DrawString( string.Format( "第 {0} 页,这一页是A4", currentPage ), new Font( "黑体", 20 ), new SolidBrush( Color.Red ), new PointF( 10f, 10f ) );
break; case 3:
//第三页
e.Graphics.DrawString( string.Format( "第 {0} 页,这一页是A4", currentPage ), new Font( "黑体", 20 ), new SolidBrush( Color.Red ), new PointF( 10f, 10f ) );
break; case 4:
//第四页
e.Graphics.DrawString( string.Format( "第 {0} 页,这一页是A4", currentPage ), new Font( "黑体", 20 ), new SolidBrush( Color.Red ), new PointF( 10f, 10f ) );
break; } if ( currentPage < 4 )
{
currentPage++;
e.HasMorePages = true;
}
else
{
currentPage = 1;
e.HasMorePages = false;
}
}
}
}调用示例 private void button3_Click( object sender, EventArgs e )
{
PrintTest t = new PrintTest();
t.Print();
}
int index=0;
//打印事件
private void pd_PrintPage(object sender, PrintPageEventArgs e)
{
switch (index)
{
case 0:
//your print code
index++;
e.HasMorePages = true;
break;
case 1:
//your print code
index++;
e.HasMorePages = true;
break;
case 2:
//your print code
index = 0;
e.HasMorePages = false;
break;
}
}