textControl1.Print(printDoc); 打印两次后发生异常
先打印当前处理过的页面 ,恢复成原来正常数据后继续打印当前页面后面的页面!
如: 文件共3页处理第2页 完成后 打印第2页恢复文档后 打印第3页 (结果打了1 到 3页)
麻烦给看看,谢谢!
string olddata = "";
int curpage = 2
//保存当前文档内容到 变量 olddata,
textControl1.Save(out olddata, TXTextControl.StringStreamType.RichTextFormat);
//处理文档内容
................................
.........................................................
//打印当前面(如: 文档共3页面 此处当前页面为(curpage=2)第2页)
System.Drawing.Printing.PrintDocument printDoc = new System.Drawing.Printing.PrintDocument();
printDoc.PrinterSettings.PrintRange = System.Drawing.Printing.PrintRange.SomePages;
printDoc.PrinterSettings.FromPage = curpage;
printDoc.PrinterSettings.ToPage = curpage;
textControl1.Print(printDoc);
//从变量 olddata 恢复 textControl1 数据为原始数据
textControl1.Load(olddata, TXTextControl.StringStreamType.RichTextFormat);
textControl1.Refresh();
//打印剩余页面
if (curpage == textControl1.Pages)
{
return;
}
else
{
//打印剩余页面 (如: 文档共3页面此处当前页面为(curpage=2) 第2页 剩余页面 为第3页)
System.Drawing.Printing.PrintDocument printDoclast = new System.Drawing.Printing.PrintDocument();
printDoc.PrinterSettings.FromPage = curpage + 1 ;
printDoc.PrinterSettings.ToPage = textControl1.Pages;
//下面这句很是想不明白,为什么传入值为FromPage = 3 ToPage = 3 但实际却是从打印第1页 到 第3页 ?
textControl1.Print(printDoclast);
} 如果用 两次都调用 同一个变量 printDoc结果在调用textControl1.Print(printDoc ); 后,发生奇怪情况,确实只打了一页但是 将第1页和第3页打在了同一页面上!很是郁闷。
将这个两个放到第一次打印的位置 时,打印也是正常的,所以我感觉是textControl1.Print这可能出了问题,是不是要将第一次打印的什么信息要清除一下? 找了半天没有找到!
printDoc.PrinterSettings.FromPage = curpage ;
printDoc.PrinterSettings.ToPage = textControl1.Pages; 现在就是 打印第二次处理出错:恢复数据后打印剩余页面
回复 33# jxf16888 的帖子
你第二次打印的部分代码是复制的吧,好像是用的变量不对://打印剩余页面
if (curpage == textControl1.Pages)
{
return;
}
else
{
//打印剩余页面(如: 文档共3页面此处当前页面为(curpage=2) 第2页 剩余页面 为第3页)
System.Drawing.Printing.PrintDocument printDoclast = new System.Drawing.Printing.PrintDocument();
printDoclast.PrinterSettings.PrintRange = System.Drawing.Printing.PrintRange.SomePages;
printDoclast.PrinterSettings.FromPage = curpage + 1 ;
printDoclast.PrinterSettings.ToPage = textControl1.Pages; //下面这句很是想不明白,为什么传入值为FromPage = 3 ToPage = 3 但实际却是从打印第1页 到 第3页 ?
textControl1.Print(printDoclast);
} 我的一点小建议,你现在是将打印任务分成两次来做的,是不是可以只用一次就可以完成打印:
1、处理需要处理的页面
2、打印指定范围的页面
3、恢复刚才处理的页面
这样可以少调一次打印任务,用户也不会觉得点一次打印按钮,结果打印过程中还有短暂的停顿 这个功能完美实现了, 问题不是那个地方!是系统System.Drawing.Printing.PrintDocument 的问题 :)