使用itextsharp创建PDF在开发中可以正常工作,但在部署到IIS 7时会失败

时间:2014-03-19 12:54:45

标签: iis-7 itextsharp

我正在使用IIS 7部署和测试应用程序。它使用ITextSharp创建PDF,从VS2010运行时可以正常工作。从IIS运行时,我收到一个错误:文档没有页面。 使用与VS2010开发服务器相同的数据,可以打印PDF。该错误与缺少页面无关。 itextsharp.dll包含在IIS网站下的bin文件夹中。 我错过了什么?

这是我的代码(虽然我不认为它是相关的);

    protected void TextSharpMethod()
    {
        // get order details
        #region getOrdersData
        var ordersData = DataAccessLayer.OrdersDataHelpers.getOrderDataByOrderId(_intOrderId);

        #endregion


        if (ordersData != null)
        {
            #region getSupplierDetails
            // get supplier details
            var rowSupplier = (from s in _dataContextOrders.FMSSuppliers
                               where s.ID == ordersData.SupplierID
                               select new
                                   {
                                       s.ID,
                                       s.CommonShortName,
                                       s.ExternalRef,
                                       s.Name,
                                       s.Address,
                                       s.SupplierDetail.Telephone,
                                       s.SupplierDetail.WebAddress,
                                       s.SupplierDetail.Email,
                                       s.SupplierDetail.Fax
                                   }).FirstOrDefault();
            #endregion

            #region getOrderLineData
            var orderLineData = (from ol in _dataContextOrders.OrderLines
                                 join o in _dataContextOrders.Orders on ol.OrderID equals o.ID
                                 join ec in _dataContextOrders.FMSExpenseCodes on ol.OrderLineExpenseCodeID equals ec.ID into group1
                                 from g1 in group1.DefaultIfEmpty()
                                 join cc in _dataContextOrders.FMSCostCentres on ol.OrderLineCostCentreID equals cc.ID into group2
                                 from g2 in group2.DefaultIfEmpty()

                                 select new
                                     {
                                         ol.ID,
                                         ol.OrderID,
                                         ol.OrderLineNumber,
                                         ol.OrderLineQty,
                                         ol.OrderLineDescription,
                                         ol.OrderLineUnitCost,
                                         ol.OrderLineUnitTax,
                                         ol.OrderLineTotal,
                                         ol.OrderLineExpenseCodeID,
                                         ol.GoodsReceivedQty,
                                         ol.InvoicedQty,
                                         ol.OrderLineCostCentreID,
                                         ol.OrderLineVatRate,
                                         ol.OrderLineUnitGross,

                                         ExpenseCode = g1.ExternalRef == null ? "" : g1.ExternalRef,
                                         CostCodeRef = g2.ExternalRef == null ? "" : g2.ExternalRef
                                     }).Where(ol => ol.OrderID == _intOrderId).OrderBy(ol => ol.OrderLineNumber);
            #endregion

            using (MemoryStream ms = new MemoryStream())
            using (Document document = new Document(PageSize.A4, 25, 25, 30, 30))
            using (PdfWriter writer = PdfWriter.GetInstance(document, ms))
            {
                document.AddCreator("SVSIT");
                document.AddTitle("PURCHASE ORDER");
                document.Open();

                #region setupPdfDoc

                // LOGO
                string path = Server.MapPath("/");

                string imageLocation = path + "/Images/southView_integration_logo_applications.jpg";
                imageLocation = imageLocation.Replace("\\", "/");
                iTextSharp.text.Image bmp =
                    iTextSharp.text.Image.GetInstance(imageLocation);
                // caution - image may not work if app is moved
                bmp.Alignment = Element.ALIGN_LEFT;
                bmp.ScalePercent(50f);
                document.Add(bmp);

                // COMPANY ADDRESS

                PdfPTable table = new PdfPTable(2);
                PdfPCell cell;
                //actual width of table in points (A4=595points)
                table.TotalWidth = 550f;
                table.LockedWidth = true;

                float[] widths = new float[] {2.75f, 2.75f};
                table.SetWidths(widths);
                // 0=no border, 1=border
                table.DefaultCell.BorderWidth = 0;
                PdfBlankCell(table);
                PdfAddTableCell(table, "PURCHASE ORDER", _bold);
                PdfBlankCell(table);


                float flXPos = 842; // 842 - height of A4 in points
                table.WriteSelectedRows(0, -1, document.Left, flXPos, writer.DirectContent);

                // CONTACT PERSON
                table = new PdfPTable(4);
                //actual width of table in points (A4=595points)

                table.TotalWidth = 550f;
                table.LockedWidth = true;

                widths = new float[] {1f, 1.75f, 1.35f, 1.35f};
                table.SetWidths(widths);
                // 0=no border, 1=border
                table.DefaultCell.BorderWidth = 0;

                PdfAddTableCell(table, "Contact Person", _norm);

                PdfAddTableCell(table, ordersData.OrderContactName, _norm);

                PdfAddTableCell(table, "Tel: " + ordersData.OrderContactTel, _norm);

                PdfAddTableCell(table, "Fax: " + ordersData.OrderContactFax, _norm);

                flXPos = 715;
                table.WriteSelectedRows(0, -1, document.Left, flXPos, writer.DirectContent);

                // SUPPLIER DETAILS

                table = new PdfPTable(1);
                table.TotalWidth = 270f;
                table.LockedWidth = true;
                table.DefaultCell.BorderWidth = 1; // has border
                PdfAddTableCell(table, "To (Supplier)", _bold);

                table.AddCell(ordersData.SupplierName);

                if (rowSupplier != null)
                {
                    table.AddCell(rowSupplier.Address); // might want to break this up by line breaks
                }
                else
                {
                    table.AddCell(" ");
                }

                flXPos = 695;
                table.WriteSelectedRows(0, -1, document.Left, flXPos, writer.DirectContent);

                // ORDER NO
                table = new PdfPTable(1);
                table.TotalWidth = 275f;
                table.LockedWidth = true;

                table.DefaultCell.BorderWidth = 0;
                table.DefaultCell.BorderWidthTop = 1;
                table.DefaultCell.BorderWidthLeft = 1;
                table.DefaultCell.BorderWidthRight = 1;


                PdfAddTableCell(table, "Order No: " + ordersData.PORef + " / 100630", _bold);

                table.DefaultCell.BorderWidthTop = 0;
                table.DefaultCell.BorderWidthLeft = 1;
                table.DefaultCell.BorderWidthRight = 1;

                PdfAddTableCell(table, " ", _bold);
                PdfBlankCell(table);

                PdfAddTableCell(table, "Date: " + ordersData.CreatedDate.ToShortDateString (), _bold);

                PdfAddTableCell(table, "Your ref: " + ordersData.OtherRef, _bold);

                PdfAddTableCell(table, " ", _bold);
                PdfAddTableCell(table, "PURCHASE ORDER NUMBER MUST BE", _bold);

                table.DefaultCell.BorderWidthTop = 0;
                table.DefaultCell.BorderWidthLeft = 1;
                table.DefaultCell.BorderWidthRight = 1;
                table.DefaultCell.BorderWidthBottom = 1;

                PdfAddTableCell(table, "QUOTED ON INVOICE TO ENSURE PAYMENT", _bold);


                table.WriteSelectedRows(0, -1, document.Left + 275, flXPos, writer.DirectContent);
                flXPos = 595;

                // DELIVERY ADDRESS

                table = new PdfPTable(1);
                table.TotalWidth = 270f;
                table.LockedWidth = true;
                table.DefaultCell.BorderWidth = 1; // has border
                PdfAddTableCell(table, "Delivery Address:", _bold);

                table.AddCell(ordersData.DeliveryContactName);

                table.AddCell(ordersData.DeliveryAddress);



                table.WriteSelectedRows(0, -1, document.Left, flXPos, writer.DirectContent);

                // INVOICE ADDRESS

                table = new PdfPTable(1);
                table.TotalWidth = 275f;
                table.LockedWidth = true;

                table.DefaultCell.BorderWidth = 0;

                table.DefaultCell.BorderWidthTop = 1;
                table.DefaultCell.BorderWidthLeft = 1;
                table.DefaultCell.BorderWidthRight = 1;

                PdfAddTableCell(table, "Invoice Address:", _bold);

                table.DefaultCell.BorderWidthTop = 0;
                table.DefaultCell.BorderWidthLeft = 1;
                table.DefaultCell.BorderWidthRight = 1;

                PdfAddTableCell(table, "          CVCHA", _norm);
                PdfAddTableCell(table, "          11 High Street", _norm);
                PdfAddTableCell(table, "          Castle Vale", _norm);
                PdfAddTableCell(table, "          Birmingham", _norm);

                table.DefaultCell.BorderWidthTop = 0;
                table.DefaultCell.BorderWidthLeft = 1;
                table.DefaultCell.BorderWidthRight = 1;
                table.DefaultCell.BorderWidthBottom = 1;

                PdfAddTableCell(table, "          B35 7PR", _norm);

                table.WriteSelectedRows(0, -1, document.Left + 275, flXPos, writer.DirectContent);

                // ORDER LINES

                table = new PdfPTable(5);
                table.TotalWidth = 550f;
                table.LockedWidth = true;
                widths = new float[] {2.70f, .7f, .7f, .7f, .7f};
                table.SetWidths(widths);
                table.DefaultCell.BorderWidth = 1;

                PdfAddTableCell(table, "Description", _bold);
                PdfAddTableCell(table, "Code", _bold);
                PdfAddTableCell(table, "Quantity", _bold);
                PdfAddTableCell(table, "Unit Cost", _bold);
                PdfAddTableCell(table, "Total Cost", _bold);
                // 13 rows
                // get order lines data
                int i1 = 0;
                foreach (var orderLine in orderLineData)
                {
                    if (orderLine != null)
                    {
                        PdfAddTableCell(table, orderLine.OrderLineDescription, _norm);
                        PdfAddTableCell(table, orderLine .CostCodeRef +", " + orderLine.ExpenseCode , _norm); // code - to do
                        PdfAlignRightTableCell(table, orderLine.OrderLineQty.ToString(), _norm);
                        PdfAlignRightTableCell (table, orderLine.OrderLineUnitCost.ToString(), _norm);
                        PdfAlignRightTableCell(table, orderLine.OrderLineTotal.ToString(), _norm);
                        i1++;
                    }
                }
                // fill remaining grid
                for (int i = i1; i <= 13; i++)
                {
                    PdfAddTableCell(table, " ", _norm);
                    PdfAddTableCell(table, " ", _norm);
                    PdfAddTableCell(table, " ", _norm);
                    PdfAddTableCell(table, " ", _norm);
                    PdfAddTableCell(table, " ", _norm);
                }

                // DELIVERY DATE / TOTAL LINE


                PdfAddTableCell(table, "Required Delivery Date: " + ordersData.ExpectedDeliveryDate, _bold);

                _chunk = new Chunk("Total:                £", _bold );
                cell = new PdfPCell(new Phrase(_chunk));
                cell.Colspan = 3;
                table.DefaultCell.BorderWidth = 1;
                table.AddCell(cell);

                _chunk = new Chunk(ordersData.TotalAmount.ToString("0.00"), _bold);
                cell = new PdfPCell(new Phrase(_chunk));
                cell.Colspan = 1;

                table.DefaultCell.VerticalAlignment  = Element.ALIGN_RIGHT;
                table.DefaultCell.HorizontalAlignment = Element.ALIGN_RIGHT;
                table.AddCell(cell);

                flXPos = 490;
                table.WriteSelectedRows(0, -1, document.Left, flXPos, writer.DirectContent);

                // PREPARED BY / AUTHORISED BY

                table = new PdfPTable(3);
                table.TotalWidth = 550f;
                table.LockedWidth = true;
                widths = new float[] {1.83f, 1.83f, 1.83f};
                table.SetWidths(widths);
                table.DefaultCell.BorderWidth = 1;

                PdfAddTableCell(table, "Prepared By:" + "", _bold);
                PdfAddTableCell(table, "Signature:" + "", _bold);
                PdfAddTableCell(table, "Date:" + "", _bold);

                PdfAddTableCell(table, "Authorised By:" + "", _bold); // ApproverPersonID
                PdfAddTableCell(table, "Signature:" + "", _bold);
                PdfAddTableCell(table, "Date:" + "", _bold);

                flXPos = 195;
                table.WriteSelectedRows(0, -1, document.Left, flXPos, writer.DirectContent);

                // FOOTER

                table = new PdfPTable(1);
                table.TotalWidth = 550f;
                table.LockedWidth = true;
                table.DefaultCell.BorderWidth = 0;
                PdfAddTableCell(table, "Distibution of Copies", _norm);
                PdfAddTableCell(table,
                                "1. White - Supplier     2. Yellow - Finance Section     3. Pink - Originator (Budget Holder)",
                                _norm);
                PdfAddTableCell(table, "Industrial & Provident Society No. 28414R     Housing Corporation No. L4118",
                                _norm);

                flXPos = 95;
                table.WriteSelectedRows(0, -1, document.Left, flXPos, writer.DirectContent);

                #endregion

                document.Close();
                writer.Close();

                #region writeToDatabase

                MemoryStream ms2 = new MemoryStream(ms.ToArray());

                WritePdfToDatabase(ms2);

                #endregion

                Response.ContentType = "pdf/application";
                Response.AddHeader("content-disposition", "attachment;filename=PurchaseOrder.pdf");
                Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);

            }
        }
    }

    protected void WritePdfToDatabase(MemoryStream ms2)
    {
        BinaryReader br = new BinaryReader(ms2);
        Byte[] bytes = br.ReadBytes((Int32)ms2.Length);
        br.Close();

        DocumentsDataHelper.UpdateDocument(bytes, "pdf/application", "Purchase Order",_intOrderId ,1);
    }


    protected void PdfBlankCell(PdfPTable table)
    {
        _chunk = new Chunk("", _norm);
        _phrase = new Phrase(_chunk);
        table.AddCell(_phrase);
    }

    protected void PdfAddTableCell(PdfPTable table, string s, Font f)
    {
        _chunk = new Chunk(s, f);
        _phrase = new Phrase(_chunk);
        table.DefaultCell.HorizontalAlignment = Element.ALIGN_LEFT;
        table.AddCell(_phrase);
    }
    protected void PdfAlignRightTableCell(PdfPTable table, string s, Font f)
    {
        _chunk = new Chunk(s, f);
        _phrase = new Phrase(_chunk);
        table.DefaultCell.HorizontalAlignment = Element.ALIGN_RIGHT;
        table.AddCell(_phrase);
    }
    protected void PdfTableFieldAndHeader(string heading, string value, PdfPTable table)
    {
        PdfAddTableCell(table, heading, _bold);
        PdfAddTableCell(table, value, _norm);
    }
    protected void PdfBoldAndNormLine(string text1, string text2, Document document)
    {

        Chunk c1 = new Chunk(text1, FontFactory.GetFont(FontFactory.TIMES_ROMAN, 12.0f, iTextSharp.text.Font.BOLD));
        Chunk c2 = new Chunk(text2, FontFactory.GetFont(FontFactory.TIMES_ROMAN, 12.0f, iTextSharp.text.Font.NORMAL));
        Phrase p1 = new Phrase();
        p1.Add(c1);
        p1.Add(c2);
        Paragraph p = new Paragraph();

        p.Add(p1);
        p.Alignment = Element.ALIGN_LEFT;
        document.Add(p);
    }

0 个答案:

没有答案