我創建了一個webforms頁面,發布了許多qr憑證代碼,我想要的是,我可以從我的資料庫中逐一列印這些憑證。
Private Sub MySub(Param As String)
Try Try
Dim obj As New ReportObjects
Dim dt0 As New DataTable
Dim ds As New DataSet
ds = obj.MyStoredProcedure(Param)
obj.Dispose()
dt0 = ds.Tables(0)
obj.Dispose()
dt0.Dispose()
ds.Dispose()
For i As Integer = 0 To dt0. Rows.Count - 1
Dim qrGenerator As QRCodeGenerator = New QRCodeGenerator()。
Dim qrCode As QRCodeGenerator.QRCode = qrGenerator.CreateQrCode(dt0.Rows(i).Item("VoucherNo"), QRCodeGenerator.ECClLevel.Q)
使用 bitMap As Bitmap = qrCode.GetGraphic(20)
使用 ms As MemoryStream = New MemoryStream()。
bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
byteImage = ms.ToArray()
End Using結束 正在使用Dim base64 As String = Convert.ToBase64String(byteImage)
Dim imageBytes As Byte() = Convert.FromBase64String(base64)
Dim image As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(imageBytes)
使用 memoryStream As System.IO.MemoryStream = New System.IO.MemoryStream()。
Dim document As Document = New Document(PageSize. A4, 1.0F, 1.0F, 1.0F, 1.0F)
Dim writer As PdfWriter = PdfWriter.GetInstance(document, memoryStream)
document.Open()
document.NewPage()
document.Add(image)
document.Add(New Phrase("Valid From : " & dt0.Rows(i).Item("StartDT").ToString() & " To " & dt0.Rows(i).Item("EndDT") .ToString())
document.Close()
Dim bytes As Byte() = memoryStream.ToArray()
記憶體流.關閉()
Response.Clear()
Response.ContentType = "application/pdf"/span>
Response.AddHeader("Content-Disposition", "附件; filename=Image.pdf")
Response.ContentType = "application/pdf"/span>
Response.Buffer = TrueEnd()
End Using()
下一步 下一步
Catch ex As Exception
Throw New Exception(ex.Message)。
End Try
結束 sub
我的代碼遇到的問題是,該代碼沒有產生多個頁面。它只產生一個頁面,資料是我的表格的第一行。我使用iTextSharp來生成PDF。
你的回答將是非常有幫助的。謝謝你
uj5u.com熱心網友回復:
下面展示了如何使用NuGet軟體包iTextSharp和QRCoder創建一個每頁有一個QR代碼的PDF檔案。大部分的代碼來自于OP,但是需要重新安排。我添加了代碼,允許指定QR碼的大小。其中包括用于測驗的代碼。
下面假設你使用的是VB.NET ASP.NET Web應用程式(.NET框架)專案。為了測驗,我使用了Empty專案模板。在 "Add folders & core references "下,我選中了Web Forms。在 "高級 "下,我取消了為HTTPS配置。
打開解決方案資源管理器
。- 在VS的選單中,點擊 "Solution Explorer"。
- 在VS選單中,點擊查看 。
- 選擇解決方案資源管理器 。
下載/安裝NuGet包:
- 在解決方案資源管理器中,右鍵單擊<解決方案名稱> 。
- 選擇管理NuGet包... 。
- 點擊瀏覽 。
- 搜索。QRCoder
- 選擇所需的版本。
- 選擇所需版本(例如:1.4.1)
- 點擊安裝 。
- 搜索。iTextSharp
- 選擇想要的版本(例如:5.5.13.2)
- 點擊安裝 。
添加Web表單 (name: default.aspx)
- 在VS選單中,點擊Project 。
- 選擇添加新專案... 。
- 選擇Web表單(名稱:default.aspx) 。
- 點擊添加 。
default.aspx
<%@ Page Language="vb"/span> AutoEventWireup="false"/span> CodeBehind="default. aspx.vb" Inherits="WebApplicationArya._default" %>
<! DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp: Button runat="server" id="btnCreateQRCode" Text="Create QRCode" Onclick="btnCreateQRCode_Click" />
</div>
</form>
</body>
</html>
Modify default.aspx.vb
- 在解決方案資源管理器中,右擊default.aspx,選擇查看代碼 。
default.aspx.vb
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports QRCoder
Public Class _default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByValsender As Object, ByVal e As System. Handles Me.Load
結束 子
Private Function CreateTestData() As DataTable
Dim dt0 As New DataTable
'用于測驗
dt0.Columns.Add("VoucherNo", System.Type.GetType("System.Int32")
dt0.Columns.Add("StartDT", System.Type.GetType("System.DateTime")
dt0.Columns.Add("EndDT", System.Type.GetType("System.DateTime")
Dim dr As DataRow
For i As Integer = 0 To 6 Step 1
'創建新行
dr = dt0.NewRow()
dr("VoucherNo") = "123" & i.ToString()
dr("StartDT") = DateTime.Now
dr("EndDT"/span>) = DateTime.Now.AddDays(30)
'add[/span
dt0.Rows.Add(dr)
下一步
Return dt0
結束 功能
Private Sub CreatePdf(dt0 As DataTable, Optional qrCodeSize As Single = 150。 0F)
Dim pdfBytes As Byte() = Nothing'Dim writer As PdfWriter = Nothing[/span]。
嘗試 嘗試
使用 memoryStream As System.IO.MemoryStream = New System.IO.MemoryStream()。
使用 document As Document = New Document(PageSize. A4, 1.0F, 1.0F, 1.0F, 1.0F)
使用 writer As PdfWriter = PdfWriter.GetInstance(document, memoryStream)
'open'為每個QRCode創建新的PDF頁面。
For i As Integer = 0 To dt0. Rows.Count - 1 Step 1。
Dim byteImage As Byte()
Dim qrGenerator As QRCodeGenerator = New QRCodeGenerator()
'為DataTable中每個VoucherNo創建QRCode。
Dim qrGenerator1 As QRCodeGenerator = New QRCodeGenerator()
Dim qrCodeData1 As QRCodeData = qrGenerator1.CreateQrCode(dt0.Rows(i).Item("VoucherNo"), QRCodeGenerator.ECCLevel.Q)
Dim qrCode1 As QRCode = New QRCode(qrCodeData1))
使用 bitMap As System.Drawing.Bitmap = qrCode1.GetGraphic(20)
使用 ms As System.IO.MemoryStream = New System.IO.MemoryStream()。
bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
byteImage = ms.ToArray()
結束 使用結束 正在使用Dim image As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(byteImage)。
'Dim base64 As String = Convert.ToBase64String(byteImage)。
'Dim imageBytes As Byte() = Convert.FromBase64String(base64)。
'Dim image As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(imageBytes)
'設定大小。
'image.ScaleAbsolute(200.0F, 200.0F)
'ex: 200.0F, 200.0F
image.ScaleAbsolute(qrCodeSize, qrCodeSize)
'添加新頁面
document.NewPage()
'添加QRCode影像 '添加QRCode影像
document.Add(image)
'添加文本
document.Add(New Phrase("Valid From : " & dt0.Rows(i).Item("StartDT").ToString() & " To " & dt0.Rows(i) 。 Item("EndDT").ToString() & " (image" & i.ToString() & " ")
下一步)
'close>。
document.Close()
'轉換PDF為byte()
pdfBytes = memoryStream.ToArray()
結束 使用
結束 正在使用結束 使用 使用
'發送資料
SendData(pdfBytes)
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
結束 Sub
Private Sub SendData(pdfBytes As Byte()
Response.Clear()
Response.ContentType = "application/pdf"/span>
Response.AddHeader("Content-Disposition", "附件; filename=Image.pdf")
Response.ContentType = "application/pdf"/span>
Response.Buffer = True'Response.End()
End Sub
Protected Sub btnCreateQRCode_Click(sender As Object, eAs EventArgs)
'ToDo:用函式替換 "CreateTestData "來獲取資料。
'獲取測驗資料'。
Dim dt0 As DataTable = CreateTestData()
'創建包含QRCodes的PDF。
'CreatePdf(dt0)。
'創建PDF;設定QR碼的大小'CreatePdf(dt0)
CreatePdf(dt0, 100.0F)
結束 sub
結束 類別
注意:你需要將 "CreateTestData "函式替換為一個能夠檢索你的資料的函式。
資源:
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/322723.html
標籤:
