找回密码
 立即注册

QQ登录

只需一步,快速开始

jxf16888
高级会员   /  发表于:2011-8-9 11:50:00
31#
还是不能正常打印:

        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);
               
            }
回复 使用道具 举报
jxf16888
高级会员   /  发表于:2011-8-9 11:55:00
32#
如果用 两次都调用 同一个变量 printDoc  结果在调用  textControl1.Print(printDoc ); 后,发生奇怪情况,确实只打了一页但是 将第1页和第3页打在了同一页面上!很是郁闷。
将这个两个放到第一次打印的位置 时,打印也是正常的,所以我感觉是textControl1.Print这可能出了问题,是不是要将第一次打印的什么信息要清除一下? 找了半天没有找到!
printDoc.PrinterSettings.FromPage = curpage ;
  printDoc.PrinterSettings.ToPage = textControl1.Pages;
回复 使用道具 举报
jxf16888
高级会员   /  发表于:2011-8-9 11:56:00
33#
现在就是 打印第二次处理出错:恢复数据后打印剩余页面
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2011-8-9 12:22:00
34#

回复 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);
               
            }
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2011-8-9 12:28:00
35#
我的一点小建议,你现在是将打印任务分成两次来做的,是不是可以只用一次就可以完成打印:
1、处理需要处理的页面
2、打印指定范围的页面
3、恢复刚才处理的页面

这样可以少调一次打印任务,用户也不会觉得点一次打印按钮,结果打印过程中还有短暂的停顿
回复 使用道具 举报
jxf16888
高级会员   /  发表于:2011-8-9 18:17:00
36#
这个功能完美实现了, 问题不是那个地方!是系统System.Drawing.Printing.PrintDocument 的问题
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2011-8-10 21:50:00
37#
回复 使用道具 举报
1234
您需要登录后才可以回帖 登录 | 立即注册
返回顶部