跳至頁尾內容
使用IRONPDF

.NET合併PDF:使用IronPDF合併多個檔案

這不僅僅是一個格式問題,更是合規問題

IronPDF首頁 大多數FinTech應用程式將交易資料儲存在關係資料庫中,並按需生成收據。 當客戶請求時,應用程式會重新查詢記錄並呈現視圖。 這種方法有一個根本問題:結果PDF或"收據"反映的是資料的當前狀態,而不是客戶在交易完成時看到的樣子。

通過正常的操作流程,資料庫記錄可以被更正、修訂或更新。 重新查詢的收據不是歷史文件; 它是一個帶有過去時間戳的當前快照。當支付處理器面臨退單,當一家新銀行的合規團隊應對監管機構,當貸款平台的審計日誌被傳喚或加密貨幣交易所需要向KYC審查員展示文件完整性時,需要的是文件,而不是查詢。

一份PDF文件在結算的時刻就已儲存,被哈希處理以檢測篡改並寫入不可變儲存中,這就是需要的文件。 這確保現有的PDF文件多年之後仍然有效。 無論您正在處理財務報告還是簡單的第一份PDF,文件生成必須是最終的。

PCI-DSS、SOX和AML記錄保存義務並不要求以程式化方式生成PDF文件,但它們確實要求可證明和可審計的記錄。 呈現的、已哈希並有時間戳的PDF文件,以一種單純資料庫行無法達到的方式滿足了這一標準。 稍後在本文中,我們將看一個IronPDF的範例,展示如何在建立新的PDF文件時進行這一過程。

解決方案一覽:在C&#35中將HTML內容轉換為PDF

Iron Software的IronPDF程式庫在交易完成的確切時刻,作為交易流程的一部分,同步生成生成的PDF收據。您可以通過NuGet Package Manager或Visual Studio中的Package Manager Console安裝IronPDF。 使用.NET CLI,只需運行install package IronPDF。

收據是從HTML模板或HTML文件渲染的,加上交易ID和時間戳,經過哈希處理並寫入不可變儲存。 它成為了最終文件。 不需要維護SSRS定義,不需要調用第三方文件API,也不需要無頭浏覽器程式。 IronPDF作為一個NuGet程式庫在進程中運行以完成PDF任務。

自動化文件工作流程的主要優勢:

  • 保持所有頁面大小的格式。

  • 支援數位簽名,確保文件完整性。

  • 能夠從網頁或HTML字串建立PDF物件。

  • 可以輕鬆嵌入Iron Software的客戶logo和品牌

交易到收據的流水線如何運作

成功的路徑

支付成功,交易記錄寫入資料庫。 同一個處理程式——在返回回應之前——使用交易細節填寫HTML內容收據模板:ID、UTC時間戳、金額和貨幣、發送者和接收者標識、費用分解和動態內容。

渲染器new ChromePdfRenderer(特別是var renderer = new ChromePdfRenderer();)將網頁內容轉換為PDF格式。 生成的PDF字節陣列立即使用SHA-256進行哈希處理。

using IronPdf
using System.Security.Cryptography;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.MarginTop = 15;

renderer.RenderingOptions.MarginBottom = 15;

string receiptHtml = $@"
    <h1>Transaction Receipt</h1>
    <p><strong>Transaction ID:</strong> {tx.Id}</p>
    <p><strong>Timestamp (UTC):</strong> {tx.CompletedAt:u}</p>
    <p><strong>Amount:</strong> {tx.Amount:F2} {tx.Currency}</p>
    <p><strong>Fee:</strong> {tx.Fee:F2} {tx.Currency}</p>
    <p><strong>From:</strong> {tx.SenderRef} &rarr; <strong>To:</strong> {tx.ReceiverRef}</p>
    <p><strong>Resulting Balance:</strong> {tx.ClosingBalance:F2} {tx.Currency}</p>";

var pdf = renderer.RenderHtmlAsPdf(receiptHtml);

string hash = Convert.ToHexString(SHA256.HashData(pdf.BinaryData));

await _db.StoreReceiptHashAsync(tx.Id, hash);

await _blobStorage.UploadImmutableAsync($"receipts/{tx.Id}.pdf", pdf.BinaryData);
using IronPdf
using System.Security.Cryptography;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.MarginTop = 15;

renderer.RenderingOptions.MarginBottom = 15;

string receiptHtml = $@"
    <h1>Transaction Receipt</h1>
    <p><strong>Transaction ID:</strong> {tx.Id}</p>
    <p><strong>Timestamp (UTC):</strong> {tx.CompletedAt:u}</p>
    <p><strong>Amount:</strong> {tx.Amount:F2} {tx.Currency}</p>
    <p><strong>Fee:</strong> {tx.Fee:F2} {tx.Currency}</p>
    <p><strong>From:</strong> {tx.SenderRef} &rarr; <strong>To:</strong> {tx.ReceiverRef}</p>
    <p><strong>Resulting Balance:</strong> {tx.ClosingBalance:F2} {tx.Currency}</p>";

var pdf = renderer.RenderHtmlAsPdf(receiptHtml);

string hash = Convert.ToHexString(SHA256.HashData(pdf.BinaryData));

await _db.StoreReceiptHashAsync(tx.Id, hash);

await _blobStorage.UploadImmutableAsync($"receipts/{tx.Id}.pdf", pdf.BinaryData);
Imports IronPdf
Imports System.Security.Cryptography

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.MarginTop = 15

renderer.RenderingOptions.MarginBottom = 15

Dim receiptHtml As String = $"
    <h1>Transaction Receipt</h1>
    <p><strong>Transaction ID:</strong> {tx.Id}</p>
    <p><strong>Timestamp (UTC):</strong> {tx.CompletedAt:u}</p>
    <p><strong>Amount:</strong> {tx.Amount:F2} {tx.Currency}</p>
    <p><strong>Fee:</strong> {tx.Fee:F2} {tx.Currency}</p>
    <p><strong>From:</strong> {tx.SenderRef} &rarr; <strong>To:</strong> {tx.ReceiverRef}</p>
    <p><strong>Resulting Balance:</strong> {tx.ClosingBalance:F2} {tx.Currency}</p>"

Dim pdf = renderer.RenderHtmlAsPdf(receiptHtml)

Dim hash As String = Convert.ToHexString(SHA256.HashData(pdf.BinaryData))

Await _db.StoreReceiptHashAsync(tx.Id, hash)

Await _blobStorage.UploadImmutableAsync($"receipts/{tx.Id}.pdf", pdf.BinaryData)
$vbLabelText   $csharpLabel

範例生成的PDF文件

IronPDF範例PDF輸出 新的PDF文件然後儲存在不可變儲存中。 無論是您的第一份PDF還是您正在合併現有的PDF,過程都保持不變。 一份副本顯示在客戶的PDF顯示器中。 在Iron Software產品演示中,軟體產品演示團隊通常突出展示如何僅僅幾行程式碼即可處理動態報告和任務,如HTML轉PDF轉換或PDF生成任務。

為了協助UI/UX,您可能會在儀表板上看到藍色圓圈中的鑰匙、灰色圓圈中的鑰匙或圓圈中的藍色鑰匙,表示已加密、已哈希的文件。下載連結相關的右箭頭圖標幫助使用者導航。

加蓋印章的頁眉或頁腳強調文件在每一頁上的來源:

var shortHash = hash[..12];

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = $@"
        <div style='font-size:9px; color:#666; text-align:center;'>
            Generated: {tx.CompletedAt:u} &nbsp;|&nbsp;
            TX: {tx.Id} &nbsp;|&nbsp;
            SHA-256: {shortHash}...
        </div>"
};
var shortHash = hash[..12];

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = $@"
        <div style='font-size:9px; color:#666; text-align:center;'>
            Generated: {tx.CompletedAt:u} &nbsp;|&nbsp;
            TX: {tx.Id} &nbsp;|&nbsp;
            SHA-256: {shortHash}...
        </div>"
};
HTML

範例頁腳

範例頁腳 收據的每一頁都包含交易ID、生成時間戳和截斷的哈希,這足以讓合規官無需存取資料庫即可點檢完整性。

邊界案例

逆轉和退款。失敗或逆轉的交易仍然需要文件。 為逆轉事件生成獨立的PDF,參考原交易ID和收據哈希。 逆轉收據獨立存在作為發生的事情的記錄; 它不會替換或修改原來的內容。

多貨幣交易。HTML模板必須按照本地正確處理貨幣符號的放置、小數分隔符和匯率披露。 C#格式字串處理了大部分這些內容:{amount.ToString('F2', CultureInfo.GetCultureInfo('de-DE'))}適用於德國小數慣例,對於如JPY這樣沒有小數位的貨幣,顯式符號放置。 匯率及其時間戳應作為一個已披露的項目出現,而不是從金額中推斷出來的。

監管水印。某些司法轄區要求在某些文件型別上印上特定文字,例如:'非稅收發票'、'非正式副本'或特定司法轄區的披露語言。 這些作為HTML覆蓋層或樣式化的頁眉帶可乾淨地處理,無需修改基礎交易資料。

為何這超越合規的重要意義

利益相關者 他們得到的是什麼
合規/法律 不可變、經哈希的收據在幾分鐘內滿足審計要求,無需重新查詢、無需重構、無需解釋為何當前資料庫記錄與客戶所見不同
客戶支援 客戶在交易時間收到的檔件,讓爭議解決變得事實而非解釋性
客戶 在每次交易的幾秒鐘內,專業品牌的收據就到達他們的收件箱,與公司保存的文件相同
工程 一個HTML模板來維護,在進程中渲染,無需外部服務依賴,無需監控API合約,無需跟蹤每個文件的計費
財務/會計 PDF/A檔案輸出以滿足長期保留的需求,符合文件保留政策,並滿足財務記錄保存要求,無需單獨的檔案工作流

提示通過單一渲染選項啟用PDF/A輸出 — renderer.RenderingOptions.PdfArchiveFormat = IronPdf.Rendering.PdfArchiveFormat.PDF_A_3B — 來生成ISO標準化的檔案文件,可接受的長期財務記錄保留。

結語

從"我們儲存交易資料"到"我們擁有可審計的記錄"的差距比看起來要小; 它是在交易提交流程中增加了一個渲染步驟。 該步驟生成的文件具有資料庫行所無法提供的來源:不可追溯的時間戳,檢測篡改的哈希,及一個實物文件,無論是客戶打開還是審計員請求,看起來一樣。

IronPDF讓.NET團隊完全控制這個步驟,從渲染HTML收據到印刷頁腳、哈希輸出,並將其流式寫入不可變儲存,這一切都由單個程式庫在ironpdf.com進行。 如果您正在構建或加固交易管道,開始您的免費30天試用,並在投入生產前根據您的合規要求驗證收據輸出。

常見問題

IronPDF在FinTech應用程式中的用途是什麼?

IronPDF用於FinTech應用程式中,以建立可追溯、有時間戳的PDF收據和交易記錄,確保合規並促進簡便的記錄保存。

IronPDF如何協助金融交易的合規性?

IronPDF通過允許建立包含基本交易細節的準確且安全的PDF收據來協助合規,這對於審計和監管目的至關重要。

IronPDF能夠生成帶有時間戳的PDF收據嗎?

是的,IronPDF可以生成帶有時間戳的PDF收據,提供了一種可靠的方法來記錄交易時間,確保準確的記錄保存。

可以用IronPDF自訂收據的PDF版面配置嗎?

IronPDF允許開發者自訂PDF版面配置,使其容易格式化收據以滿足特定商業需求和品牌要求。

IronPDF如何確保交易記錄的安全性?

IronPDF通過允許建立具有加密、數位簽名和其他安全功能的PDF來確保交易記錄的安全性以保護敏感資訊。

使用IronPDF進行服務點交易文件的好處是什麼?

使用IronPDF進行服務點交易文件為企業提供可靠的、可追溯的收據,增強客戶信任並精簡財務記錄管理。

IronPDF是否支持與其他金融系統的整合?

IronPDF可以與其他金融系統整合,實現無縫資料流,透過自動化PDF生成來提升金融運營的效率。

IronPDF如何改善FinTech應用程式中的財務報告?

IronPDF透過生成詳細且一致的PDF文件,使其容易查看和分享,從而促進更好的財務分析和決策制定。

什麼使IronPDF適合FinTech行業使用?

IronPDF適合FinTech行業,因為它能夠生成安全、合規和可以自訂的PDF文件,這對於管理金融交易和記錄至關重要。

IronPDF能自動生成交易記錄嗎?

是的,IronPDF能自動生成交易記錄,減少人工工作量,降至最小錯誤,並確保全部交易的一致文件記錄。

Curtis Chau
技術作家

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

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

Iron 支援團隊

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