【发布时间】:2021-11-11 08:34:45
【问题描述】:
我创建了一个 webforms 页面,该页面发布了许多 qr 凭证代码,我想要的是我可以从我拥有的数据库中一页一页地打印凭证。这是我尝试制作的代码
Private Sub MySub(Param As String)
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.ECCLevel.Q)
Using bitMap As Bitmap = qrCode.GetGraphic(20)
Using ms As MemoryStream = New MemoryStream()
bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
byteImage = ms.ToArray()
End Using
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)
Using 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()
memoryStream.Close()
Response.Clear()
Response.ContentType = "application/pdf"
Response.AddHeader("Content-Disposition", "attachment; filename=Image.pdf")
Response.ContentType = "application/pdf"
Response.Buffer = True
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.BinaryWrite(bytes)
Response.End()
End Using
Next
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
End Sub
我的代码遇到的问题是代码不会生成多个页面。它只产生一页,数据是我表的第一行。我使用 iTextSharp 生成 PDF。
你的回答会很有帮助。谢谢
【问题讨论】:
-
您可以尝试删除最后一个 response.End()。这将终止代码异常并完成到服务器的页面往返。通过注释掉那一行来查看它是否有效。
-
哇,谢谢,我去试试