找回密码
 立即注册

QQ登录

只需一步,快速开始

bingdaoice

中级会员

44

主题

208

帖子

608

积分

中级会员

积分
608

[已处理] 打印Spread问题

bingdaoice
中级会员   /  发表于:2019-4-23 11:14  /   查看:6722  /  回复:14
本帖最后由 bingdaoice 于 2019-4-23 11:16 编辑

FormRecdCertif frmRecdCertif = new FormRecdCertif();
            frmRecdCertif.SaveModen = false;
            frmRecdCertif.p_certif.GetRecdModel(Convert.ToInt64(dr["DetailId"]), Convert.ToInt32(dr["Idx"]));//查询出数据
            frmRecdCertif.ViewRecdCertif(false, null);//Spread_Certif显示数据
            int PageCount = frmRecdCertif.Spread_Certif.GetPrintPageCount(0);//获取页数
            if (PageCount > 2)
            {
                PrinterName = PrinterName + "多页";
            }         
            FarPoint.Win.Spread.PrintInfo printset = new FarPoint.Win.Spread.PrintInfo();
            printset.ShowBorder = false;//是否要打印在整个控件周围的外框边界。
            printset.ShowGrid = false;//该值指示是否打印网格线
            printset.ShowRowHeaders = false;//获取或设置是否打印行头
            printset.ShowColumnHeaders = false;//获取或设置是否打印列头
            printset.Centering = FarPoint.Win.Spread.Centering.Horizontal;//该值指示打印输出时的居中显示方式
            printset.JobName = dr["DetailId"].ToString();//该值指示打印任务的名称
            printset.ShowPrintDialog = false;//是否显示打印机选择窗口
            printset.ShowColor = false;//该值指示是否使用彩色打印,颜色和控件在屏幕上显示的一致
            printset.Preview = false;//是否预览
            if (PrintMode == true)//使用默认打印机打印
            {
                printset.PrintType = FarPoint.Win.Spread.PrintType.PageRange;
                printset.Printer = "";
                printset.PageStart = 1;
                printset.PageEnd = 2;
                frmRecdCertif.Spread_Certif.Sheets[0].PrintInfo = printset;
                frmRecdCertif.Spread_Certif.PrintSheet(0);
                if (PageCount > 2)
                {
                    for (short i = 3; i <= PageCount; i++)
                    {
                        MessageBox.Show("现在打印证书" + dr["DetailId"].ToString() + "的序页第:" + i.ToString() + "页,请放好序页纸张!");
                        printset.JobName = dr["DetailId"].ToString() + "-" + i.ToString();
                        printset.PageStart = i;
                        printset.PageEnd = i;
                        //frmRecdCertif.Spread_Certif.Sheets[0].PrintInfo.FirstPageNumber = i;
                        //frmRecdCertif.Spread_Certif.Sheets[0].PrintInfo = printset;
                        frmRecdCertif.Spread_Certif.PrintSheet(0);
                    }
                }
                return;
            }
            frmRecdCertif.Spread_Certif.Sheets[0].PrintInfo = printset;
            printset.Printer = PrinterName;//打印机名称
            frmRecdCertif.Spread_Certif.PrintSheet(0);

使用红色代码打印(指定打印页数的方式),先打印1、2页,3、4页分开打印。
打印同一个XML文件,问题是:现在打印1、2页的时候,打印机接受到的有时候是1页,有时候是2页。
图1接收到的是1页,图2接收到的是2页,而且图2的名称也不对
打印名称正确的队列应该是:
201600000123       2页
201600000123-3    1页
201600000123-4    1页
注意图2的打印时间,即可区分两次打印队列。
请问,是我上面代码哪里不对吗?
image.png237106627.png
image.png575938720.png

14 个回复

倒序浏览
bingdaoice
中级会员   /  发表于:2019-4-23 11:30:18
沙发
我尝试过在打印3、4页时,重新new 一个PrintInfo并将frmRecdCertif.Spread_Certif.Sheets[0].PrintInfo = printset;
但是也报错。
图下面是代码(打开注释掉的代码,就报图的错误)
image.png498836669.png
for (short i = 3; i <= PageCount; i++)
                    {
                        MessageBox.Show("现在打印证书" + dr["DetailId"].ToString() + "的序页第:" + i.ToString() + "页,请放好序页纸张!");
                        //printset = new FarPoint.Win.Spread.PrintInfo();
                        //printset.PrintType = FarPoint.Win.Spread.PrintType.PageRange;
                        //printset.ShowBorder = false;//是否要打印在整个控件周围的外框边界。
                        //printset.ShowGrid = false;//该值指示是否打印网格线
                        //printset.ShowRowHeaders = false;//获取或设置是否打印行头
                        //printset.ShowColumnHeaders = false;//获取或设置是否打印列头
                        //printset.Centering = FarPoint.Win.Spread.Centering.Horizontal;//该值指示打印输出时的居中显示方式
                        //printset.ShowPrintDialog = false;//是否显示打印机选择窗口
                        //printset.ShowColor = false;//该值指示是否使用彩色打印,颜色和控件在屏幕上显示的一致
                        //printset.Preview = false;//是否预览

                        printset.JobName = dr["DetailId"].ToString() + "-" + i.ToString();
                        printset.PageStart = i;
                        printset.PageEnd = i;
                        frmRecdCertif.Spread_Certif.Sheets[0].PrintInfo.FirstPageNumber = i;
                        //frmRecdCertif.Spread_Certif.Sheets[0].PrintInfo = printset;
                        frmRecdCertif.Spread_Certif.PrintSheet(0);
                    }
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-4-24 22:53:28
板凳
问题收到,测试后给您答复
回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2019-4-26 10:40:15
地板
dexteryao 发表于 2019-4-24 22:53
问题收到,测试后给您答复

测试有结果了吗?
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-4-26 14:27:22
5#
您好, 给打印机发送打印任务打印机来执行是个异步过程,这边控件无法敢于,信息发送出去后具体如何执行控件就无法控制了。
针对于这种批量打印,我们的建议是整理好打印数据一次打印,不要多次发送打印任务,这样无法控制了。
回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2019-4-26 16:46:23
6#
你的无法干预是指发送给打印机之后,才无法干预啊。
我现在的问题是:Spread_Certif.Sheets[0]中的内容是4页(打印预览时),我现在要发送给打印机1,2页打印一次,3页打印一次,4页打印一次。

出现的问题1:我设置指定发送第1,2页给打印机,但发过去有时候是1页,有时候是2页。
出现的问题2:我指定发送给打印机第3页,打印任务的名称是  XXXX-3,但发送给打印机之后显示的并不是 XXXX-3这个名称。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-4-26 18:12:36
7#
为什么要分四次发呢?
回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2019-4-26 18:40:15
8#
是因为打印第1、2页用的是一种纸,打印第3页一种纸,第4页是另一种纸。
就是4页,分3次打印,三种不同的纸。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-4-28 09:25:01
9#
Spread把打印信息生成后发送给打印机就干预不了了。你生成3个PDF,然后按顺序将PDF发送打印机打印。
回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2019-4-28 09:57:29
10#
本帖最后由 bingdaoice 于 2019-4-28 09:58 编辑
dexteryao 发表于 2019-4-28 09:25
Spread把打印信息生成后发送给打印机就干预不了了。你生成3个PDF,然后按顺序将PDF发送打印机打印。

你的无法干预是指发送给打印机之后,才无法干预啊。
你的PageStart 和PageEnd 就是设定打印指定页啊。
现在的问题是,我指定PageStart =1,PageEnd =2那么就是说指定1、2页发送给打印机进行打印。
现在的问题是:发送过去的信息,有时候是1页,有时候是2页。这不是一个BUG吗?是正常的?

第二个问题:当我再次指定PageStart =3,PageEnd =3,printset.JobName =XXX-3,就表示我发送第三页给打印机,并指定打印任务的名称 是XXX-3。
现在的问题是,发送过去的打印任务的名称不是XXX-3,这也不是BUG吗?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部