c# – 未发出OnEndPrint的startdocprinter调用
发布时间:2020-12-15 22:35:08 所属栏目:百科 来源:网络整理
导读:我有一个正确打印的C# Windows应用程序.我通过移动一些东西做了一些改变.我在开发环境中进行了一些单元测试.编译并安装在win 7 pc上.我现在从编译版本中收到以下错误.我做了一些谷歌搜索,所有我能找到的是一些XP问题.在这里搜索并发现一些VBA问题,这些都不适
我有一个正确打印的C#
Windows应用程序.我通过移动一些东西做了一些改变.我在开发环境中进行了一些单元测试.编译并安装在win 7 pc上.我现在从编译版本中收到以下错误.我做了一些谷歌搜索,所有我能找到的是一些XP问题.在这里搜索并发现一些VBA问题,这些都不适用于我.如果需要,我可以发布一些代码.有点难过了.
************** Exception Text ************** System.ComponentModel.Win32Exception (0x80004005): A StartDocPrinter call was not issued at System.Drawing.Printing.StandardPrintController.OnEndPrint(PrintDocument document,PrintEventArgs e) at System.Windows.Forms.PrintControllerWithStatusDialog.OnEndPrint(PrintDocument document,PrintEventArgs e) at System.Drawing.Printing.PrintController.Print(PrintDocument document) at System.Drawing.Printing.PrintDocument.Print() at TPG.Printing.PrintPickTicket(String OrdNum,Boolean blnReprint,Boolean blnSwapOrder) at TPG.frmPrintTicket.btnReprint_Click(Object sender,EventArgs e) at System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnClick(EventArgs e) at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) at System.Windows.Forms.Control.WmMouseUp(Message& m,MouseButtons button,Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam) 我的守则 public void PrintPickTicket(string OrdNum,bool blnReprint,bool blnSwapOrder) { UserBusiness userBiz = new UserBusiness(); OrderBusiness OrderBus = new OrderBusiness(); UserPrinterSetting setting = userBiz.GetUserPrinterSettings(SessionHelper.UserData.UserID,MachineName); PrintDocument pd = new PrintDocument(); pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); pd.PrinterSettings.PrinterName = setting.DocumentPrinter; pd.DefaultPageSettings.Landscape = true; blnDetailRecs = false; blnNotesRecs = false; blnSwapRecs = false; blnIsReprint = blnReprint; blnIsSwapOrder = blnSwapOrder; // //Get the data needed to print a pick ticket // //Pick Ticket Header,Merchant Info,dsOrders = OrderBus.GetPickTicketInfo(OrdNum); dsMerchDetails = OrderBus.GetMerchantInfo(OrdNum); dsOrderDetails = OrderBus.GetPickDetailsInfo(OrdNum); dsComments = OrderBus.GetLineItemComments(OrdNum); dsShipComments = OrderBus.GetShippingComments(OrdNum); dsSwap = OrderBus.GetSwapOrder(OrdNum.TrimEnd() + 'S'); if (dsSwap.Tables[0].Rows.Count != 0) { blnIsSwapOrder = true; } //Initialize printing vars sopNumber = OrdNum.TrimEnd(); sStatus = "Detail"; pgCnt = 1; rCnt = 0; rSCnt = 0; rCCnt = 0; //Print the doggone thing already pd.Print(); //Clean up your crap dammit dsShipComments.Dispose(); if (blnIsSwapOrder) { dsSwap.Dispose(); } dsOrderDetails.Dispose(); dsMerchDetails.Dispose(); dsOrders.Dispose(); dsComments.Dispose(); dsShipComments.Dispose(); } private static string GetNumbers(string input) { return new string(input.Where(c => char.IsDigit(c)).ToArray()); } private void pd_PrintPage(object sender,PrintPageEventArgs e) { Graphics g = e.Graphics; Brush blkBrush = Brushes.Black; Brush gryBrush = Brushes.LightGray; Pen gryPen = new Pen(Color.DarkGray); Font hdrFont = new Font("Arial Black",10,System.Drawing.GraphicsUnit.Point); Font hdrsmFont = new Font("Arial Black",7,System.Drawing.GraphicsUnit.Point); Font dtlFont = new Font("Arial",System.Drawing.GraphicsUnit.Point); Font ttlFont = new Font("Arial Black",12,System.Drawing.GraphicsUnit.Point); Font bcFont = new Font("Free 3 of 9 Extended",24,GraphicsUnit.Point); Font bcSmallFont = new Font("Free 3 of 9 Extended",16,GraphicsUnit.Point); int LinesPerPage = 20; int intLineCnt = 0; string lineComment = ""; string printComment = ""; string rmaNumber = ""; g.PageUnit = GraphicsUnit.Millimeter; System.DateTime now = System.DateTime.Now; string theDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); Bitmap lgoImage = new Bitmap(theDirectory + @"ImagesphxLetr.png"); // // // Print Page Heading // // g.DrawImage(lgoImage,5,5); g.DrawString("Page ",dtlFont,blkBrush,194,7); g.DrawString(pgCnt.ToString(),206,7); g.DrawString("Enter Date:",190,11); g.DrawString("Print Date:",15); g.DrawString(dsOrders.Tables[0].Rows[0]["EntDate"].ToString(),208,11); g.DrawString(now.ToString("g"),15); if (sStatus == "Detail" || sStatus == "Swap") { g.DrawString("PICK TICKET",ttlFont,47,7); if (blnIsSwapOrder) { g.DrawString("*SWAP*",85,7); } g.DrawString("Picked By: _____________",hdrFont,60,15); g.DrawString("Inspect By: _____________",25); g.DrawString("Observe By: _____________",120,15); g.DrawString("Deploy By: _____________",25); } else if (sStatus == "Notes") { g.DrawString("DEPLOYMENT INFO",7); } if (sStatus != "Swap") { g.DrawString('*' + sopNumber + '*',bcFont,207,20); g.DrawString(sopNumber,215,27); } else { g.DrawString('*' + sopNumber + 'S' + '*',20); g.DrawString(sopNumber + "S",27); } if (blnIsReprint) { g.DrawString("**** REPRINT ****",7); } // //Bill To Box // g.DrawRectangle(gryPen,3,43,23); //Bill To box g.DrawString("Bill To:",38); g.DrawString(dsOrders.Tables[0].Rows[0]["CustomerID"].ToString().TrimEnd(),20,39); g.DrawString(dsOrders.Tables[0].Rows[0]["CustomerName"].ToString().Substring(0,31),45); g.DrawString(dsOrders.Tables[0].Rows[0]["CustomerAddress1"].ToString(),50); g.DrawString(dsOrders.Tables[0].Rows[0]["CustomerAddress2"].ToString(),55); g.DrawString(dsOrders.Tables[0].Rows[0]["CustomerCity"].ToString().TrimEnd() + "," + dsOrders.Tables[0].Rows[0]["CustomerState"].ToString().TrimEnd() + " " + dsOrders.Tables[0].Rows[0]["CustomerZip"].ToString().TrimEnd(),60); // //Ship To Box // g.DrawRectangle(gryPen,92,23); //Ship To box g.DrawString("Ship To:",38); if (sStatus == "Swap") { g.DrawString(dsOrders.Tables[0].Rows[0]["SwapShipToName"].ToString().Substring(0,94,45); g.DrawString(dsOrders.Tables[0].Rows[0]["SwapShippingAddress1"].ToString(),50); g.DrawString(dsOrders.Tables[0].Rows[0]["SwapShippingAddress2"].ToString(),55); g.DrawString(dsOrders.Tables[0].Rows[0]["SwapShippingCity"].ToString().TrimEnd() + "," + dsOrders.Tables[0].Rows[0]["SwapShippingState"].ToString().TrimEnd() + " " + dsOrders.Tables[0].Rows[0]["SwapShippingZip"].ToString().TrimEnd(),60); } else { g.DrawString(dsOrders.Tables[0].Rows[0]["ShipToName"].ToString().Substring(0,45); if (!blnIsSwapOrder) { g.DrawString(dsOrders.Tables[0].Rows[0]["ShippingAddress1"].ToString(),50); g.DrawString(dsOrders.Tables[0].Rows[0]["ShippingAddress2"].ToString(),55); g.DrawString(dsOrders.Tables[0].Rows[0]["ShippingCity"].ToString().TrimEnd() + "," + dsOrders.Tables[0].Rows[0]["ShippingState"].ToString().TrimEnd() + " " + dsOrders.Tables[0].Rows[0]["ShippingZip"].ToString().TrimEnd(),60); } } // //Merch Info box // g.DrawRectangle(gryPen,185,33,83,33); g.DrawString("M",hdrsmFont,181,35); g.DrawString("E",38); g.DrawString("R",41); g.DrawString("C",44); g.DrawString("H",47); g.DrawString("I",53); g.DrawString("N",56); g.DrawString("F",59); g.DrawString("O",62); if (dsMerchDetails.Tables[0].Rows.Count > 0) { g.DrawString(dsMerchDetails.Tables[0].Rows[0]["MID"].ToString(),187,35); g.DrawString(dsMerchDetails.Tables[0].Rows[0]["CustName"].ToString().Substring(0,30),40); g.DrawString(dsMerchDetails.Tables[0].Rows[0]["Address1"].ToString(),45); g.DrawString(dsMerchDetails.Tables[0].Rows[0]["Address2"].ToString(),50); g.DrawString(dsMerchDetails.Tables[0].Rows[0]["City"].ToString().TrimEnd() + "," + dsMerchDetails.Tables[0].Rows[0]["State"].ToString().TrimEnd() + " " + dsMerchDetails.Tables[0].Rows[0]["Zip"].ToString().TrimEnd(),55); g.DrawString(dsMerchDetails.Tables[0].Rows[0]["Phone"].ToString(),60); } // //Purch Order,Ship Mthd,etc. box // g.DrawRectangle(gryPen,68,265,18); g.DrawString("Purchase Order",70); g.DrawString("Shipping Method",46,70); g.DrawString("Shipper Number",90,70); g.DrawString("Ship Notes: ",133,70); g.DrawString(dsOrders.Tables[0].Rows[0]["CStponbr"].ToString().TrimEnd(),75); g.DrawString(dsOrders.Tables[0].Rows[0]["ShippingMethod"].ToString(),75); g.DrawString(dsOrders.Tables[0].Rows[0]["ShipperNumber"].ToString().TrimEnd(),75); //if (ShipNum.Length > 23) //{ // ShipNum = ShipNum.Substring(0,24); //} if (dsShipComments.Tables[0].Rows.Count > 0) { g.DrawString(dsShipComments.Tables[0].Rows[0]["Comment_1"].ToString(),161,70); g.DrawString(dsShipComments.Tables[0].Rows[0]["Comment_2"].ToString(),74); g.DrawString(dsShipComments.Tables[0].Rows[0]["Comment_3"].ToString(),78); g.DrawString(dsShipComments.Tables[0].Rows[0]["Comment_4"].ToString(),82); } // //Detail Header and Data // if (sStatus == "Detail" || sStatus == "Swap") { g.DrawString("Item Num",90); g.DrawString("Desc",70,90); g.DrawString("Inv",86); g.DrawString("Bin",90); g.DrawString("Pick",219,86); g.DrawString("Qty",90); g.DrawString("UOM",234,90); g.DrawString("QC",248,90); } else if (sStatus == "Notes") { g.DrawString("Qty",90); g.DrawString("Item Num",13,90); g.DrawString("Deployment Info",80,90); } // //Details Data // int ypos = 95; int count = 0; Boolean blnShadow = false; if (sStatus == "Detail") { while (count < LinesPerPage && rCnt < dsOrderDetails.Tables[0].Rows.Count) { if (blnShadow) { g.FillRectangle(gryBrush,ypos,5); } g.DrawString(dsOrderDetails.Tables[0].Rows[rCnt]["ITEMNMBR"].ToString(),ypos); g.DrawString(dsOrderDetails.Tables[0].Rows[rCnt]["ITEMDESC"].ToString().Substring(0,60),ypos); g.DrawString(dsOrderDetails.Tables[0].Rows[rCnt]["LOCNCODE"].ToString(),ypos); g.DrawString(string.Format("{0:0}",(dsOrderDetails.Tables[0].Rows[rCnt]["QUANTITY"])),218,ypos); g.DrawString(dsOrderDetails.Tables[0].Rows[rCnt]["UOFM"].ToString(),ypos); ypos = ypos + 5; rCnt ++; intLineCnt ++; count ++; blnShadow = !blnShadow; } if (rCnt <= dsOrderDetails.Tables[0].Rows.Count && intLineCnt >= LinesPerPage) { e.HasMorePages = true; pgCnt ++; intLineCnt = 0; ypos = 95; blnDetailRecs = true; } else { e.HasMorePages = true; pgCnt ++; blnDetailRecs = false; } } // //Deployment page details // if (sStatus == "Notes") { ypos = 95; count = 0; blnShadow = false; if (dsComments.Tables[0].Rows.Count == 0) { g.DrawString("**** NO INFORMATION ****",ypos); } while (count < LinesPerPage && rCCnt < dsComments.Tables[0].Rows.Count) { if (blnShadow) { g.FillRectangle(gryBrush,5); } lineComment = dsComments.Tables[0].Rows[rCCnt]["cmtText"].ToString().TrimEnd(); g.DrawString(string.Format("{0:0}",(dsComments.Tables[0].Rows[rCCnt]["QUANTITY"])),ypos); g.DrawString(dsComments.Tables[0].Rows[rCCnt]["ITEMNMBR"].ToString(),ypos); if (dsComments.Tables[0].Rows[rCCnt]["ITEMNMBR"].ToString().StartsWith("CALL TAG")) { rmaNumber = GetNumbers(dsComments.Tables[0].Rows[rCCnt]["cmtText"].ToString().TrimEnd()); rmaNumber = "RMA" + rmaNumber.PadLeft(12,'0'); g.DrawString(rmaNumber,ypos); g.DrawString("*" + rmaNumber + "*",bcSmallFont,130,ypos); ypos = ypos + 5; blnShadow = !blnShadow; intLineCnt++; count++; } else { //if the comment is really long then wrap that rascal if (Math.Ceiling(Convert.ToDouble(lineComment.Length) / 90) > 1) { if (count + (Math.Ceiling(Convert.ToDouble(lineComment.Length) / 90)) > LinesPerPage) { //Force new page before printing count = LinesPerPage; } else { while (lineComment.Length > 0) { if (lineComment.Length > 90) { printComment = lineComment.Substring(1,90); lineComment = lineComment.Substring(91); } else { printComment = lineComment; lineComment = ""; } if (blnShadow) { g.FillRectangle(gryBrush,5); } g.DrawString(printComment,ypos); ypos = ypos + 5; blnShadow = !blnShadow; intLineCnt++; count++; } } } else { g.DrawString(lineComment,ypos); intLineCnt++; count++; ypos = ypos + 5; blnShadow = !blnShadow; } } rCCnt = rCCnt + 1; } if (rCCnt <= dsComments.Tables[0].Rows.Count && intLineCnt >= LinesPerPage) { e.HasMorePages = true; pgCnt++; intLineCnt = 0; ypos = 95; blnNotesRecs = true; } else { if (blnIsSwapOrder) { e.HasMorePages = true; blnNotesRecs = false; pgCnt++; } else { e.HasMorePages = false; blnNotesRecs = false; } } } // //Swap page details // if (sStatus == "Swap") { ypos = 95; count = 0; blnShadow = false; while (count < LinesPerPage && rSCnt < dsSwap.Tables[0].Rows.Count) { if (blnShadow) { g.FillRectangle(gryBrush,5); } g.DrawString(dsSwap.Tables[0].Rows[rSCnt]["ITEMNMBR"].ToString(),ypos); if (dsSwap.Tables[0].Rows[rSCnt]["ITEMNMBR"].ToString().StartsWith("CALL TAG")) { rmaNumber = GetNumbers(dsSwap.Tables[0].Rows[rSCnt]["ITEMDESC"].ToString().TrimEnd()); rmaNumber = "RMA" + rmaNumber.PadLeft(12,ypos); } else { g.DrawString(dsSwap.Tables[0].Rows[rSCnt]["ITEMDESC"].ToString(),ypos); } g.DrawString(dsSwap.Tables[0].Rows[rSCnt]["LOCNCODE"].ToString(),dsSwap.Tables[0].Rows[rSCnt]["QUANTITY"]),ypos); g.DrawString(dsSwap.Tables[0].Rows[rSCnt]["UOFM"].ToString(),ypos); ypos = ypos + 5; rSCnt++; intLineCnt++; count++; blnShadow = !blnShadow; } if (rSCnt <= dsSwap.Tables[0].Rows.Count && intLineCnt >= LinesPerPage) { e.HasMorePages = true; pgCnt++; intLineCnt = 0; ypos = 95; blnSwapRecs = true; } else { e.HasMorePages = false; pgCnt++; blnSwapRecs = false; } } switch (sStatus) { case "Detail": if (!blnDetailRecs) {sStatus = "Notes";} break; case "Notes": if (!blnNotesRecs) {sStatus = "Swap";} break; case "Swap": if (!blnSwapRecs) {sStatus = "Detail";} break; } 解决方法
我发现了这个问题.我以管理员身份运行了应用程序,但我遇到了一个不同的错误.该错误表示打印位图有问题.它无法找到位图.显然我们的安装程序不包括相关的图像文件夹.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |