winform打印太慢,有什么解决办法?

问题描述

问题1:每打印一页需要2秒左右,执行打印的代码块运行时间是毫秒级的..不知道哪里耗费的时间?intpWidth=pd.PrinterSettings.DefaultPageSettings.PaperSize.Width

这句执行要3秒,,怎么这么慢?问题2:打印预览以后,,如何指定打印某页???下面是代码:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Drawing;usingSystem.Drawing.Printing;usingSystem.Collections;usingSystem.Windows.Forms;namespaceAZBookManger.CaiBian{classBookLabelToPrint{publicboolisFX=false;publicintrowCount=0;//每页打印书标行数publicintcolCount=0;//列数intbookCount=0;//书标总数intbookPageCouct=0;//每页打印的书标数publicfloattop=0;publicfloatbottom=0;publicfloatleft=0;publicfloatright=0;publicfloatrowspan=0;publicfloatcolspan=0;publicFontfont=Form1.FontLabelBcid;SizeFbooklabelSize;privateArrayListlst;privateintstartIndex=0;publicBookLabelToPrint(ArrayListl){this.lst=l;}publicvoidprint(){bookPageCouct=rowCount*colCount;bookCount=lst.Count;PrintDocumentpd=newPrintDocument();intpWidth=pd.PrinterSettings.DefaultPageSettings.PaperSize.Width;intPHeight=pd.PrinterSettings.DefaultPageSettings.PaperSize.Height;booklabelSize.Width=(pWidth-left-right-(colCount-1)*colspan)/colCount;booklabelSize.Height=(PHeight-top-bottom-(rowCount-1)*rowspan)/rowCount;pd.PrintController=newStandardPrintController();pd.PrintPage+=newPrintPageEventHandler(pd_PrintPage);pd.Print();}publicvoidprintPreview(){DateTimestart=DateTime.Now;Console.WriteLine(DateTime.Now.ToLongTimeString());bookPageCouct=rowCount*colCount;bookCount=lst.Count;Console.WriteLine(DateTime.Now.ToLongTimeString());PrintDocumentpd=newPrintDocument();Console.WriteLine(DateTime.Now.ToLongTimeString());intpWidth=pd.PrinterSettings.DefaultPageSettings.PaperSize.Width;//这里耗费3秒Console.WriteLine(DateTime.Now.ToLongTimeString());intPHeight=pd.PrinterSettings.DefaultPageSettings.PaperSize.Height;//这里也是3秒,怎么获取这么慢Console.WriteLine(DateTime.Now.ToLongTimeString());booklabelSize.Width=(pWidth-left-right-(colCount-1)*colspan)/colCount;booklabelSize.Height=(PHeight-top-bottom-(rowCount-1)*rowspan)/rowCount;Console.WriteLine(DateTime.Now.ToLongTimeString());pd.PrintController=newStandardPrintController();pd.PrintPage+=newPrintPageEventHandler(pd_PrintPage);Console.WriteLine(DateTime.Now.ToLongTimeString());PrintPreviewDialogcppd=newPrintPreviewDialog();cppd.Document=pd;Console.WriteLine(DateTime.Now.ToLongTimeString());cppd.Document.PrintController=newStandardPrintController();Console.WriteLine(DateTime.Now.ToLongTimeString());cppd.ShowDialog();DateTimestop=DateTime.Now;Console.WriteLine(stop.ToLongTimeString());TimeSpanspan=stop-start;Console.WriteLine(span.TotalSeconds.ToString());}voidpd_PrintPage(objectsender,PrintPageEventArgse){//这块代码耗费时间是毫秒级的,但是每次执行之前要耗费2秒时间,怎么回事????Console.WriteLine("P0:"+DateTime.Now.ToLongTimeString());Graphicsg=e.Graphics;floatcurrentTop=top;FontbidFont=Form1.FontLabelBid;if(bookCount-startIndex<bookPageCouct)//如果未打印条码数小于每页可打印条码数{bookPageCouct=bookCount-startIndex;//最后一页条码数}for(inti=0;i<bookPageCouct;i++){intii=startIndex+i;BookLabelbl=(BookLabel)lst[ii];if(isFX){stringbc=string.Empty;stringid=string.Empty;try{bc=bl.bcid.Substring(0,bl.bcid.IndexOf("/"));id=bl.bcid.Substring(bl.bcid.IndexOf("/")+1,bl.bcid.Length-bl.bcid.IndexOf("/")-1);}catch{bc=bl.bcid.ToString();}SizeFbcSize=g.MeasureString(bc,font);SizeFidSize=g.MeasureString(id,font);SizeFbidSize=g.MeasureString(bl.bid,bidFont);floatcurrentX=left+((booklabelSize.Width+rowspan)*(i%colCount))+(booklabelSize.Width-bcSize.Width)/2;floatcurrentY=top+((booklabelSize.Height+colspan)*(Convert.ToInt32(i/colCount)%rowCount))+(booklabelSize.Height-bcSize.Height)/2;g.DrawString(bc,font,Brushes.Black,newPointF(currentX,currentY));currentX=left+((booklabelSize.Width+rowspan)*(i%colCount))+(booklabelSize.Width-idSize.Width)/2;currentY=currentY+bcSize.Height;g.DrawString(id,font,Brushes.Black,newPointF(currentX,currentY));currentX=left+((booklabelSize.Width+rowspan)*(i%colCount))+(booklabelSize.Width-bidSize.Width)/2;currentY=currentY+bcSize.Height;g.DrawString(bl.bid,bidFont,Brushes.Black,newPointF(currentX,currentY));}else{SizeFbcidSize=g.MeasureString(bl.bcid,font);SizeFbidSize=g.MeasureString(bl.bid,bidFont);floatcurrentX=left+((booklabelSize.Width+rowspan)*(i%colCount))+(booklabelSize.Width-bcidSize.Width)/2;floatcurrentY=top+((booklabelSize.Height+colspan)*(Convert.ToInt32(i/colCount)%rowCount))+(booklabelSize.Height-bcidSize.Height)/2;g.DrawString(bl.bcid,font,Brushes.Black,newPointF(currentX,currentY));currentX=left+((booklabelSize.Width+rowspan)*(i%colCount))+(booklabelSize.Width-bidSize.Width)/2;currentY=currentY+bcidSize.Height;g.DrawString(bl.bid,bidFont,Brushes.Black,newPointF(currentX,currentY));}}startIndex+=bookPageCouct;if(startIndex<bookCount)//分页{e.HasMorePages=true;}else{e.HasMorePages=false;startIndex=0;bookPageCouct=rowCount*colCount;}g.Dispose();Console.WriteLine("P:"+DateTime.Now.ToLongTimeString());}}}

解决方案

解决方案二:
指定打印页应该通过弹出打印对话框进行设置,然后调整打印代码,跳过不需要打印的页.
解决方案三:
3秒的改成这样看看height获取到要几秒呢,你是不是连得网络打印机?varpageSize=pd.PrinterSettings.DefaultPageSettings.PaperSize;intpWidth=pageSize.Width;//这里耗费3秒Console.WriteLine(DateTime.Now.ToLongTimeString());intPHeight=pageSize.Height;

解决方案四:
引用2楼starfd的回复:

3秒的改成这样看看height获取到要几秒呢,你是不是连得网络打印机?varpageSize=pd.PrinterSettings.DefaultPageSettings.PaperSize;intpWidth=pageSize.Width;//这里耗费3秒Console.WriteLine(DateTime.Now.ToLongTimeString());intPHeight=pageSize.Height;

本地打印机...这和什么打印机没有关系吧?宽和高获取都是用了3秒....点击打印就假死.
解决方案五:
没人知道什么情况?

时间: 2024-10-12 17:42:06

winform打印太慢,有什么解决办法?的相关文章

惠普打印机打印WORD,系统提示“该文档未能打印 本地下层文档”解决办法

打印WORD,系统提示"该文档未能打印 本地下层文档",打印机是惠普的,搞了一天,驱动和系统都重装几遍了,还是没用   解决办法 出现"文档未打印"   有以下几个原因:     1. 电脑USB插口接触不良生锈或有氧化层或松动! 清理或改换别的USB插口.     2.主板供电不足. 这个就有些麻烦,但可以 改用高速打印线USB2.0线改善.     3.电源或交流电压过低. 更换主机电源 或加装 稳压器     4.病毒阻碍打印机软件驱动或者电脑配置低打开的启动

求winform窗体载入速度慢的解决办法

问题描述 这是一个参数设置见面,点击左边树状菜单右边打开对应选项卡其他的隐藏.因为控件数量太多了,所以载入的时候奇慢.有什么好办法解决吗,求详细.初步想法是窗体打开的时候不创建右边选项卡,只有在点击节点的时候创建,可是不知道怎么实现.求好办法. 解决方案 解决方案二:点击时创建可以解决方案三:引用1楼xdashewan的回复: 点击时创建可以 求教代码怎么写.解决方案四:你的界面本身的控件很简单,不会占用什么时间.关键是你的代码中所有那些动态加载数据.动态加载子控件的部分,可以全都放到异步操作中

TSC B-2404条码打印机标签打印位置对不准的解决办法!

台半公司精心推出的TSC B-2404条码打印机拥有低廉的价格.优秀的品质, 提供多种的选购配件,充分满足用户的要求!针对用户经常碰到TSC B-2404打印时每张标签位置对不准的情况,深圳市互信恒科技根据实际中的工作经验,整理出如下的解决方法,希望能够帮到广大用户! 标签打印每张都不一致的话有可能是以下原因引起的: 1.设置的纸与实际纸张不一致 2.打印机未进行测纸 3.打印方式应该设置为有间距的标签 一.标签纸大小确定 标签纸大小确定方法如下图: 二.标签纸大小打印设置 三.TSC B-24

asp.net 中WinForm出现无法处理的异常解决办法

,然后进行处理,但是这段代码中用到了BeginInvoke的语句块,而我使用了匿名方法,那么在匿名方法中的异常,外面是捕捉不到的.所以会出现无法处理的异常情况,正确的代码应该这样:  代码如下 复制代码 this.BeginInvoke(new MethodInvoker(delegate() {     bool flag = false;     try     {         flag = service.Authentication();//此处可能造成异常         if (

XP系统电脑打印文字字体出现乱码的解决办法

  XP系统电脑打印文字字体出现乱码的解决办法          1.在左侧程序里选择"控制面板",打开窗口,双击"字体"图标(在打开的对话框中保证打印机已正常安装).图片显示在最下一排,第二个. 2.假如所打印的字体没有安装,可选择"文件F(在窗口的左上角)",打开下属栏,选择"安装新字体"选项,在打开的"添加字体"对话框中选择字体所在路径,就可以进行字体的安装了. 3.双击选中的字体图标,在打开的对话框

打印机显示脱机无法打印的解决办法

打印机脱机无法打印故障现象:打印机无法进行打印,并且电脑上显示打印机的状态为"脱机",有时指示灯会闪烁. 打印机脱机无法打印故障原因:使用非原装墨盒或者使用重新灌墨的墨盒.没有正确设置打印机状态. 打印机脱机无法打印解决办法:由于打印机脱机或打印后台服务程序处理失败而未能够打印的任务,会停留在打印任务列表中,导致打印队列堵塞无法正常打印,打印机状态显示为"脱机". 步骤一:清除未完成的打印作业 自动删除打印任务,根据不同的操作系统做以下操作: 在Windows 20

打印数据获取(压缩)失败解决办法

  打印数据获取(压缩)失败解决办法: 1.检查c:windows文件夹下,有没有Temp文件夹,如果没有,则需要新建一个 2.桌面云雀图标->鼠标右键->以管理员权限运行 3.如果还不行,那么一般你是win8系统,你再看看c:windowsTemp 文件夹->鼠标右键->属性->安全 ,user/(你的windows用户名) 是不是没有'修改''写入'两个权限,如果没有,都改成有.然后再试试云雀打印. 如果win7,win8系统遇到不能修改文件夹权限,请看下面的教程: 默认

Mac提示拔掉耗电量太大的设备以重新启用USB设备的解决办法

  相信有不少Mac用户在使用过程中有碰到过下图所示的提示:USB设备已停用,拔掉耗电太大的设备以重新启用USB设备.这到底是什么原因呢?小编通过网络搜集整理如下几种解决办法,希望能帮助你解决这个问题. 一.尝试将Mac重置系统管理控制器(SMC),具体方法如下: 1.关机,插上电源线 2.同时按住 Shift, Control, Option以及电源键 3.同时松开 Shift, Control, Option 这三个键,保持按住电源键不动直到开机 二.如果重置SMC依然无法解决问题,则又可能

水晶报表打印通信错误,求解决办法!!!!!!!!

问题描述 系统是B/S结构,发布在IIS上,在点击报表预览界面中的工具栏里的打印按钮进行打印报表时报错.在局域网内部访问可以弹出打印机设置界面.但通过防火墙映射端口通过外网访问的话就会出现打印通信错误,将停止打印.求解决办法!! 解决方案 解决方案二:这么久了..都没有碰到过这个问题的人出现吗..解决方案三:有遇到过这个对话框,但原因不是防火墙问题http://blog.csdn.net/apollokk/article/details/45972377