跳至頁尾內容
使用IRONPDF

在C#中使用IronPDF將PDF轉換為JPG

手動生成發票的問題

IronPDF首頁 當小型商店的一個訂單完成後,人為發送PDF文件發票是一件令人厭煩的事情。 當這種情況在黑色星期五的快速促銷中涉及到數百個訂單時,這就成了一個危機。

大多數.NET電子商務團隊拼湊多個活動部件來進行發票遞送:一個有人匯出的Word模板到PDF格式、一個每小時運行的計畫工作、偶爾丟掉電子郵件的第三方服務,或者更糟地,由開發人員在客戶抱怨時按需匯出發票。 結果是PDF文件格式不一致、遞送延遲,並且發票看起來與客戶剛購買的品牌毫無關聯。

合規又增加了一層壓力。 美國的稅務機關 和歐盟越來越期待每筆交易有結構化、可歸檔的記錄。 生成的PDF 是在訂單后三天通過延遲的PDF轉換從Word模板建立的,沒有審計追蹤,這是一個責任。

擴展放大了每個漏洞。在一天20筆訂單,手動或半手動流程依然存在。 在一個季節性高峰中有2000筆訂單時,它就崩潰了。 電子商務團隊需要的是一個PDF生成管道,能在結帳時立即觸發,每次產生一致的品牌文件,並且在任何數量下都不需要手動干預。

解決方案:使用IronPDF進行程式化PDF生成

Iron Software的IronPDF程式庫讓ASP.NET應用程式可以直接從HTML和CSS生成PDF文件,這是您的前端團隊已經在瀏覽器中設計收據和發票時使用的標記。

開發人員可以在應用程式內部進行可靠的HTML到PDF轉換,而不是匯出Word模板或處理現有的PDF。 這個.NET PDF程式庫嵌入了一個Chromium渲染引擎,所以您可以將HTML,HTML字串,甚至是完整的網頁轉換為完成的PDF物件。

而不必維護一個單獨的模板系統或將請求路由到一個外部渲染服務中,IronPDF將Chromium嵌入應用程式中。 它直接插入現有的MVC控制器、Razor Pages或背景服務中,無需安裝外部執行檔或啟動無頭瀏覽器進程。

開發人員只需通過NuGet套件管理器或Visual Studio套件管理器使用Install-Package IronPdf 在套件管理器控制台中安裝該程式庫即可。

安裝完成後,使用IronPDF進行高品質PDF生成只需幾行C#程式碼。

訂單完成,一個方法調用觸發,完美像素的輸出PDF出現在客戶的收件箱中,謝謝頁面載入完成之前。

無需管理隊列、無需監控外部依賴、無需學習新的模板語言。

實踐中的運作方式:在C#中用HTML生成PDF

1. 訂單完成 → 啟動發票生成

觸發發票生成的最自然位置是訂單確認處理程式中,無論是在控制器操作中直接觸發還是在工作快中為保持HTTP回應快速。

這種方法是自動化文件工作流和其他PDF生成任務在現代電子商務平台中常見的理想選擇。

// Called after order is persisted to the database
public async Task SendInvoiceAsync(Order order)
{
    var invoiceHtml = BuildInvoiceHtml(order);
    await GenerateAndEmailInvoiceAsync(invoiceHtml, order);
}
// Called after order is persisted to the database
public async Task SendInvoiceAsync(Order order)
{
    var invoiceHtml = BuildInvoiceHtml(order);
    await GenerateAndEmailInvoiceAsync(invoiceHtml, order);
}
JAVASCRIPT

BuildInvoiceHtml可以簡單到使用C#插值構建的簡單HTML字串,也可以渲染結構化的HTML文件模板。 無論哪種方式,您傳遞給IronPDF的HTML內容都成為最終PDF文件的文件結構。

此靈活性允許開發人員從標準網頁佈局生成動態文件,如發票、收據和動態報告。

2. 通過ChromePdfRenderer從HTML文件或模板建立PDF文件

一旦擁有發票的HTML結構,包括項目行、總數、稅收明細、送貨地址和標誌,PDF文件生成只需一些程式碼行。

此IronPDF範例展示了開發人員通常如何初始化渲染器:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;

renderer.RenderingOptions.MarginTop = 15;

renderer.RenderingOptions.MarginBottom = 15;

PdfDocument invoice = renderer.RenderHtmlAsPdf(invoiceHtml);
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;

renderer.RenderingOptions.MarginTop = 15;

renderer.RenderingOptions.MarginBottom = 15;

PdfDocument invoice = renderer.RenderHtmlAsPdf(invoiceHtml);
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4

renderer.RenderingOptions.MarginTop = 15

renderer.RenderingOptions.MarginBottom = 15

Dim invoice As PdfDocument = renderer.RenderHtmlAsPdf(invoiceHtml)
$vbLabelText   $csharpLabel

範例生成的PDF文件

IronPDF範例輸出 在許多教程中,您會看到變數如下:

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(invoiceHtml);
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(invoiceHtml);
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(invoiceHtml)
$vbLabelText   $csharpLabel

或簡寫範例中提到var renderer new ChromePdfRenderer,renderer new ChromePdfRenderer,或var pdf renderer.RenderHtmlAsPdf在展示以下程式碼片段時。

ChromePdfRenderer處理完整的CSS3和HTML5,允許外部CSS文件、JavaScript文件、嵌入字體和圖像。 它支持本地文件、託管資源和復雜的HTML結構。

結果是一個專業的生成PDF,匹配Chrome瀏覽器的列印效果,非常適合建立品牌PDF文件或發票佈局,其中包含嵌入圖像、美化過的表格和精確的字體大小控制。

提示如果您的HTML引用了外部資產,如托管標誌或樣式表,請在RenderHtmlAsPdf()上設置BaseUrlPath作為第二個參數,以便IronPDF在渲染過程中解析相對路徑。

3. PDF附加到確認電子郵件

渲染後,PdfDocument公開BinaryData,即可直接寫入MemoryStream進行電子郵件附件,無需觸及文件系統:

using System.Net.Mail;
using System.IO;

var pdfBytes = invoice.BinaryData;

using var attachment = new Attachment(
    new MemoryStream(pdfBytes),
    $"Invoice-{order.OrderNumber}.pdf",
    "application/pdf"
);

var message = new MailMessage
{
    From = new MailAddress("orders@yourstore.com"),
    Subject = $"Your Invoice – Order #{order.OrderNumber}",
    Body = "Thank you for your order. Your invoice is attached.",
    IsBodyHtml = false
};

message.To.Add(order.CustomerEmail);

message.Attachments.Add(attachment);

using var client = new SmtpClient("smtp.yourprovider.com");

await client.SendMailAsync(message);
using System.Net.Mail;
using System.IO;

var pdfBytes = invoice.BinaryData;

using var attachment = new Attachment(
    new MemoryStream(pdfBytes),
    $"Invoice-{order.OrderNumber}.pdf",
    "application/pdf"
);

var message = new MailMessage
{
    From = new MailAddress("orders@yourstore.com"),
    Subject = $"Your Invoice – Order #{order.OrderNumber}",
    Body = "Thank you for your order. Your invoice is attached.",
    IsBodyHtml = false
};

message.To.Add(order.CustomerEmail);

message.Attachments.Add(attachment);

using var client = new SmtpClient("smtp.yourprovider.com");

await client.SendMailAsync(message);
Imports System.Net.Mail
Imports System.IO

Dim pdfBytes = invoice.BinaryData

Using attachment As New Attachment(
    New MemoryStream(pdfBytes),
    $"Invoice-{order.OrderNumber}.pdf",
    "application/pdf"
)

    Dim message As New MailMessage With {
        .From = New MailAddress("orders@yourstore.com"),
        .Subject = $"Your Invoice – Order #{order.OrderNumber}",
        .Body = "Thank you for your order. Your invoice is attached.",
        .IsBodyHtml = False
    }

    message.To.Add(order.CustomerEmail)

    message.Attachments.Add(attachment)

    Using client As New SmtpClient("smtp.yourprovider.com")
        Await client.SendMailAsync(message)
    End Using

End Using
$vbLabelText   $csharpLabel

PDF作為電子郵件附件發送

附帶PDF的電子郵件 結果是一個干凈的輸出PDF,在結帳后立即發送。 無論您的應用程式發送多個PDF,各自分開的PDF,或甚至需要分割PDF進行報告,工作流程仍然簡單。

如果您使用SendGrid或其他事務性電子郵件提供商,相同的字節陣列可以直接映射到他們的附件API上。

4. 可選地儲存訂單歷史記錄

相同的字節陣列可以寫入Azure Blob儲存、AWS S3或與訂單記錄一起的資料庫中。

這確保了長期的文件完整性,並且提供了現有PDF文件的永久存檔。


// 儲存在blob儲存中(Azure示例)
await blobClient.UploadAsync(new BinaryData(invoice.BinaryData));

// 或在開發過程中本地儲存
invoice.SaveAs($"invoices/{order.OrderNumber}.pdf");

您的應用程式稍後可以檢索這些現有的PDF,將它們顯示在PDF查看器中,或允許客戶再次從其賬戶頁面下載第一份PDF發票。

現實世界的好處

品牌一致性。 每張發票離開您的系統都帶有相同的標誌、色彩方案和字體,因為它每次都是從相同的HTML模板渲染的。沒有設計師手動在Word中應用樣式。

規模速度。 IronPDF高效地處理各種PDF生成任務。 在每小時生成數百張發票的快速促銷中,系統在C#中產生PDF,無瓶頸。

合規就緒的存檔。 IronPDF支持PDF/A輸出,這是為長期存檔設計的ISO標準格式。 對於需要保留七年稅務記錄的電子商務企業,PDF/A文件被美國的稅務機關 和歐盟接受為有效記錄。 切換開啟PDF/A合規只需一個屬性:


renderer.RenderingOptions.PdfArchiveFormat =
    IronPdf.Rendering.PdfArchiveFormat.PDF_A_3B;

客戶體驗。 客戶在結帳幾秒鐘內就能收到專業的發票,不是數小時之後,也不是手動匯出之後。 該發票還可以從其儲存的PDF中在客戶帳戶頁面上下載。

開發者體驗。 您的團隊設計並測試發票模板如同任何其他HTML頁面一樣在瀏覽器中。 沒有專有的模板引擎需要學習,沒有XML模式需要解決,沒有渲染與瀏覽器不一致的問題需要除錯。 如果它在Chrome中看起來正確,那麼在PDF中看起來也會正確。

結語

發票自動化是那些被解決的問題之一,直到您仔細檢查並發現手動工作流程在規模下是多麼脆弱。

使用IronPDF程式庫的現代HTML到PDF處理管道簡化了文件工作流程,提高了可靠性,並使應用程式間生成一致的PDF成為可能。

如果您正在為現有的ASP.NET平台評估解決方案,您可以通過NuGet套件管理器安裝IronPDF套件並立即開始生成PDF文件。

有了IronPDF,團隊可以輕鬆建立PDF、修改PDF文件、編輯PDF、加密PDF、應用數位簽名、生成PDF表格,並為企業系統製作高品質的PDF。

IronPDF是更廣泛的Iron Software生態系統的一部分,包括文件中提到的與TextLogo Iron Suite相關的工具,並通過Iron Software的客戶標誌展示。

該公司還參與如Percent for the Planet等環保倡議,幫助開發者自動化文件工作流程,同時支持可持續發展。

您可以在免費試用30天測試完整的渲染管道,包括批量生成、自訂模板和電子郵件傳送,無水印和功能限制。 詳情見ironpdf.com

常見問題

在ASP.NET中自動化PDF發票的好處是什麼?

在ASP.NET中使用IronPDF自動化PDF發票可以節省時間、減少錯誤,並確保發票始終一致地品牌化和格式化。它允許無縫整合到電子商務系統中,便於高效批處理和發送。

IronPDF如何幫助生成品牌化的PDF文件?

IronPDF提供一個強大的API,允許開發者建立具有自定義品牌元素如標誌、顏色和字體的PDF文件。這確保每個發票和文件都符合您公司的品牌身份。

IronPDF可以整合到現有的電子商務平台嗎?

是的,IronPDF可以整合到基於ASP.NET構建的各種電子商務平台中,允許作為訂單處理工作流程的一部分,自動化發票生成和分發。

手動發票生成帶來什麼挑戰?

手動發票生成耗時、容易出錯,且品牌不一致。使用IronPDF自動化此過程可精簡操作並提高準確性。

IronPDF適合處理大量發票嗎?

IronPDF設計為能有效處理大量發票,非常適合需要高容量文件處理和發送的企業。

IronPDF如何確保敏感發票資料的安全性?

IronPDF支持PDF加密與密碼保護,確保敏感的發票資料安全且僅授權人員可存取。

IronPDF提供哪些功能供自定義發票模板?

IronPDF提供HTML到PDF轉換等功能,允許使用HTML/CSS設計具有動態內容的自定義發票模板。

IronPDF能否支持多語言發票?

是的,IronPDF支持多種語言,允許生成各種語言的發票,以迎合國際客戶群。

IronPDF需要為ASP.NET應用程式進行特定設置嗎?

IronPDF易於整合進入ASP.NET應用程式,僅需少量設置,並為開發者提供一個簡單的API,以便快速開始自動化PDF發票的生成。

IronPDF為問題排查提供哪些支持?

IronPDF提供全面的文件、社群論壇和支持服務,幫助開發者在整合和使用此程式庫過程中,排查並解決遇到的任何問題。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話