【发布时间】:2015-09-02 10:33:50
【问题描述】:
使用这个 c# 代码,我需要以 PDF 格式导出一个 GridView。
我使用 iTextSharp 类。
我的问题是gridview的最后一列我设置了超链接标签。
在导出的pdf中,超链接的图像在相应的单元格内没有对齐,因为向右移动了其他单元格的所有值。
请查看附件图片。
有人知道我该如何解决这个问题吗?
你能推荐其他方法吗?
提前谢谢你。
请检查下面的代码。
for (int rowIndex = 0; rowIndex < gvProducts.Rows.Count; rowIndex++)
{
for (int j = 0; j < gvProducts.Columns.Count; j++)
{
if (j == 10)
{
cellText = (gvProducts.Rows[rowIndex].Cells[10].FindControl("img") as HyperLink).NavigateUrl;
string imagePath = Server.MapPath((gvProducts.Rows[rowIndex].Cells[10].FindControl("img") as HyperLink).ImageUrl);
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(imagePath);
Chunk cImage = new Chunk(image, 0, 0, false);
Anchor anchor = new Anchor(cImage);
anchor.Reference = cellText.ToString();
table.AddCell(anchor);
}
else
{
cellText = Server.HtmlDecode(gvProducts.Rows[rowIndex].Cells[j].Text);
}
cell = new PdfPCell(new Phrase(cellText, FontFactory.GetFont("PrepareForExport", 8)));
cell.HorizontalAlignment = Element.ALIGN_CENTER;
cell.VerticalAlignment = Element.ALIGN_MIDDLE;
cell.FixedHeight = 25f;
table.AddCell(cell);
}
}
编辑#1
protected void ExportToPDFWithFormatting()
{
PdfPTable table = null;
int colCount = gvProducts.Columns.Count;
table = new PdfPTable(colCount);
table.HorizontalAlignment = 1;
table.WidthPercentage = 100;
int[] colWidths = new int[gvProducts.Columns.Count];
PdfPCell cell;
string cellText;
for (int colIndex = 0; colIndex < colCount; colIndex++)
{
colWidths[colIndex] = (int)gvProducts.Columns[colIndex].ItemStyle.Width.Value;
cellText = Server.HtmlDecode(gvProducts.HeaderRow.Cells[colIndex].Text);
BaseFont bf = BaseFont.CreateFont(
BaseFont.HELVETICA,
BaseFont.CP1252,
BaseFont.EMBEDDED,
false);
iTextSharp.text.Font font = new iTextSharp.text.Font(bf, 10, iTextSharp.text.Font.BOLD, BaseColor.WHITE);
cell = new PdfPCell(new Phrase(cellText.Replace("<br />", Environment.NewLine), font));
cell.HorizontalAlignment = Element.ALIGN_CENTER;
cell.VerticalAlignment = Element.ALIGN_MIDDLE;
cell.FixedHeight = 55f;
cell.BackgroundColor = new BaseColor(System.Drawing.ColorTranslator.FromHtml("#a52a2a"));
table.AddCell(cell);
}
for (int rowIndex = 0; rowIndex < gvProducts.Rows.Count; rowIndex++)
{
if (gvProducts.Rows[rowIndex].RowType == DataControlRowType.DataRow)
{
for (int j = 0; j < gvProducts.Columns.Count; j++)
{
if (j == 10)
{
cellText = (gvProducts.Rows[rowIndex].Cells[10].FindControl("img") as HyperLink).NavigateUrl;
string imagePath = Server.MapPath((gvProducts.Rows[rowIndex].Cells[10].FindControl("img") as HyperLink).ImageUrl);
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(imagePath);
Chunk cImage = new Chunk(image, 0, 0, false);
Anchor anchor = new Anchor(cImage);
anchor.Reference = cellText.ToString();
table.AddCell(anchor);
}
else
{
cellText = Server.HtmlDecode(gvProducts.Rows[rowIndex].Cells[j].Text);
}
cell = new PdfPCell(new Phrase(cellText, FontFactory.GetFont("PrepareForExport", 8)));
cell.HorizontalAlignment = Element.ALIGN_CENTER;
cell.VerticalAlignment = Element.ALIGN_MIDDLE;
cell.FixedHeight = 25f;
table.AddCell(cell);
}
}
}
Document pdfDoc = new Document(PageSize.A3.Rotate(), 30f, 30f, 30f, 0f);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
table.HeaderRows = 1;
iTextSharp.text.Font fdefault = FontFactory.GetFont("Verdana", 18, iTextSharp.text.Font.BOLD, BaseColor.BLUE);
string s;
s = "Test Export";
pdfDoc.Add(new Paragraph(s, fdefault));
pdfDoc.Add(table);
pdfDoc.Close();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;" + "filename=" + DateTime.Now + ".pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Write(pdfDoc);
Response.End();
}
编辑#2
<table class="mGrid" cellspacing="0" align="Center" rules="all" border="1" id="gvProducts" style="width:500px;border-collapse:collapse;">
<tr>
<th scope="col"> </th>
<th scope="col">A</th>
<th scope="col">B</th>
<th scope="col">C</th>
<th scope="col">D</th>
<th scope="col">E</th>
<th scope="col">F</th>
<th scope="col">G</th>
<th scope="col">H</th>
<th scope="col">L</th>
<th scope="col">M</th>
</tr>
<tr style="background-color:#DCF5F5;">
<td><input type="image" name="gvProducts$ctl02$imgbtnEdit" id="gvProducts_imgbtnEdit_0" src="/images/edit.gif" /></td>
<td class="ddl_Class_new" align="left">1</td>
<td class="ddl_Class_new" align="left">2</td>
<td class="ddl_Class_new" align="left">3</td>
<td class="ddl_Class_new" align="left">4</td>
<td class="ddl_Class_new" align="left">5</td>
<td class="ddl_Class_new" align="left">6</td>
<td class="ddl_Class_new" align="left">7</td>
<td class="ddl_Class_new" align="left">138,79</td>
<td class="ddl_Class_new" align="left">NO</td>
<td class="ddl_Class_new" align="left"><a id="gvProducts_img_0"><img src="/Images/cross-button.png" /></a></td>
</tr>
<tr style="background-color:#DCF5F5;">
<td><input type="image" name="gvProducts$ctl03$imgbtnEdit" id="gvProducts_imgbtnEdit_1" src="/images/edit.gif" /></td>
<td class="ddl_Class_new" align="left">1</td>
<td class="ddl_Class_new" align="left">2</td>
<td class="ddl_Class_new" align="left">3</td>
<td class="ddl_Class_new" align="left">4</td>
<td class="ddl_Class_new" align="left">5</td>
<td class="ddl_Class_new" align="left">6</td>
<td class="ddl_Class_new" align="left">7</td>
<td class="ddl_Class_new" align="left">138,80</td>
<td class="ddl_Class_new" align="left">NO</td>
<td class="ddl_Class_new" align="left"><a id="gvProducts_img_1"><img src="/Images/cross-button.png" /></a></td>
</tr>
<tr style="background-color:#DCF5F5;">
<td><input type="image" name="gvProducts$ctl04$imgbtnEdit" id="gvProducts_imgbtnEdit_2" src="/images/edit.gif" /></td>
<td class="ddl_Class_new" align="left">1</td>
<td class="ddl_Class_new" align="left">2</td>
<td class="ddl_Class_new" align="left">3</td>
<td class="ddl_Class_new" align="left">4</td>
<td class="ddl_Class_new" align="left">5</td>
<td class="ddl_Class_new" align="left">6</td>
<td class="ddl_Class_new" align="left">7</td>
<td class="ddl_Class_new" align="left">138,81</td>
<td class="ddl_Class_new" align="left">NO</td>
<td class="ddl_Class_new" align="left"><a id="gvProducts_img_2"><img src="/Images/cross-button.png" /></a></td>
</tr>
<tr style="background-color:#DCF5F5;">
<td><input type="image" name="gvProducts$ctl05$imgbtnEdit" id="gvProducts_imgbtnEdit_3" src="/images/edit.gif" /></td>
<td class="ddl_Class_new" align="left">1</td>
<td class="ddl_Class_new" align="left">2</td>
<td class="ddl_Class_new" align="left">3</td>
<td class="ddl_Class_new" align="left">4</td>
<td class="ddl_Class_new" align="left">5</td>
<td class="ddl_Class_new" align="left">6</td>
<td class="ddl_Class_new" align="left">7</td>
<td class="ddl_Class_new" align="left">138,82</td>
<td class="ddl_Class_new" align="left">NO</td>
<td class="ddl_Class_new" align="left"><a id="gvProducts_img_3"><img src="/Images/cross-button.png" /></a></td>
</tr>
</table>
编辑#3
<asp:GridView ID="gvProducts" AutoGenerateColumns="False" EmptyDataText="Empty"
runat="server" DataKeyNames="ID" CssClass="mGrid" Width="500" HorizontalAlign="Center"
OnRowEditing="gvProducts_RowEditing" OnRowCancelingEdit="gvProducts_RowCancelingEdit" OnRowUpdating="gvProducts_RowUpdating"
OnRowDataBound="gvProducts_RowDataBound" OnRowDeleting="gvProducts_RowDeleting"
OnSorting="gvProducts_Sorting" AllowSorting="true" OnPageIndexChanging="gvProducts_PageIndexChanging">
<Columns>
<%--Start 0--%>
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="imgbtnEdit" CommandName="Edit" runat="server" ImageUrl="/images/edit.gif"
ToolTip="Edit" OnClientClick="return confirm('confirm?');" />
</ItemTemplate>
<EditItemTemplate>
<asp:ImageButton ID="imgbtnUpdate" CommandName="Update" runat="server" ImageUrl="/images/update.gif"
ToolTip="Update" OnClientClick="if(!confirm('confirm?')) return;" />
<asp:ImageButton ID="imgbtnCancel" runat="server" CommandName="Cancel" ImageUrl="/images/cancel.gif"
ToolTip="Cancel" OnClientClick="return confirm('confirm??');" />
<asp:ImageButton ID="imgbtnDelete" runat="server" CommandName="Delete" ImageUrl="/images/delete.gif"
ToolTip="Delete" OnClientClick="return confirm('confirm?');" />
</EditItemTemplate>
</asp:TemplateField>
<%--End 0--%>
<asp:BoundField DataField="A" HeaderText="A" ReadOnly="true" HtmlEncode="false" ItemStyle-HorizontalAlign="Left" ItemStyle-CssClass="ddl_Class_new" />
<asp:BoundField DataField="B" HeaderText="B" ReadOnly="true" HtmlEncode="false" ItemStyle-HorizontalAlign="Left" ItemStyle-CssClass="ddl_Class_new" />
<asp:BoundField DataField="C" HeaderText="C" ReadOnly="true" HtmlEncode="false" ItemStyle-HorizontalAlign="Left" ItemStyle-CssClass="ddl_Class_new" />
<asp:BoundField DataField="D" HeaderText="D" ReadOnly="true" HtmlEncode="false" ItemStyle-HorizontalAlign="Left" ItemStyle-CssClass="ddl_Class_new" />
<asp:BoundField DataField="E" HeaderText="E" ReadOnly="true" HtmlEncode="false" ItemStyle-HorizontalAlign="Left" ItemStyle-CssClass="ddl_Class_new" />
<asp:BoundField DataField="F" HeaderText="F" ReadOnly="true" HtmlEncode="false" ItemStyle-HorizontalAlign="Left" ItemStyle-CssClass="ddl_Class_new" />
<asp:BoundField DataField="G" HeaderText="G" ReadOnly="true" HtmlEncode="false" ItemStyle-HorizontalAlign="Left" ItemStyle-CssClass="ddl_Class_new" />
<asp:BoundField DataField="H" HeaderText="H" ReadOnly="true" HtmlEncode="false" ItemStyle-HorizontalAlign="Left" ItemStyle-CssClass="ddl_Class_new" />
<asp:BoundField DataField="L" HeaderText="L" ReadOnly="true" HtmlEncode="false" ItemStyle-HorizontalAlign="Left" ItemStyle-CssClass="ddl_Class_new" />
<%--Start 10--%>
<asp:TemplateField HeaderText="attached" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:HyperLink ID="img" runat="server" NavigateUrl='<%# Eval("attached").ToString() %>'
ImageUrl='<%#(String.IsNullOrEmpty(Eval("attached").ToString()) ? "/images/cross-button.png" : "/images/download.gif")%>'
ToolTip='<%#(String.IsNullOrEmpty(Eval("attached").ToString()) ? "No available" : "Available")%>'
Target="_blank" BorderStyle="None" ForeColor="Transparent">
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
<%--End 10--%>
</Columns>
</asp:GridView>
【问题讨论】:
-
请提供完整的功能,这里有些变量没有在这段代码中声明。
-
@Sunny 好的,谢谢;在我的第一个问题完整功能中的编辑#1中
-
我还想看到 Gridview HTML 的另一件事。
-
@Sunny 好的,谢谢;在我的第一个问题 Gridview HTML 中编辑 #2
-
我问的是gridview aspx 代码而不是浏览器html
标签: c# asp.net gridview itextsharp