主頁 > 軟體工程 > 如何用iTextSharp從可資料化生成一頁一行的PDF?

如何用iTextSharp從可資料化生成一頁一行的PDF?

2021-10-19 04:19:03 軟體工程

我創建了一個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軟體包iTextSharpQRCoder創建一個每頁有一個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 1Dim byteImage As Byte()
                            Dim qrGenerator As QRCodeGenerator = New QRCodeGenerator()

                            '為DataTable中每個VoucherNo創建QRCodeDim 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 "函式替換為一個能夠檢索你的資料的函式。

資源:

  • QRCoder (NuGet)
  • QRCoder (Github)
  • 如何在ASP.NET Core中使用C#輕松實作QRCoder
  • iTextSharp:如何調整圖片大小以適應固定尺寸?
  • 向資料表添加資料
  • DataColumn.DataType 屬性
  • 轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/322723.html

    標籤:

    上一篇:調整頁面大小時,單選按鈕被分成兩行

    下一篇:在Rails6視圖中,我如何在一個按鈕上添加一個事件監聽器,該按鈕可以隱藏和取消隱藏一個div?

    標籤雲
    其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

    熱門瀏覽
    • Git本地庫既關聯GitHub又關聯Gitee

      創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

      uj5u.com 2020-09-10 05:04:14 more
    • CODING DevOps 代碼質量實戰系列第二課,相約周三

      隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

      uj5u.com 2020-09-10 05:07:43 more
    • 推薦Scrum書籍

      推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

      uj5u.com 2020-09-10 05:07:45 more
    • CODING DevOps 代碼質量實戰系列最后一課,周四發車

      隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

      uj5u.com 2020-09-10 05:07:52 more
    • 敏捷軟體工程實踐書籍

      Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

      uj5u.com 2020-09-10 05:07:55 more
    • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

      前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

      uj5u.com 2020-09-10 05:08:49 more
    • CODING DevOps 微服務專案實戰系列第一課,明天等你

      CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

      uj5u.com 2020-09-10 05:09:14 more
    • CODING DevOps 微服務專案實戰系列第二課來啦!

      近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

      uj5u.com 2020-09-10 05:09:33 more
    • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

      隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

      uj5u.com 2020-09-10 05:10:00 more
    • CODING 儀表盤功能正式推出,實作作業資料可視化!

      CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

      uj5u.com 2020-09-10 05:11:01 more
    最新发布
    • windows系統git使用ssh方式和gitee/github進行同步

      使用git來clone專案有兩種方式:HTTPS和SSH:
      HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
      SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

      uj5u.com 2023-04-19 08:41:12 more
    • windows系統git使用ssh方式和gitee/github進行同步

      使用git來clone專案有兩種方式:HTTPS和SSH:
      HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
      SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

      uj5u.com 2023-04-19 08:35:34 more
    • 2023年農牧行業6大CRM系統、5大場景盤點

      在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

      uj5u.com 2023-04-18 08:05:44 more
    • 2023年農牧行業6大CRM系統、5大場景盤點

      在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

      uj5u.com 2023-04-18 08:00:18 more
    • 計算機組成原理—存盤器

      計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

      uj5u.com 2023-04-17 08:20:31 more
    • 談一談我對協同開發的一些認識

      如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

      uj5u.com 2023-04-17 08:18:55 more
    • 專案管理PRINCE2核心知識點整理

      PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
      PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

      uj5u.com 2023-04-17 08:18:51 more
    • 談一談我對協同開發的一些認識

      如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

      uj5u.com 2023-04-17 08:18:00 more
    • 專案管理PRINCE2核心知識點整理

      PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
      PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

      uj5u.com 2023-04-17 08:17:55 more
    • 計算機組成原理—存盤器

      計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

      uj5u.com 2023-04-17 08:12:06 more