IRONSOFTWAREHOME
使用IRONPDF

如何使用ASP.NET Core和IronPDF構建中央化的PDF生成服務

Curtis Chau
Curtis Chau
Updated: 2026年6月20日

在C#中將Windows Form列印成PDF非常簡單,使用IronPDF:使用ChromePdfRenderer渲染表單的HTML表示,然後儲存到磁碟或記憶體中,僅需幾行程式碼即可生成完美無瑕的PDF。

將Windows Forms應用程式匯出為PDF是業務軟體中的常見需求。 無論您是需要存檔資料輸入畫面、從表單狀態生成面向客戶的報告,還是無需接觸列印機即可捕獲列印預覽,將C#表單轉換為PDF可以消除日常工作流程中的摩擦。 IronPDF提供了一個.NET本機的API,可處理從HTML渲染到最終PDF輸出的轉換流程,讓您避免使用易碎的GDI+列印技巧。

如何安裝IronPDF?

通過NuGet將IronPDF新增到您的專案中。 打開套件管理控制台並運行:

PM > Install-Package IronPdf

或者使用.NET CLI:

dotnet add package IronPdf

安裝後,在任何調用API的文件頂部新增using IronPdf;。 這個套件也可以直接從NuGet.org/packages/IronPdf獲得。 您可以在ironpdf.com/licensing/獲得免費試用授權金鑰,以便在評估期間解除掉不帶水印的輸出。

如何使用HTML將Windows Form轉換為PDF?

將C#表單轉換為PDF的最可靠方法是構建表單資料的HTML快照,然後使用ChromePdfRenderer渲染該快照。 這種方法將視覺渲染與WinForms的GDI+表面分離,提供清晰、可攜帶的輸出,與每個PDF觀看器上的輸出一致。

using IronPdf;

// Set your license key once at application startup
License.LicenseKey = "YOUR-LICENSE-KEY";

// Compose an HTML representation of your form data
string formHtml = $"""
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <style>
            body  {{font-family: Arial, sans-serif; margin: 40px; color: #222;}}
            h1    {{color: #1a4a8a; border-bottom: 2px solid #1a4a8a; padding-bottom: 8px;}}
            label {{font-weight: bold; display: inline-block; width: 160px;}}
            .row  {{margin: 12px 0;}}
            .box  {{border: 1px solid #bbb; padding: 20px; border-radius: 4px;}}
        </style>
    </head>
    <body>
        <h1>Customer Registration Form</h1>
        <div class="box">
            <div class="row"><label>Full Name:</label> Jane Smith</div>
            <div class="row"><label>Email:</label> jane@example.com</div>
            <div class="row"><label>Phone:</label> +1 555-0100</div>
            <div class="row"><label>Date:</label> {DateTime.Now:yyyy-MM-dd}</div>
        </div>
    </body>
    </html>
    """;

// Render HTML to PDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize       = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop       = 20;
renderer.RenderingOptions.MarginBottom    = 20;
renderer.RenderingOptions.MarginLeft      = 25;
renderer.RenderingOptions.MarginRight     = 25;
renderer.RenderingOptions.CssMediaType    = IronPdf.Rendering.PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;

PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
pdf.SaveAs("CustomerForm.pdf");

Console.WriteLine($"PDF saved -- {pdf.PageCount} page(s).");
C#

ChromePdfRenderer驅動一個無頭的Chromium引擎,因此CSS布局、嵌入字體甚至列印媒體查詢都呈現得非常真實。 在運行時將硬編碼的字段值替換為從表單控制項綁定的資料,以實現完全動態的方法。 HTML-to-PDF指南詳細介紹了所有可用的渲染選項。

如何從表單控制項中提取即時資料?

不需要手動編碼HTML,而是直接從WinForms控制項中讀取值並將其注入模板中:

using IronPdf;

// Called from a button click handler in your WinForms application
void ExportFormToPdf()
{
    // Read control values at the moment of export
    string name    = txtName.Text;
    string email   = txtEmail.Text;
    string phone   = txtPhone.Text;
    string notes   = rtbNotes.Text.Replace("\n", "<br>");

    string html = $"""
        <!DOCTYPE html>
        <html>
        <head>
            <style>
                body {{font-family: Arial, sans-serif; margin: 30px;}}
                table {{width: 100%; border-collapse: collapse;}}
                th, td {{border: 1px solid #ccc; padding: 10px; text-align: left;}}
                th {{background-color: #f0f4ff;}}
                h2 {{color: #1a4a8a;}}
            </style>
        </head>
        <body>
            <h2>Form Export -- {DateTime.Now:dd MMM yyyy HH:mm}</h2>
            <table>
                <tr><th>Field</th><th>Value</th></tr>
                <tr><td>Full Name</td><td>{name}</td></tr>
                <tr><td>Email</td><td>{email}</td></tr>
                <tr><td>Phone</td><td>{phone}</td></tr>
                <tr><td>Notes</td><td>{notes}</td></tr>
            </table>
        </body>
        </html>
        """;

    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

    // Prompt the user for a save location
    using var dialog = new SaveFileDialog();
    dialog.Filter   = "PDF Files|*.pdf";
    dialog.FileName = $"FormExport_{DateTime.Now:yyyyMMdd_HHmmss}.pdf";

    if (dialog.ShowDialog() == DialogResult.OK)
    {
        pdf.SaveAs(dialog.FileName);
        MessageBox.Show("PDF exported successfully.", "Export Complete");
    }
}
C#

這段程式碼片段將表單匯出視作一個微型報告任務:收集字段值,將它們嵌入HTML模板中,渲染,然後保存到使用者選擇的位置。 您可以根據表單包含的字段數量擴展HTML表格。 對於多標籤表單,每個標籤建立獨立的<section>塊,讓IronPDF自然分頁。

如何新增頁眉和頁腳?

頁眉和頁腳為專業用途的表單匯出增色。 IronPDF的TextHeaderFooter類在每頁的頂部和底部蓋上文字,而不改變正文HTML:

using IronPdf;
using IronPdf.Rendering;

var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);

// Stamp header and footer on every page
pdf.AddTextHeaders(new TextHeaderFooter
{
    CenterText      = "Confidential -- Internal Use Only",
    LeftText        = "{date}",
    RightText       = "Page {page} of {total-pages}",
    FontSize        = 9,
    DrawDividerLine = true
});

pdf.AddTextFooters(new TextHeaderFooter
{
    CenterText = "Generated by MyApp v2.0",
    FontSize   = 8
});

pdf.SaveAs("FormWithHeader.pdf");

動態標籤如HtmlHeaderFooter,並提供完整的HTML標記,包括公司徽標。 頁眉和頁腳指南展示了所有可用的標籤和佈局選項。

如何將表單轉換為字節陣列而不是文件?

直接保存到磁碟非常方便,但許多應用程式需要通過HTTP傳輸PDF、將其儲存在資料庫中,或將其傳遞給下游服務。在這些情況下,跳過文件而直接處理原始字節:

using IronPdf;

var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);

// Get raw bytes -- no file required
byte[] pdfBytes = pdf.BinaryData;

// Alternatively, get a MemoryStream for APIs that accept streams
using System.IO.MemoryStream stream = pdf.Stream;
byte[] fromStream = stream.ToArray();

Console.WriteLine($"PDF size in memory: {pdfBytes.Length:N0} bytes");

// Example: return as HTTP response in ASP.NET Core
// return File(pdfBytes, "application/pdf", "form-export.pdf");

BinaryData屬性執行O(1)拷貝預計算的字節陣列。 MemoryStream,支持對預期流輸入的程式庫進行可尋址存取——在壓縮或加密連結前交付最終字節時很有用。 有關記憶體中PDF處理的更多詳情,請參閱PDF記憶體流指南

如何在保存前應用安全設置?

表單匯出通常包含敏感資料。 IronPDF的安全API加密PDF並限制接收者的操作權限:

using IronPdf;

var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);

// Restrict access
pdf.SecuritySettings.OwnerPassword          = "adminSecretKey";
pdf.SecuritySettings.UserPassword           = "viewerPass";
pdf.SecuritySettings.AllowUserPrinting      = true;   // allow printing
pdf.SecuritySettings.AllowUserCopyPasteContent = false; // block copy
pdf.SecuritySettings.AllowUserAnnotations   = false;

pdf.SaveAs("SecureForm.pdf");
Console.WriteLine("Password-protected PDF created.");

設置擁有者密碼使管理員能夠控制權限標誌,而使用者密碼完全限制文件存取。 AllowUserPrinting 標誌在這裡尤為重要——您可以讓接收者重新列印匯出表單,而不賦予他們編輯權限。 完整的細節在PDF權限和密碼指南中出現。

如何比較C#表單的列印方法?

在WinForms的本地PrintDocument、GDI+位圖捕獲和IronPDF的HTML渲染之間選擇取決於保真度、復雜性和攜帶性的權衡:

C#表單轉換為PDF的方法比較
方法輸出保真度程式碼複雜性跨平台CSS支持最適合
PrintDocument + PDF列印機驅動僅支持WindowsNone具有現有列印邏輯的舊版WinForms
GDI+位圖捕獲(Control.DrawToBitmap)高(光柵化)僅支持WindowsNone快速截圖風格的捕獲
IronPDF HTML渲染高(矢量)Windows,Linux,macOS,Docker完整CSS3專業、可攜帶、資料驅動的匯出
ReportViewer(RDLC)僅支持Windows有限具有分組的複雜分頁報告

IronPDF的基於HTML的方法生成的矢量PDF輸出可以在任何縮放級別中清晰顯示,並在任何裝置上都能列印出色。因為渲染引擎是Chromium,CSS媒體查詢、flexbox佈局和Google字體都能正常工作——這些都是GDI+位圖捕獲無法複製的。 此程式庫還能在Linux環境Docker容器中運行,是此表中唯一可在Windows以外工作的選項。

當表單有多個標籤時會發生什麼?

多標籤的WinForms在業務應用中很常見。 由於PDF是從HTML生成而不是從即時GDI+表面生成,您完全可以控制哪些標籤內容顯示。 每個標籤構建一個HTML部分,並在渲染前將它們連接起來。 從標籤HTML字串通過ChromePdfRenderer到單個、連續的多頁PDF——每個標籤一個邏輯部分。 或者,單獨渲染每個標籤,然後使用IronPDF的合併API合併生成的PdfDocument物件。

如何在匯出前處理表單驗證?

僅匯出有效的表單資料。 簡單的保護模式防止從不完整的提交中生成PDF:首先驗證字段,僅當所有必填字段通過時才進行HTML生成和渲染。 如果任何字段不合格,則在UI中突出錯誤並中止匯出。 這保持匯出的PDF一致,並避免從部分資料造成下游混亂。 根據微軟在Windows表單驗證上的文件,ErrorProvider是操作前字段級別驗證反饋的標準機制。

如何從ASP.NET Core提供PDF匯出?

使用ASP.NET Core構建的Web表單可以使用相同的ChromePdfRenderer API匯出為PDF。 渲染後的字節直接作為文件結果返回:

using IronPdf;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/forms")]
public class FormExportController : ControllerBase
{
    [HttpPost("export")]
    public IActionResult ExportFormAsPdf([FromBody] FormDataModel formData)
    {
        // Build HTML from submitted form data
        string html = $"""
            <!DOCTYPE html>
            <html>
            <head>
                <style>
                    body {{font-family: Arial, sans-serif; padding: 30px;}}
                    h1   {{color: #1a4a8a;}}
                    dl   {{display: grid; grid-template-columns: 200px 1fr; gap: 8px 16px;}}
                    dt   {{font-weight: bold;}}
                </style>
            </head>
            <body>
                <h1>{formData.FormTitle}</h1>
                <dl>
                    <dt>Applicant Name</dt><dd>{formData.ApplicantName}</dd>
                    <dt>Submission Date</dt><dd>{DateTime.UtcNow:dd MMM yyyy}</dd>
                    <dt>Reference ID</dt><dd>{formData.ReferenceId}</dd>
                </dl>
            </body>
            </html>
            """;

        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

        PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
        byte[] pdfBytes = pdf.BinaryData;

        string fileName = $"form-{formData.ReferenceId}-{DateTime.UtcNow:yyyyMMdd}.pdf";
        return File(pdfBytes, "application/pdf", fileName);
    }
}

public record FormDataModel(string FormTitle, string ApplicantName, string ReferenceId);
C#

此控制器接收表單資料為JSON,並在記憶體中生成PDF,然後以文件下載的方式流回。 伺服器上不會建立臨時文件。 對於Blazor應用,方法類似——從服務調用相同的渲染程式碼,然後通過IJSRuntime將字節推送到瀏覽器。 完整的ASP.NET整合模式記錄在ASP.NET到PDF指南中。

應使用哪些MIME型別和內容配置?

始終返回application/pdf作為內容型別。 使用Content-Disposition: attachment強制觸發下載。 当使用attachment時,文件名稱會出現在瀏覽器的保存對話框中,請選擇一個有意義的名稱,包含一個參考ID或日期。

如何快取生成的PDF?

如果同一表單匯出被反复要求,快取字節陣列以避免重新渲染。 IMemoryCache 適用於單伺服器部署; 對於多實例設置,請使用如Redis的分布式快取。 設置與基礎表單資料更改頻率一致的過期時間。

表單到PDF匯出的最佳實踐是什麼?

一致的、高質量的表單匯出來自於一些可重複的模式:

  • **保持HTML簡單。**避免使用JavaScript繁重的模板——純HTML和CSS渲染更快並產生更小的PDF。 僅當表單計算依賴於它時啟用RenderingOptions.EnableJavaScript
  • **使用列印CSS。**設置@media print 规则。 這可以消除螢幕專用的chrome,如導航條和側邊欄,從匯出的PDF中移除。
  • **淨化使用者輸入。**在您注入模板的任何字段值中轉義HTML實體,以防止損壞的標記,或在邊緣案例中,防止腳本注入到PDF中。
  • **處置PdfDocument物件。**非管理資源將被保留直到處置。 使用Dispose()
  • **使用生產資料進行測試。**包含長文字、特殊字元或嵌入圖像的表單可能會產生令人驚訝的佈局。 在開發過程中對實際資料樣本進行匯出。

渲染選項參考記錄了每個可用設置,包括自定義紙張大小自定義邊距頁面方向

如何處理大型或多頁表單?

IronPDF根據內容高度和選定的紙張大小自動分頁。在CSS中,在每個需要新頁面開始的新表單部分中的段容器上插入page-break-before: always。 對於包含數百個字段的表單,預先分配MemoryStream具有估計容量,以在字節陣列拷貝期間減少GC壓力。

如何新增數位簽章?

帶簽章的表單匯出在許多司法管轄區中具有法律效力。 IronPDF支持儲存在PFX文件或Windows證書儲存中的數位證書:

// Load the certificate and sign in one step
var signature = new IronPdf.Signing.PdfSignature("certificate.pfx", "certPassword");
pdf.Sign(signature);
pdf.SaveAs("SignedForm.pdf");

根據Adobe PDF數位簽章概述,數位簽章能夠驗證文件的來源並檢測簽名後的任何修改。 PDF數位簽章指南詳細介紹了證書配置和可見簽章字段。

您應該吸取哪些要點?

使用IronPDF將C# Windows Form轉換為PDF簡化為三個步驟:構建表單資料的HTML表示,將其傳遞給ChromePdfRenderer,然後保存或傳輸結果。 該方法生成的矢量PDF列印清晰,在不同平台上都能工作,並支持完整的CSS3佈局模型——這些都是GDI+位圖捕捉和舊版列印驅動方法無法媲美的優勢。

本指南涵蓋的關鍵功能:

  • 使用ChromePdfRenderer進行HTML-to-PDF渲染,適用於WinForms和ASP.NET Core
  • 從WinForms控制項到HTML模板的即時資料綁定
  • 使用TextHeaderFooter在頁眉、頁腳和頁碼上
  • 通過BinaryData進行記憶體中字節陣列輸出,用於HTTP回應和資料庫儲存
  • PDF安全設置:擁有者/使用者密碼和許可標誌
  • 法律約束力的匯出中附加的數位簽章

探索IronPDF功能集查看註釋工具、表單字段編輯、PDF/A合規性等。 免費試用IronPDF並獲得30天試用授權,今天就將它應用到您自己的表單匯出工作流程中。

Curtis Chau
技術作家

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

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立