C#的图片打印分页问题 比如我有一个数组里面有好多图片的引用,我想把这些图片分页打印出来,怎么实现.现在我总是只能打印一页.用HasMorePages有时候只能打印一页,有时候进入死循环?还有我进行页面设置后,预览的内容就空了.请大虾指教. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 必须确保 "先设置,后打印",print()调用后出现的打印设置是无效的,因为进程已经启动了.以前我打印多页还好,没出什么问题 为什么我只能打印一页呢? 请看一下我的代码.预览显示有两页,但是只显示一页.private void printDoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { Graphics g=e.Graphics; foreach(TreeNode pageNode in tree.Nodes) { Image img=(pageNode.Tag as PicturePanel).Image; g.DrawImage(img,0,y); foreach(TreeNode labelNode in pageNode.Nodes) { LabelPro label=labelNode.Tag as LabelPro; Brush newBrush=new SolidBrush(Color.Blue); e.Graphics.DrawString(label.Text,label.Font,newBrush,label.Left,label.Top+label.Height+y); newBrush.Dispose(); if(pages>tree.Nodes.Count) { e.HasMorePages=false; } else { e.HasMorePages=true; } } y+=img.Height; pages++; } } http://www.qq166.com/vip.htm?QQ=855965 我多页打印是这样控制的,如有打印页数范围则在pagerange=dlg.PrinterSettings.ToPage;取得请记住"先设置,后打印",private void OnPrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e){ Graphics g=e.Graphics; g.PageUnit=GraphicsUnit.Millimeter; switch (currentpage) { case 9999: g.DrawString("结束页",zmfont1,Brushes.Black,20f,25f); e.HasMorePages=false; break; default: bmp=new Bitmap("d:\\back1.jpg"); g.DrawImage(bmp,10,0); bmp.Dispose(); e.HasMorePages=true; currentpage+=1; if (pagerange-currentpage<0 && pagerange!=0) currentpage=9999; break; }} 我也碰到了: private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { for(int i=0;i<10;i++) { e.Graphics.DrawString(i.ToString()+":a;sdfj;asfjk;asdnfj;asfj;",this.Font,System.Drawing.Brushes.Black,20,130+100*i); if(i%3==0) e.HasMorePages=true; else e.HasMorePages=false; } }结果是死循环 当你设置e.HasMorePages=true;时事件调用结束后,系统会再调用一次该事件按照你的写法会不断重复调用的,也就是说你需要记录前面一次打印到何处从该处继续打印 说的更清楚一点,不是设置了e.HasMorePages=true后它马上就会就会自动开始换页打印 各位大虾,请教关于控件重叠的问题 多线程问题 C# 重载控件消息 跪求,急求。。请帮忙看看。。数据库查询与显示到页面。。等待 关于datagridview 数据邦定的问题 GAC注册问题 Web 页面打印 怎样通过代码去掉页眉页脚 开发经验和技巧共享 using System.Drawing 求水晶报表学习电子书!!! 大家帮我这个初学者看看吧 关于接口和类的一个问题
以前我打印多页还好,没出什么问题
{
Graphics g=e.Graphics;
foreach(TreeNode pageNode in tree.Nodes)
{
Image img=(pageNode.Tag as PicturePanel).Image;
g.DrawImage(img,0,y);
foreach(TreeNode labelNode in pageNode.Nodes)
{
LabelPro label=labelNode.Tag as LabelPro;
Brush newBrush=new SolidBrush(Color.Blue);
e.Graphics.DrawString(label.Text,label.Font,newBrush,label.Left,label.Top+label.Height+y);
newBrush.Dispose(); if(pages>tree.Nodes.Count)
{
e.HasMorePages=false;
}
else
{
e.HasMorePages=true;
}
}
y+=img.Height;
pages++;
}
}
private void OnPrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Graphics g=e.Graphics;
g.PageUnit=GraphicsUnit.Millimeter;
switch (currentpage)
{
case 9999:
g.DrawString("结束页",zmfont1,Brushes.Black,20f,25f);
e.HasMorePages=false;
break;
default:
bmp=new Bitmap("d:\\back1.jpg");
g.DrawImage(bmp,10,0);
bmp.Dispose();
e.HasMorePages=true;
currentpage+=1;
if (pagerange-currentpage<0 && pagerange!=0)
currentpage=9999;
break;
}
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
for(int i=0;i<10;i++)
{
e.Graphics.DrawString(i.ToString()+":a;sdfj;asfjk;asdnfj;asfj;",this.Font,System.Drawing.Brushes.Black,20,130+100*i);
if(i%3==0)
e.HasMorePages=true;
else
e.HasMorePages=false;
}
}
结果是死循环
事件调用结束后,系统会再调用一次该事件
按照你的写法会不断重复调用的,
也就是说你需要记录前面一次打印到何处
从该处继续打印
不是设置了e.HasMorePages=true后
它马上就会就会自动开始换页打印