Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# iTextSharp可打印网格视图_C#_Asp.net_Printing_Fonts_Itextsharp - Fatal编程技术网

C# iTextSharp可打印网格视图

C# iTextSharp可打印网格视图,c#,asp.net,printing,fonts,itextsharp,C#,Asp.net,Printing,Fonts,Itextsharp,我使用iTextSharp打印栅格视图,但我面临一些问题: 根本没有出现阿拉伯字符 方向是LTR,我想改为RTL gridview中的一些列是templatefields(标签、imagebutton等),我无法处理这种情况。我不会全部显示(如删除按钮…) 守则: protected void ExportToPDF(GridView gvReport, bool LandScape) { int noOfColumns = 0, noOfRows =

我使用iTextSharp打印栅格视图,但我面临一些问题:

  • 根本没有出现阿拉伯字符

  • 方向是LTR,我想改为RTL

  • gridview中的一些列是templatefields(标签、imagebutton等),我无法处理这种情况。我不会全部显示(如删除按钮…)

  • 守则:

     protected void ExportToPDF(GridView gvReport, bool LandScape)
            {
                int noOfColumns = 0, noOfRows = 0;
                DataTable tbl = null;
    
                if (gvReport.AutoGenerateColumns)
                {
                    tbl = gvReport.DataSource as DataTable; // Gets the DataSource of the GridView Control.
                    noOfColumns = tbl.Columns.Count;
                    noOfRows = tbl.Rows.Count;
                }
                else
                {
                    noOfColumns = gvReport.Columns.Count;
                    noOfRows = gvReport.Rows.Count;
                }
    
                float HeaderTextSize = 8;
                float ReportNameSize = 10;
                float ReportTextSize = 8;
                float ApplicationNameSize = 7;
    
                // Creates a PDF document
    
                Document document = null;
                if (LandScape == true)
                {
                    // Sets the document to A4 size and rotates it so that the     orientation of the page is Landscape.
                    document = new Document(PageSize.A4.Rotate(), 0, 0, 15, 5);
                }
                else
                {
                    document = new Document(PageSize.A4, 0, 0, 15, 5);
                }
    
                // Creates a PdfPTable with column count of the table equal to no of columns of the gridview or gridview datasource.
                iTextSharp.text.pdf.PdfPTable mainTable = new iTextSharp.text.pdf.PdfPTable(noOfColumns);
    
                // Sets the first 4 rows of the table as the header rows which will be repeated in all the pages.
                mainTable.HeaderRows = 4;
    
                // Creates a PdfPTable with 2 columns to hold the header in the exported PDF.
                iTextSharp.text.pdf.PdfPTable headerTable = new iTextSharp.text.pdf.PdfPTable(2);
    
                // Creates a phrase to hold the application name at the left hand side of the header.
                Phrase phApplicationName = new Phrase("Contact List", FontFactory.GetFont("Arial", ApplicationNameSize, iTextSharp.text.Font.TIMES_ROMAN));
    
                // Creates a PdfPCell which accepts a phrase as a parameter.
                PdfPCell clApplicationName = new PdfPCell(phApplicationName);
                // Sets the border of the cell to zero.
                clApplicationName.Border = PdfPCell.NO_BORDER;
                // Sets the Horizontal Alignment of the PdfPCell to left.
                clApplicationName.HorizontalAlignment = Element.ALIGN_LEFT;
    
                // Creates a phrase to show the current date at the right hand side of the header.
                Phrase phDate = new Phrase(DateTime.Now.Date.ToString("dd/MM/yyyy"), FontFactory.GetFont("Arial", ApplicationNameSize, iTextSharp.text.Font.NORMAL));
    
                // Creates a PdfPCell which accepts the date phrase as a parameter.
                PdfPCell clDate = new PdfPCell(phDate);
                // Sets the Horizontal Alignment of the PdfPCell to right.
                clDate.HorizontalAlignment = Element.ALIGN_RIGHT;
                // Sets the border of the cell to zero.
                clDate.Border = PdfPCell.NO_BORDER;
    
                // Adds the cell which holds the application name to the headerTable.
                headerTable.AddCell(clApplicationName);
                // Adds the cell which holds the date to the headerTable.
                headerTable.AddCell(clDate);
                // Sets the border of the headerTable to zero.
                headerTable.DefaultCell.Border = PdfPCell.NO_BORDER;
    
                // Creates a PdfPCell that accepts the headerTable as a parameter and then adds that cell to the main PdfPTable.
                PdfPCell cellHeader = new PdfPCell(headerTable);
                cellHeader.Border = PdfPCell.NO_BORDER;
                // Sets the column span of the header cell to noOfColumns.
                cellHeader.Colspan = noOfColumns;
                // Adds the above header cell to the table.
                mainTable.AddCell(cellHeader);
    
                // Creates a phrase which holds the file name.
                Phrase phHeader = new Phrase("Contact List", FontFactory.GetFont("Arial", ReportNameSize, iTextSharp.text.Font.BOLD));
                PdfPCell clHeader = new PdfPCell(phHeader);
                clHeader.Colspan = noOfColumns;
                clHeader.Border = PdfPCell.NO_BORDER;
                clHeader.HorizontalAlignment = Element.ALIGN_CENTER;
                mainTable.AddCell(clHeader);
    
                // Creates a phrase for a new line.
                Phrase phSpace = new Phrase("\n");
                PdfPCell clSpace = new PdfPCell(phSpace);
                clSpace.Border = PdfPCell.NO_BORDER;
                clSpace.Colspan = noOfColumns;
                mainTable.AddCell(clSpace);
    
                // Sets the gridview column names as table headers.
                for (int i = 0; i < noOfColumns; i++)
                {
                    Phrase ph = null;
    
                    if (gvReport.AutoGenerateColumns)
                    {
                        ph = new Phrase(tbl.Columns[i].ColumnName, FontFactory.GetFont("Arial", HeaderTextSize, iTextSharp.text.Font.BOLD));
                    }
                    else
                    {
                        ph = new Phrase(gvReport.Columns[i].HeaderText, FontFactory.GetFont("Arial", HeaderTextSize, iTextSharp.text.Font.BOLD));
                    }
    
                    mainTable.AddCell(ph);
                }
    
                // Reads the gridview rows and adds them to the mainTable
                for (int rowNo = 0; rowNo < noOfRows; rowNo++)
                {
                    for (int columnNo = 0; columnNo < noOfColumns; columnNo++)
                    {
                        if (gvReport.AutoGenerateColumns)
                        {
                            string s = gvReport.Rows[rowNo].Cells[columnNo].Text.Trim();
                            Phrase ph = new Phrase(s, FontFactory.GetFont("Arial", ReportTextSize, iTextSharp.text.Font.NORMAL));
                            mainTable.AddCell(ph);
                        }
                        else
                        {
                            if (gvReport.Columns[columnNo] is TemplateField)
                            {
                                try
                                {
                                    Label lc = gvReport.Rows[rowNo].Cells[columnNo].Controls[1] as Label;
    
                                    string s = lc.Text.Trim();
                                    Phrase ph = new Phrase(s, FontFactory.GetFont("Arial", ReportTextSize, iTextSharp.text.Font.NORMAL));
                                    mainTable.AddCell(ph);
                                }
                                catch (NullReferenceException ee)
                                {
                                    noOfColumns--;
                                }
                                catch (Exception ee)
                                {
                                    noOfColumns--;
                                }
                            }
                            else
                            {
                                string s = gvReport.Rows[rowNo].Cells[columnNo].Text.Trim();
                                Phrase ph = new Phrase(s, FontFactory.GetFont("Arial", ReportTextSize, iTextSharp.text.Font.NORMAL));
                                mainTable.AddCell(ph);
                            }
                        }
                    }
    
                    // Tells the mainTable to complete the row even if any cell is left incomplete.
                    mainTable.CompleteRow();
                }
    
                // Gets the instance of the document created and writes it to the output stream of the Response object.
                PdfWriter.GetInstance(document, Response.OutputStream);
    
                // Creates a footer for the PDF document.
                HeaderFooter pdfFooter = new HeaderFooter(new Phrase(), true);
                pdfFooter.Alignment = Element.ALIGN_CENTER;
                pdfFooter.Border = iTextSharp.text.Rectangle.NO_BORDER;
    
                // Sets the document footer to pdfFooter.
                document.Footer = pdfFooter;
                // Opens the document.
                document.Open();
                // Adds the mainTable to the document.
                document.Add(mainTable);
                // Closes the document.
                document.Close();
    
                Response.ContentType = "application/pdf";
                Response.AddHeader("content-disposition", "attachment; filename= ContactList.pdf");
                Response.End();
            }
    

    如何解决这些问题?

    支持RTL。 您也可以试试library。

    在Output中,您可以看到LTR上的英语列和RTL上的阿拉伯语列。如果要在页面上使用RTL显示GridView,则可以使用
    将Grid View放置在此处
    。 GridView:

     <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False">
            <Columns>
                <asp:TemplateField HeaderText="العربية" SortExpression="العربية">
                    <ItemTemplate>
                        <asp:Label ID="arabic" runat="server" Text='<%# Eval("العربية")%>' />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <Columns>
                <asp:TemplateField HeaderText="English" SortExpression="English">
                    <ItemTemplate>
                        <asp:Label ID="english" runat="server" Text='<%# Eval("English") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Button ID="deleteButton" runat="server" Text="Delete" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:HyperLink ID="open" runat="server" Text="Open" NavigateUrl="~/Default.aspx"/>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
            SelectCommand="SELECT [English], [العربية] FROM [Test]"></asp:SqlDataSource>
        <br />
        <asp:Button ID="btnExport" runat="server" OnClick="btnExport_Click" Text="Export to PDF" />
    
    
    
    CS代码:

     protected void ExportPDF(GridView gridViewReport)
        {
            int columnNumber = 0, rowNumber = 0;
            DataTable tbl = null;
    
            if (gridViewReport.AutoGenerateColumns)
            {
                tbl = gridViewReport.DataSource as DataTable; // Gets the DataSource of the GridView Control.
                columnNumber = tbl.Columns.Count;
                rowNumber = tbl.Rows.Count;
            }
            else
            {
                columnNumber = gridViewReport.Columns.Count;
                rowNumber = gridViewReport.Rows.Count;
            }
            // Creates a PDF document
            Document document = null;
            document = new Document(PageSize.A4, 0, 0, 15, 5);
            PdfPTable _table = new PdfPTable(GridView1.Columns.Count);
            _table.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
            BaseFont baseFont = BaseFont.CreateFont("c:\\\\windows\\\\fonts\\\\tahoma.ttf", BaseFont.IDENTITY_H, true); // Font which has Arabic characters
            iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, 10, iTextSharp.text.Font.NORMAL);
    
            // Sets the gridview column names as table headers.
            for (int i = 0; i < columnNumber; i++)
            {
                iTextSharp.text.pdf.PdfPCell ph = null;
    
                if (gridViewReport.AutoGenerateColumns)
                {
                    ph = new PdfPCell(new Phrase(10, tbl.Columns[i].ColumnName, font));
                }
                else
                {
                    ph = new PdfPCell(new Phrase(10, gridViewReport.Columns[i].HeaderText, font));
                }
                if (ph != null && gridViewReport.Columns[i].HeaderText != "")
                {
                    if (Regex.IsMatch(gridViewReport.Columns[i].HeaderText, "^[a-zA-Z0-9 ]*$")) // Check if Header Text is English
                    {
                        ph.RunDirection = PdfWriter.RUN_DIRECTION_LTR; // Left to Right
                        BaseColor color = new BaseColor(Color.Red);
                        ph.BackgroundColor = color;
                        _table.AddCell(ph);
                    }
                    else
                    {
                        ph.RunDirection = PdfWriter.RUN_DIRECTION_RTL; //Right to Left
                        BaseColor color = new BaseColor(Color.Red);
                        ph.BackgroundColor = color;
                        _table.AddCell(ph);
                    }
                }
                else
                {
                    ph.Border = iTextSharp.text.Rectangle.NO_BORDER;
                    _table.AddCell(ph);
                }
            }
            // Get the gridview rows and adds them to the _table
            for (int rowIteration = 0; rowIteration < rowNumber; rowIteration++)
            {
                for (int columnIteration = 0; columnIteration < columnNumber; columnIteration++)
                {
                    if (gridViewReport.AutoGenerateColumns) //Check if AutoGenrated Colunms
                    {
                        string s = gridViewReport.Rows[rowIteration].Cells[columnIteration].Text.Trim();
                        PdfPCell ph = new PdfPCell(new Phrase(10, s, font));
                        _table.AddCell(ph);
                    }
                    else
                    {
                        if (gridViewReport.Columns[columnIteration] is TemplateField) // Check if Item Template
                        {
                            PdfPCell ph = null;
                            Label lc = gridViewReport.Rows[rowIteration].Cells[columnIteration].Controls[1] as Label; // Label
                            Button btn = gridViewReport.Rows[rowIteration].Cells[columnIteration].Controls[1] as Button;// Button
                            HyperLink hyperLink = gridViewReport.Rows[rowIteration].Cells[columnIteration].Controls[1] as HyperLink; // HyperLink
    
                            if (lc != null)
                            {
    
                                string s = lc.Text.Trim();
                                ph = new PdfPCell(new Phrase(10, s, font));
                                if (Regex.IsMatch(s, "^[a-zA-Z0-9 ]*$")) //Check if cell string is English
                                {   ph.RunDirection = PdfWriter.RUN_DIRECTION_LTR; // Left to Right
                                    _table.AddCell(ph); 
                                }
                                else
                                {
                                    ph.RunDirection = PdfWriter.RUN_DIRECTION_RTL; // Right to Left
                                    _table.AddCell(ph);
                                }
    
                            }
                            else if (btn != null)
                            {
                                ph = new PdfPCell(new Phrase(10, btn.Text, font));
                                ph.Phrase.Clear(); // Clear the Cell Phrase
                                ph.Border = iTextSharp.text.Rectangle.NO_BORDER;
    
                                _table.AddCell(ph);
                            }
                            else if (hyperLink != null)
                            {
                                ph = new PdfPCell(new Phrase(10, hyperLink.Text, font));
                                ph.Phrase.Clear(); //Clear the Cell Phrase
                                ph.Border = iTextSharp.text.Rectangle.NO_BORDER; 
                                _table.AddCell(ph);
                            }
                            else
                            {
                                _table.AddCell("--");
                            }
                        }
                        else
                        {
                            string s = gridViewReport.Rows[rowIteration].Cells[columnIteration].Text.Trim();
                            PdfPCell ph = new PdfPCell(new Phrase(10, s, font));
                            _table.AddCell(ph);
                        }
                    }
                }
                _table.CompleteRow();
            }
            PdfWriter.GetInstance(document, Response.OutputStream);
            // Opens the document.
            document.Open();
            // Adds the _table to the document.
            document.Add(_table);
            // Closes the document.
            document.Close();
            Page.Response.ContentType = "application/pdf";
            Page.Response.AddHeader("content-disposition", "attachment;filename=MyGrid.pdf");
            Page.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Page.Response.Write(document);
            Page.Response.End();
    
        }
    
    protectedvoid导出PDF(GridView gridViewReport)
    {
    int columnNumber=0,rowNumber=0;
    数据表tbl=null;
    if(gridViewReport.AutoGenerateColumns)
    {
    tbl=gridViewReport.DataSource as DataTable;//获取GridView控件的数据源。
    columnNumber=tbl.Columns.Count;
    rowNumber=tbl.Rows.Count;
    }
    其他的
    {
    columnNumber=gridViewReport.Columns.Count;
    rowNumber=gridViewReport.Rows.Count;
    }
    //创建PDF文档
    单据=空;
    文档=新文档(PageSize.A4,0,0,15,5);
    PdfPTable _table=新的PdfPTable(GridView1.Columns.Count);
    _table.RunDirection=PdfWriter.RUN\u DIRECTION\u RTL;
    BaseFont BaseFont=BaseFont.CreateFont(“c:\\\\windows\\\\fonts\\\\\tahoma.ttf”,BaseFont.IDENTITY\u H,true);//具有阿拉伯字符的字体
    iTextSharp.text.Font Font=新建iTextSharp.text.Font(baseFont,10,iTextSharp.text.Font.NORMAL);
    //将gridview列名设置为表标题。
    对于(int i=0;i <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False">
            <Columns>
                <asp:TemplateField HeaderText="العربية" SortExpression="العربية">
                    <ItemTemplate>
                        <asp:Label ID="arabic" runat="server" Text='<%# Eval("العربية")%>' />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <Columns>
                <asp:TemplateField HeaderText="English" SortExpression="English">
                    <ItemTemplate>
                        <asp:Label ID="english" runat="server" Text='<%# Eval("English") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Button ID="deleteButton" runat="server" Text="Delete" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:HyperLink ID="open" runat="server" Text="Open" NavigateUrl="~/Default.aspx"/>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
            SelectCommand="SELECT [English], [العربية] FROM [Test]"></asp:SqlDataSource>
        <br />
        <asp:Button ID="btnExport" runat="server" OnClick="btnExport_Click" Text="Export to PDF" />
    
     protected void ExportPDF(GridView gridViewReport)
        {
            int columnNumber = 0, rowNumber = 0;
            DataTable tbl = null;
    
            if (gridViewReport.AutoGenerateColumns)
            {
                tbl = gridViewReport.DataSource as DataTable; // Gets the DataSource of the GridView Control.
                columnNumber = tbl.Columns.Count;
                rowNumber = tbl.Rows.Count;
            }
            else
            {
                columnNumber = gridViewReport.Columns.Count;
                rowNumber = gridViewReport.Rows.Count;
            }
            // Creates a PDF document
            Document document = null;
            document = new Document(PageSize.A4, 0, 0, 15, 5);
            PdfPTable _table = new PdfPTable(GridView1.Columns.Count);
            _table.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
            BaseFont baseFont = BaseFont.CreateFont("c:\\\\windows\\\\fonts\\\\tahoma.ttf", BaseFont.IDENTITY_H, true); // Font which has Arabic characters
            iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, 10, iTextSharp.text.Font.NORMAL);
    
            // Sets the gridview column names as table headers.
            for (int i = 0; i < columnNumber; i++)
            {
                iTextSharp.text.pdf.PdfPCell ph = null;
    
                if (gridViewReport.AutoGenerateColumns)
                {
                    ph = new PdfPCell(new Phrase(10, tbl.Columns[i].ColumnName, font));
                }
                else
                {
                    ph = new PdfPCell(new Phrase(10, gridViewReport.Columns[i].HeaderText, font));
                }
                if (ph != null && gridViewReport.Columns[i].HeaderText != "")
                {
                    if (Regex.IsMatch(gridViewReport.Columns[i].HeaderText, "^[a-zA-Z0-9 ]*$")) // Check if Header Text is English
                    {
                        ph.RunDirection = PdfWriter.RUN_DIRECTION_LTR; // Left to Right
                        BaseColor color = new BaseColor(Color.Red);
                        ph.BackgroundColor = color;
                        _table.AddCell(ph);
                    }
                    else
                    {
                        ph.RunDirection = PdfWriter.RUN_DIRECTION_RTL; //Right to Left
                        BaseColor color = new BaseColor(Color.Red);
                        ph.BackgroundColor = color;
                        _table.AddCell(ph);
                    }
                }
                else
                {
                    ph.Border = iTextSharp.text.Rectangle.NO_BORDER;
                    _table.AddCell(ph);
                }
            }
            // Get the gridview rows and adds them to the _table
            for (int rowIteration = 0; rowIteration < rowNumber; rowIteration++)
            {
                for (int columnIteration = 0; columnIteration < columnNumber; columnIteration++)
                {
                    if (gridViewReport.AutoGenerateColumns) //Check if AutoGenrated Colunms
                    {
                        string s = gridViewReport.Rows[rowIteration].Cells[columnIteration].Text.Trim();
                        PdfPCell ph = new PdfPCell(new Phrase(10, s, font));
                        _table.AddCell(ph);
                    }
                    else
                    {
                        if (gridViewReport.Columns[columnIteration] is TemplateField) // Check if Item Template
                        {
                            PdfPCell ph = null;
                            Label lc = gridViewReport.Rows[rowIteration].Cells[columnIteration].Controls[1] as Label; // Label
                            Button btn = gridViewReport.Rows[rowIteration].Cells[columnIteration].Controls[1] as Button;// Button
                            HyperLink hyperLink = gridViewReport.Rows[rowIteration].Cells[columnIteration].Controls[1] as HyperLink; // HyperLink
    
                            if (lc != null)
                            {
    
                                string s = lc.Text.Trim();
                                ph = new PdfPCell(new Phrase(10, s, font));
                                if (Regex.IsMatch(s, "^[a-zA-Z0-9 ]*$")) //Check if cell string is English
                                {   ph.RunDirection = PdfWriter.RUN_DIRECTION_LTR; // Left to Right
                                    _table.AddCell(ph); 
                                }
                                else
                                {
                                    ph.RunDirection = PdfWriter.RUN_DIRECTION_RTL; // Right to Left
                                    _table.AddCell(ph);
                                }
    
                            }
                            else if (btn != null)
                            {
                                ph = new PdfPCell(new Phrase(10, btn.Text, font));
                                ph.Phrase.Clear(); // Clear the Cell Phrase
                                ph.Border = iTextSharp.text.Rectangle.NO_BORDER;
    
                                _table.AddCell(ph);
                            }
                            else if (hyperLink != null)
                            {
                                ph = new PdfPCell(new Phrase(10, hyperLink.Text, font));
                                ph.Phrase.Clear(); //Clear the Cell Phrase
                                ph.Border = iTextSharp.text.Rectangle.NO_BORDER; 
                                _table.AddCell(ph);
                            }
                            else
                            {
                                _table.AddCell("--");
                            }
                        }
                        else
                        {
                            string s = gridViewReport.Rows[rowIteration].Cells[columnIteration].Text.Trim();
                            PdfPCell ph = new PdfPCell(new Phrase(10, s, font));
                            _table.AddCell(ph);
                        }
                    }
                }
                _table.CompleteRow();
            }
            PdfWriter.GetInstance(document, Response.OutputStream);
            // Opens the document.
            document.Open();
            // Adds the _table to the document.
            document.Add(_table);
            // Closes the document.
            document.Close();
            Page.Response.ContentType = "application/pdf";
            Page.Response.AddHeader("content-disposition", "attachment;filename=MyGrid.pdf");
            Page.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Page.Response.Write(document);
            Page.Response.End();
    
        }