Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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# 将gridview转换为itextsharp表并使用asp.net生成pdf_C#_Asp.net_Pdf_Gridview_Itextsharp - Fatal编程技术网

C# 将gridview转换为itextsharp表并使用asp.net生成pdf

C# 将gridview转换为itextsharp表并使用asp.net生成pdf,c#,asp.net,pdf,gridview,itextsharp,C#,Asp.net,Pdf,Gridview,Itextsharp,在这里,我试图将GridView转换为PDF,但转换PDF时无法获得PDF中的GridView列宽。因此,我使用了另一种方法来生成PDF(即从GridView创建了itextsharp表。这里我得到了我在GridView column ItemStyle-width中给出的列宽大小。但是我在该GridView中对列进行了分组,所以在PDF中没有得到相同列宽的完整GridView。有人能帮我吗 资料来源如下: <asp:GridView ID="GridView1" runat="serve

在这里,我试图将GridView转换为PDF,但转换PDF时无法获得PDF中的GridView列宽。因此,我使用了另一种方法来生成PDF(即从GridView创建了itextsharp表。这里我得到了我在GridView column ItemStyle-width中给出的列宽大小。但是我在该GridView中对列进行了分组,所以在PDF中没有得到相同列宽的完整GridView。有人能帮我吗

资料来源如下:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
     onsorting="GridView1_Sorting">
     <HeaderStyle BackColor="#4F81BD" Font-Bold="true" ForeColor="#ffffff" HorizontalAlign="Center" Font-Size="12px"/>
    <AlternatingRowStyle BackColor="#D3DFEE" />
    <RowStyle />
    <Columns>
         <asp:BoundField DataField="Category" HeaderText="Category"
            SortExpression="Category" ItemStyle-Width="100px"/>
            <asp:BoundField DataField="Partno" HeaderText="Partno" 
             ItemStyle-Width="100px"/>
            <asp:BoundField DataField="Productname" HeaderText="Productname" 
             ItemStyle-Width="300px"/>
            <asp:BoundField DataField="Brand" HeaderText="Brand" 
            ItemStyle-Width="100px"/>
            <asp:BoundField DataField="Qty" HeaderText="Qty" 
             ItemStyle-Width="50px"/>
            <asp:BoundField DataField="Unitprice" HeaderText="Unitprice" 
             ItemStyle-Width="50px"/>
            <asp:BoundField DataField="Totalprice" HeaderText="Totalprice" 
             ItemStyle-Width="50px"/>
    </Columns>

</asp:GridView>  

以下是分组的gridview:

以下是将gridview转换为itextsharp表并生成PDF的代码:

//Create a table
iTextSharp.text.Table table = new iTextSharp.text.Table(GridView1.Columns.Count);
table.Cellpadding = 5;
//Set the column widths
int[] widths = new int[GridView1.Columns.Count];
for (int x = 0; x < GridView1.Columns.Count; x++)
{
    widths[x] = (int)GridView1.Columns[x].ItemStyle.Width.Value;
    string cellText = Server.HtmlDecode(GridView1.HeaderRow.Cells[x].Text);
    iTextSharp.text.Cell cell = new iTextSharp.text.Cell(cellText);
    cell.BackgroundColor = new iTextSharp.text.Color(System.Drawing.ColorTranslator.FromHtml("#008000"));
    table.AddCell(cell);
}

table.SetWidths(widths);
//Transfer rows from GridView to table

for (int i = 0; i < GridView1.Rows.Count; i++)
{
    if (GridView1.Rows[i].RowType == DataControlRowType.DataRow)
    {
        for (int j = 0; j < GridView1.Columns.Count; j++)
        {
            string cellText = Page.Server.HtmlDecode(GridView1.Rows[i].Cells[j].Text);
            iTextSharp.text.Cell cell = new iTextSharp.text.Cell(cellText);

            //Set Color of Alternating row
            if (i % 2 != 0)
            {
                cell.BackgroundColor = new iTextSharp.text.Color(System.Drawing.ColorTranslator.FromHtml("#C2D69B"));
            }

            table.AddCell(cell);
        }
    }
}

//Create the PDF Document

Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
pdfDoc.Add(table);
pdfDoc.Close();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;" +
                               "filename=GridViewExport.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Write(pdfDoc);
Response.End();
//创建一个表
iTextSharp.text.Table Table=新的iTextSharp.text.Table(GridView1.Columns.Count);
表1.1=5;
//设置列宽
int[]宽度=新的int[GridView1.Columns.Count];
对于(int x=0;x
以下是PDF格式:


我想要PDF中具有相同列宽的精确gridview。

默认情况下,
PdfPTable
使用相对宽度。当你说
table.SetWidths(widths)
iText将
widths进行求和,然后将每个单独的宽度除以该和得到一个百分比。因此
1,2,3
10,20,30
甚至
2,4,6
相同。您需要使用
SetTotalWidth(widths)
以及设置
LockedWidth=true
力绝对宽度

table.SetTotalWidth(widths);
table.LockedWidth = true;

但是,这样做意味着您现在知道并控制了表的水平布局。如果你的页面水平溢出,你将不会得到任何包装和东西只会被切断。您还声明,如果需要,可以使用边距空间。

这应该可以解决问题:

GridView1.AllowPaging = False

谢谢你的回答。我得到了gridview中提到的列宽,但我的问题是在pdf中没有显示完整的gridview(即,请参见分组的gridview图像)。总共有8行,但在pdf(pdf图像)中我只得到了5行。