强制分页打印

wutangye 2006-08-30 09:22:02
自己写的private void printDocument4_PrintPage(object sender, PrintPageEventArgs e)
能判断出打印的高度,如何在长度大于A4纸时,强制另起一页打印?
...全文
682 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingjian2008 2006-12-07
  • 打赏
  • 举报
回复
mark
szh3210 2006-10-23
  • 打赏
  • 举报
回复
mark
starsword 2006-08-31
  • 打赏
  • 举报
回复
mark , 学习 ~
wutangye 2006-08-30
  • 打赏
  • 举报
回复
长江,怎么解决啊
wutangye 2006-08-30
  • 打赏
  • 举报
回复
e.HasMorePages = true;
如果设置这个的话就不停的打印相同的内容
长江支流 2006-08-30
  • 打赏
  • 举报
回复
我这有个分页原理和打印多页文本的例子
http://blog.csdn.net/flygoldfish/archive/2004/09/06/95685.aspx

http://www.webmis.com.cn/DownLoad/PrinterPageSetting.rar
长江支流 2006-08-30
  • 打赏
  • 举报
回复
e.HasMorePages = true;
长江支流 2006-08-30
  • 打赏
  • 举报
回复
这是全部打印源码
http://www.webmis.com.cn/misgoldprinter.htm

最新版本AnyReport.Net将支持XML定义与设计和Web打印、套打
www.AnyReport.Net
wutangye 2006-08-30
  • 打赏
  • 举报
回复
哈,问题解决了,多谢长江支流,调试过的代码如下

int a = 0;
int b = 3; //要打3页
private void printDocument4_PrintPage(object sender, PrintPageEventArgs e)
{
//MyPrint()为打印,如果没有打印完,返回true,也就需要新开一页
if (MyPrint(e.Graphics))
{
e.HasMorePages = true;
}
else
{
e.HasMorePages = false;
//打完了就要重置,要不然下次再来a永远大于1,永远新开一页
a = 0; b = 0;
}
}
private bool MyPrint(Graphics g)
{
a = a + 1;
g.DrawString("第" + a.ToString() + "页", new Font("楷体", 12, FontStyle.Bold), Brushes.Black, 300, 100);

if (a < b )//&& 坐标是否超了一页坐标等都要考虑)
{
//没打完
return true;
}
//打完了
return false;
}
长江支流 2006-08-30
  • 打赏
  • 举报
回复
好了,边界情况自己去调试去

这个已说的很清楚了
http://blog.csdn.net/flygoldfish/archive/2004/09/06/95685.aspx
http://www.webmis.com.cn/DownLoad/PrinterPageSetting.rar
长江支流 2006-08-30
  • 打赏
  • 举报
回复
你的b是什么意思?
从 for (; b < 5; b++) 看,你是想循环5页

int a = 0;
int b = 0;
private void printDocument4_PrintPage(object sender, PrintPageEventArgs e)
{
//MyPrint()为打印,如果没有打印完,返回true,也就需要新开一页
if (MyPrint(e.Graphics))
{
e.HasMorePages = true;
}
else
{
e.HasMorePages = false;
//打完了就要重置,要不然下次再来a永远大于1,永远新开一页
a=0;b=0;
}

}

}

private bool MyPrint(Graphics g)
{
a = a + 1;

g.DrawString("第" + a.ToString() + "页", new Font("楷体", 12, FontStyle.Bold), Brushes.Black, 300....);

if (a < b && 坐标是否超了一页坐标等都要考虑)
{
//没打完
return true;
}

//打完了
return false;
}
wutangye 2006-08-30
  • 打赏
  • 举报
回复
我那样写,是因为外部a=0
进入FOR后 a=1,还不会>1,再循环一次才会>1
wutangye 2006-08-30
  • 打赏
  • 举报
回复
按你那样写,进入死循环了
长江支流 2006-08-30
  • 打赏
  • 举报
回复
以上先指出一点错误,现在开始把打印的过程独立出来
wutangye 2006-08-30
  • 打赏
  • 举报
回复
如果
if (打印内容过程,打完了没有。--没有打完)
{
e.HasMorePage = true;
}
如果只是这样判断的话,会一直打印第一页相同的内容
长江支流 2006-08-30
  • 打赏
  • 举报
回复
int a = 0;
int b = 0;
private void printDocument4_PrintPage(object sender, PrintPageEventArgs e)
{
for (; b < 5; b++)
{
a = a + 1;
if (a >1) //这样a会永远>1的
{

e.Graphics.DrawString("1111", new Font("楷体", 12, FontStyle.Bold), Brushes.Black, 300, 0);

//打印的过程放在此句上面
e.HasMorePages = true;
}
else
{
e.HasMorePages = false;
//打完了就要重置,要不然下次再来a永远大于1,永远新开一页
a=0;b=0;
}

}

}
wutangye 2006-08-30
  • 打赏
  • 举报
回复
我是用e.Graphics.DrawString画的打印内容
wutangye 2006-08-30
  • 打赏
  • 举报
回复
b<5 //这里是只要b<5就接着打
a>1 //就要分下一页
长江支流 2006-08-30
  • 打赏
  • 举报
回复

你总得判断一下才设置吧,该分页的时候才设置


private void printDocument4_PrintPage(object sender, PrintPageEventArgs e)
if (打印内容过程,打完了没有。--没有打完)
{
e.HasMorePage = true;
}
else
{

//打印完毕

//打印索引重置,如
当前页变量 = 1;
DataGrid打印行索引 = 0;

e.HasMorePage = false;
}


--------------------------------------
e.HasMorePages = true;
如果设置这个的话就不停的打印相同的内容
wutangye 2006-08-30
  • 打赏
  • 举报
回复
神啊,翻遍了所有CSDN有关分页打印的贴子了


sz_lgp(longguoping)
这个问题我搞过,关鍵是要设定一个指针让程序知道打印到哪儿了,e.HasMorePages = True是打印重新生成一个空的页面,这时应将打印位置(x,y)回复到起始位。接下来就没什么问题了。

还是不懂,第二页的打印位置怎么设???
加载更多回复(3)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧