最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用C#和Spire.PDF從HTML模板生成PDF的實(shí)用指南

 更新時(shí)間:2026年03月05日 17:10:29   作者:LSTM97  
生成 PDF 報(bào)告和文檔已成為一種常見需求,許多開發(fā)者希望利用 HTML 模板的靈活性,動(dòng)態(tài)創(chuàng)建 PDF,以便輕松集成數(shù)據(jù),本文將探討如何使用 C# 和 Spire.PDF for .NET 庫,從 HTML 模板生成 PDF 文件,需要的朋友可以參考下

生成 PDF 報(bào)告和文檔已成為一種常見需求。許多開發(fā)者希望利用 HTML 模板的靈活性,動(dòng)態(tài)創(chuàng)建 PDF,以便輕松集成數(shù)據(jù)。本文將探討如何使用 C# 和 Spire.PDF for .NET 庫,從 HTML 模板生成 PDF 文件。我們將通過一個(gè)實(shí)際示例展示這一過程,具體而言,創(chuàng)建和填充發(fā)票模板的步驟。

準(zhǔn)備工作

在開始之前,確保您已經(jīng)安裝了 Spire.PDF for .NET 庫,并引入了額外的 QT 插件。確保將插件路徑指向正確的位置,以便在生成 PDF 時(shí)能夠正常使用。

NuGet 安裝 Spire.PDF:

Install-Package Spire.PDF

代碼實(shí)現(xiàn)

下面是一個(gè)示例代碼,用于從 HTML 模板生成 PDF:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using Spire.Additions.Qt;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;

namespace CreatePdfFromHtmlTemplate
{
    class Program
    {
        static void Main(string[] args)
        {
            // Path to the HTML template file
            string htmlFilePath = "invoice_template.html";

            // Step 1: Read the HTML template from file
            if (!File.Exists(htmlFilePath))
            {
                Console.WriteLine("Error: HTML template file not found.");
                return;
            }

            string htmlTemplate = File.ReadAllText(htmlFilePath);

            // Step 2: Define dynamic data for invoice placeholders
            Dictionary<string, string> invoiceData = new Dictionary<string, string>()
            {
                { "INVOICE_NUMBER", "INV-2025-001" },
                { "INVOICE_DATE", DateTime.Now.ToString("yyyy-MM-dd") },
                { "BILLER_NAME", "John Doe" },
                { "BILLER_ADDRESS", "123 Main Street, New York, USA" },
                { "BILLER_EMAIL", "john.doe@example.com" },
                { "ITEM_DESCRIPTION", "Consulting Services" },
                { "ITEM_QUANTITY", "10" },
                { "ITEM_UNIT_PRICE", "$100" },
                { "ITEM_TOTAL", "$1000" },
                { "SUBTOTAL", "$1000" },
                { "TAX_RATE", "5" },
                { "TAX", "$50" },
                { "TOTAL", "$1050" }
            };

            // Step 3: Replace placeholders in the HTML template with real values
            string populatedInvoice = PopulateInvoice(htmlTemplate, invoiceData);

            // Optional: Save the populated HTML for debugging or review
            File.WriteAllText("invoice_ready.html", populatedInvoice);

            // Step 4: Specify the plugin path for the HTML to PDF conversion
            string pluginPath = @"C:\plugins-windows-x64\plugins";
            HtmlConverter.PluginPath = pluginPath;

            // Step 5: Define output PDF file path
            string outputFile = "InvoiceOutput.pdf";

            try
            {
                // Step 6: Convert the HTML string to PDF
                HtmlConverter.Convert(
                    populatedInvoice,
                    outputFile,
                    enableJavaScript: true,
                    timeout: 100000,                // 100 seconds
                    pageSize: new SizeF(595, 842),  // A4 size in points
                    margins: new PdfMargins(20),    // 20-point margins
                    loadHtmlType: LoadHtmlType.SourceCode
                );

                Console.WriteLine($"PDF generated successfully: {outputFile}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error during PDF generation: {ex.Message}");
            }
        }

        /// <summary>
        /// Helper method: Replaces placeholders in the HTML with actual data values.
        /// </summary>
        private static string PopulateInvoice(string template, Dictionary<string, string> data)
        {
            string result = template;
            foreach (var entry in data)
            {
                result = result.Replace("{" + entry.Key + "}", entry.Value);
            }
            return result;
        }
    }
}

代碼解析

  • 讀取 HTML 模板

首先,代碼會(huì)檢查 HTML 模板文件是否存在。如果文件不存在,則程序會(huì)輸出錯(cuò)誤信息并終止。

  • 定義數(shù)據(jù)結(jié)構(gòu)

使用字典(Dictionary)來存儲(chǔ)發(fā)票的數(shù)據(jù),包括發(fā)票號(hào)碼、日期、發(fā)件人信息和項(xiàng)目詳情。

  • 替換占位符

PopulateInvoice 方法負(fù)責(zé)將 HTML 模板中的占位符替換為實(shí)際數(shù)據(jù)。這允許我們將動(dòng)態(tài)內(nèi)容嵌入到靜態(tài)模板中。

  • HTML 轉(zhuǎn)換為 PDF

設(shè)置必要的配置后,調(diào)用 HtmlConverter.Convert 方法將填充后的 HTML 轉(zhuǎn)換為 PDF 文件。您可以自定義頁面大小、邊距以及是否啟用 JavaScript。

總結(jié)

通過使用 C# 和 Spire.PDF for .NET,結(jié)合 HTML 模板,開發(fā)人員可以輕松生成個(gè)性化的 PDF 文件。這種方法不僅提高了生產(chǎn)效率,還提供了靈活性,便于維護(hù)和更新模板。無論是發(fā)票、報(bào)告還是其他類型的文檔,這種方式都能帶來顯著的好處。希望這篇文章對您在項(xiàng)目中實(shí)現(xiàn) PDF 生成有所幫助!

以上就是使用C#和Spire.PDF從HTML模板生成PDF的實(shí)用指南的詳細(xì)內(nèi)容,更多關(guān)于C# HTML模板生成PDF的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#實(shí)現(xiàn)學(xué)生檔案查詢

    C#實(shí)現(xiàn)學(xué)生檔案查詢

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)學(xué)生檔案查詢,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C#正則表達(dá)式大全

    C#正則表達(dá)式大全

    本文詳細(xì)講解了C#正則表達(dá)式的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#調(diào)用USB攝像頭的方法

    C#調(diào)用USB攝像頭的方法

    這篇文章主要為大家詳細(xì)介紹了C#調(diào)用USB攝像頭的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C#程序中創(chuàng)建、復(fù)制、移動(dòng)、刪除文件或文件夾的示例

    C#程序中創(chuàng)建、復(fù)制、移動(dòng)、刪除文件或文件夾的示例

    這篇文章主要介紹了C#程序中創(chuàng)建、復(fù)制、移動(dòng)、刪除文件或文件夾的示例,即對System.IO命名空間中類的運(yùn)用,需要的朋友可以參考下
    2016-02-02
  • C#實(shí)現(xiàn)判斷操作系統(tǒng)是否為Win8以上版本

    C#實(shí)現(xiàn)判斷操作系統(tǒng)是否為Win8以上版本

    這篇文章主要介紹了C#實(shí)現(xiàn)判斷操作系統(tǒng)是否為Win8以上版本,本文講解了利用C#獲取OS的版本號(hào)、利用反射獲取當(dāng)前正在運(yùn)行的程序的版本信息、 利用C#判斷當(dāng)前操作系統(tǒng)是否為Win8系統(tǒng)等內(nèi)容,需要的朋友可以參考下
    2015-06-06
  • C#中類成員的定義的修飾關(guān)鍵詞知識(shí)點(diǎn)總結(jié)

    C#中類成員的定義的修飾關(guān)鍵詞知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理了關(guān)于C#中類成員的定義的修飾關(guān)鍵詞知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以參考下。
    2020-02-02
  • 使用 C# 下載文件的多種方法小結(jié)

    使用 C# 下載文件的多種方法小結(jié)

    本文從最簡單的下載方式開始步步遞進(jìn),講述了文件下載過程中的常見問題并給出了解決方案。并展示了如何使用多線程提升 HTTP 的下載速度以及調(diào)用 aria2 實(shí)現(xiàn)非 HTTP 協(xié)議的文件下載,對C# 下載文件相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-08-08
  • C#中的隊(duì)列Queue<T>與堆棧Stack<T>

    C#中的隊(duì)列Queue<T>與堆棧Stack<T>

    這篇文章介紹了C#中的隊(duì)列Queue<T>與堆棧Stack<T>,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C# Console.WriteLine()用法案例詳解

    C# Console.WriteLine()用法案例詳解

    這篇文章主要介紹了C# Console.WriteLine()用法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C# DirectShow預(yù)覽攝像頭并截圖

    C# DirectShow預(yù)覽攝像頭并截圖

    這篇文章主要為大家詳細(xì)介紹了C# DirectShow預(yù)覽攝像頭并截圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論

拉孜县| 苗栗市| 莱州市| 石泉县| 繁峙县| 宝山区| 珲春市| 兴宁市| 普宁市| 玉门市| 霍城县| 仁寿县| 长垣县| 兴和县| 司法| 新源县| 皋兰县| 卓尼县| 北京市| 巩留县| 嘉鱼县| 如皋市| 额济纳旗| 托克逊县| 遵化市| 元氏县| 铁岭县| 辽源市| 乌拉特中旗| 威宁| 阳江市| 雷州市| 右玉县| 泰顺县| 溧阳市| 安岳县| 外汇| 老河口市| 阳原县| 米泉市| 新民市|