加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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;
    }

解决方法

我发现了这个问题.我以管理员身份运行了应用程序,但我遇到了一个不同的错误.该错误表示打印位图有问题.它无法找到位图.显然我们的安装程序不包括相关的图像文件夹.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读