我有网格绑定来自数据库的一些条形码。这个条形码我想用pdf生成。我怎样才能做到这一点?对不起,我不知道如何做到这一点,所以没有示例代码显示。我的gridview名称“GrdBarcode”。请帮助我.Below是我的带条形码的网格
<asp:GridView ID="grdBarcode" CssClass="table"
OnRowDataBound="grdBarcode_RowDataBound" AutoGenerateColumns="false"
GridLines="None" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<table style="width:100%">
<tr>
<p>Date:<asp:Label runat="server" ID="Label5" Text='<%#Eval("Date") %>'>
</asp:Label> </p></td>
<td align="center"></td> <td><p>No Of QP: <asp:Label runat="server"
ID="Label6" Text='<%#Eval("NoOfQP") %>'></asp:Label></p>
<p>Time: <asp:Label runat="server" ID="Label7" Text='<%#Eval("Timing") %>'>
</asp:Label></p>
<p>Durations: <asp:Label runat="server" ID="Label8"
Text='<%#Eval("Duration") %>'></asp:Label>)</p>
</td>
</tr>
<tr>
<td colspan="3" align="center">
<asp:DataList ID="datalistBarcode" RepeatColumns="3"
RepeatDirection="Horizontal" GridLines="None"
OnItemDataBound="datalistBarcode_ItemDataBound" runat="server">
<ItemTemplate> <asp:Label ID="lblBarCode" runat="server"
Text='<%#Eval("BarCode") %>' Visible="false"></asp:Label>
<table class="table">
<tr> <td >
<asp:Panel ID="pnlBarCode" HorizontalAlign="center" runat="server">
</asp:Panel>
</tr>
<tr>
<td align="center"><asp:Label ID="lblStudCode" runat="server"
Text='<%#Eval("StudCode") %>'></asp:Label>
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
</td>
</tr>
</table>
</ItemTemplate></asp:TemplateField>
</Columns>
</asp:GridView>
我试着像elow提到的methode.but它显示错误Document has no pages
protected void btnPrint_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in grdBarcode.Rows)
{
DataList dl = (DataList)row.FindControl("datalistBarcode");
string attachment = "attachment; filename=Article.pdf";
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/pdf";
StringWriter stw = new StringWriter();
HtmlTextWriter htextw = new HtmlTextWriter(stw);
dl .DataBind();
dl .RenderControl(htextw);
Document document = new Document();
PdfWriter.GetInstance(document, Response.OutputStream);
document.Open();
StringReader str = new StringReader(stw.ToString());
HTMLWorker htmlworker = new HTMLWorker(document);
htmlworker.Parse(str);
document.Close();
Response.Write(document);
Response.End();
}
答案 0 :(得分:1)
当您需要网格时,最好使用PdfPTable
。
如果您还没有条形码,可以使用iText或iTextSharp创建条形码。看一下Barcodes灵感示例:
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfPTable table = new PdfPTable(4);
table.setWidthPercentage(100);
for (int i = 0; i < 12; i++) {
table.addCell(createBarcode(writer, String.format("%08d", i)));
}
document.add(table);
document.close();
}
public static PdfPCell createBarcode(PdfWriter writer, String code) throws DocumentException, IOException {
BarcodeEAN barcode = new BarcodeEAN();
barcode.setCodeType(Barcode.EAN8);
barcode.setCode(code);
PdfPCell cell = new PdfPCell(barcode.createImageWithBarcode(writer.getDirectContent(), BaseColor.BLACK, BaseColor.GRAY), true);
cell.setPadding(10);
return cell;
}
有关创建条形码的一些C#代码,请参阅:
如果您已经拥有带条形码的图像,您仍然可以使用表格,但问题应该是如何在表格内组织图像?
在以下问题中回答:
答案 1 :(得分:-1)
根据数据库中的数据类型,有两种方法可以执行此操作。
如果您将其存储为字符串:
- 创建Crystal报告
- 将绑定字段拖到报告
上- 将字段字体更改为您拥有的条形码字体(通常随魔杖阅读器一起提供)
- 将报告导出为PDF
如果您将其存储为图像:
- 制作水晶报告
- 从
抓取数据库中的图像数据Image
对象- 将
Image
对象放入MemoryStream
- 将
MemoryStream
转换为Byte[]
- 在您的水晶报表数据中添加一列为
类型的列Byte[]
- 将值存储到此列
- 将新数据字段拖到报表上,它将是一个图像
- 将报告导出为PDF