如何在 C# 中於列印前將 PDF 文件扁平化

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPrint 的 PrintSettings 類別包含一個 Flatten 屬性,該屬性會在列印時將所有互動式表單欄位、註解及圖像圖層合併為靜態內容。我們在 Flatten = true 物件上設定 PrintSettings,其餘工作便由 IronPrint 處理 — 無需額外的 PDF 處理程式庫或中間檔案儲存步驟。

本指南說明在列印前何時以及如何將 PDF 文件扁平化,並提供適用於同步、組合設定及非同步工作流程的實用 C# 程式碼。

快速入門:列印前將 PDF 文件扁平化

  1. 透過 NuGet 安裝 IronPrint:Install-Package IronPrint
  2. 在檔案中加入 using IronPrint;
  3. 建立一個 PrintSettings 物件
  4. Flatten 設定為 true
  5. 將設定傳遞至 Printer.Print()Printer.PrintAsync()
  1. using NuGet 套件管理員安裝 https://www.nuget.org/packages/IronPrint

    PM > Install-Package IronPrint
  2. 請複製並執行此程式碼片段。

    using IronPrint;
    
    // Flatten and print a PDF with form fields
    Printer.Print("form-document.pdf", new PrintSettings
    {
        Flatten = true
    });
  3. 部署至您的生產環境進行測試

    立即透過免費試用,在您的專案中開始使用 IronPrint

    arrow pointer

如何在 C# 中於列印前將 PDF 文件扁平化?

我們在列印時透過將 Flatten 物件的 true 屬性設定為 PrintSettings,來將 PDF 進行扁平化處理。 接著,我們將該物件傳遞給 IronPrint 的任何列印方法

:path=/static-assets/print/content-code-examples/how-to/flatten-pdfs/flatten-pdfs-flatten-basic.cs
using IronPrint;

// Configure print settings with flattening enabled
PrintSettings settings = new PrintSettings();
settings.Flatten = true;

// Print the flattened document
Printer.Print("application-form.pdf", settings);
Imports IronPrint

' Configure print settings with flattening enabled
Dim settings As New PrintSettings()
settings.Flatten = True

' Print the flattened document
Printer.Print("application-form.pdf", settings)
$vbLabelText   $csharpLabel

我們首先實例化 PrintSettings,其初始化時會採用預設值 — 包括 Flatten = false。 接著,我們將 Flatten 設定為 Printer.PrintFlatten,這會指示 IronPrint 在傳送列印工作之前,將所有互動元素合併至頁面內容中。 當我們呼叫 [Print()] 時,印表機將接收該文件的完全靜態版本。

扁平化處理發生在列印流程的記憶體中。原始 PDF 檔案在磁碟上仍保持互動性,因此最終使用者仍可填寫並重新提交表單。 這一點至關重要:我們是為了列印而進行扁平化處理,並非永久性地修改原始檔案。

Flatten 屬性於 IronPrint v2024.7.2 版本中引入,並適用於所有後續版本。

何時應在列印前將 PDF 文件"扁平化"?

當 PDF 文件包含可能無法在紙本上正確呈現的互動元素時,平鋪處理便顯得尤為重要。 最常見的應用情境包括:

包含可填寫表單欄位的 PDF 檔案。文字輸入框、核取方塊、單選按鈕及下拉式選單皆由 PDF 檢視器呈現,而非嵌入頁面內容中。 某些印表機驅動程式會完全跳過這些層級,導致列印頁面上的欄位呈現空白。 扁平化會將欄位值強制映射至靜態頁面層。

帶有註解或疊加層的 PDF 檔案。評論、便利貼、印章及標記註解皆位於獨立的圖層上。 透過"扁平化"處理,將其併入可見內容中,使其顯示於列印輸出結果中。

PDF 檔案中包含位於不同圖層的嵌入式圖片。由多個來源彙整而成的文件,其圖片可能位於不同的 Z 圖層上。 將複合圖層扁平化為單一圖層,可避免圖片遺漏或對齊錯誤。

當 PDF 僅包含靜態文字和圖片時(例如由 HTML 生成的報告或掃描文件),扁平化處理將無效。 在這些情況下,我們可以將 Flatten 保留其預設值 false Flatten = true PaperSize.A4 PaperOrientation.Portrait Dpi PaperMargins,以避免不必要的處理開銷。

如何將"Flatten"與其他PRINT設定結合使用?

PrintSettings 類別除了 Flatten 之外,還提供了數個屬性。 我們可以在單一列印工作內,同時設定紙張尺寸方向DPI邊距、複印份數以及扁平化處理。

:path=/static-assets/print/content-code-examples/how-to/flatten-pdfs/flatten-pdfs-combined-settings.cs
using IronPrint;

// Configure flatten with full print settings
PrintSettings settings = new PrintSettings
{
    Flatten = true,
    PaperSize = PaperSize.A4,
    PaperOrientation = PaperOrientation.Portrait,
    Dpi = 300,
    NumberOfCopies = 2,
    PaperMargins = new Margins(10, 10, 10, 10),
    Grayscale = false
};

// Print the insurance claim form
Printer.Print("insurance-claim.pdf", settings);
Imports IronPrint

' Configure flatten with full print settings
Dim settings As New PrintSettings With {
    .Flatten = True,
    .PaperSize = PaperSize.A4,
    .PaperOrientation = PaperOrientation.Portrait,
    .Dpi = 300,
    .NumberOfCopies = 2,
    .PaperMargins = New Margins(10, 10, 10, 10),
    .Grayscale = False
}

' Print the insurance claim form
Printer.Print("insurance-claim.pdf", settings)
$vbLabelText   $csharpLabel

為求清晰,我們採用物件初始化語法。 EnsureFlatten 可確保所有表單資料均顯示於列印頁面中。 PaperSizeOrientation 符合商業表單的標準格式。 DPI 設定為 300 時,可在原本以螢幕解析度渲染的填充區域中產生清晰的文字。 Margins 可透過 Margins 建構函式接受四個以毫米為單位的數值。

這些特性彼此之間並不衝突。 IronPrint 會先執行"扁平化"操作,接著根據剩餘設定格式化生成的靜態文件,最後將列印工作傳送至印表機。 如需更多列印設定選項(包括印表機選擇紙匣配置),請參閱完整的設定指南。

如何進行扁平化處理並以非同步方式PRINT?

對於無法阻塞主執行緒的應用程式(例如 WPF 或 WinForms 應用程式),我們會使用 Printer.PrintAsync。 此方法接受相同的 PrintSettings 物件,並傳回一個 Task

:path=/static-assets/print/content-code-examples/how-to/flatten-pdfs/flatten-pdfs-async-flatten.cs
using IronPrint;
using System.Threading.Tasks;

public class FormPrinter
{
    public async Task PrintFlattenedFormAsync(string pdfPath)
    {
        // Configure flatten with Letter paper at 300 DPI
        PrintSettings settings = new PrintSettings
        {
            Flatten = true,
            PaperSize = PaperSize.Letter,
            Dpi = 300
        };

        // Print asynchronously
        await Printer.PrintAsync(pdfPath, settings);
    }
}
Imports IronPrint
Imports System.Threading.Tasks

Public Class FormPrinter
    Public Async Function PrintFlattenedFormAsync(pdfPath As String) As Task
        ' Configure flatten with Letter paper at 300 DPI
        Dim settings As New PrintSettings With {
            .Flatten = True,
            .PaperSize = PaperSize.Letter,
            .Dpi = 300
        }

        ' Print asynchronously
        Await Printer.PrintAsync(pdfPath, settings)
    End Function
End Class
$vbLabelText   $csharpLabel

當PRINT邏輯位於服務層時,此基於類別的模式便十分實用。 我們將 Flatten = truePaperSize.Letter 搭配使用,以適用於美國格式的表單。 await 關鍵字會在 IronPrint 處理扁平化操作並傳送列印工作時,釋放呼叫執行緒。

IronPrint 的非同步方法(包括 PrintAsyncShowPrintDialogAsync)在處理 Flatten 設定時,其行為與其同步對應方法 await PrintSettings.Flatten Flatten = true 完全一致。 無論是靜默列印還是透過PRINT對話方塊進行列印,其扁平化行為始終保持一致。

接下來我該怎麼做?

我們已介紹如何在 C# 中使用 IronPrint 的 PrintSettings 屬性,於列印前將 PDF 文件進行扁平化處理。 關鍵要點:設定 Flatten 即可在 PRINT 時將互動式表單欄位、註解及圖層整合至靜態內容中 — 且無需修改原始檔案。

延續此內容:

立即開始 30 天試用,在您的列印工作流程中測試 PDF 扁平化功能,或查看生產環境使用的授權方案

常見問題

在列印前將 PDF 文件「扁平化」的目的是什麼?

將 PDF 文件扁平化可確保所有表單欄位、註解及圖片皆整合至單一層級,從而保證渲染與 PRINT 的準確性。

如何使用 C# 將 PDF 文件扁平化?

您可以透過 IronPrint程式庫,在 C# 中將 PDF 文件進行扁平化處理。這涉及在 PrintSettings 上設定一個布林值,以確保所有元素在列印過程中都能正確地被扁平化。

為什麼表單欄位和註解需要被扁平化?

表單欄位與註解需進行扁平化處理,以防止任何互動元素在列印時變得可編輯或對齊錯誤,確保輸出結果的一致性。

若在列印前未將 PDF 扁平化,會發生什麼情況?

若 PDF 未進行扁平化處理,表單欄位和註解等互動元素可能無法正確列印,導致列印文件出現錯誤或資訊遺漏。

IronPrint 是否支援將表單欄位以外的其他 PDF 元素進行扁平化處理?

是的,IronPrint 支援將各種 PDF 元素(包括註解、圖片及其他分層內容)進行扁平化處理,確保所有內容皆能如預期般列印出來。

是否可以在 C# 中自動化扁平化流程?

沒問題,using IronPrint,您可以在 C# 程式碼中設定 PrintSettings 來自動化「扁平化」流程,從而簡化 PDF 批次處理的工作流程。

將 PDF 文件扁平化會影響列印品質嗎?

將 PDF 檔案「扁平化」通常能透過確保所有元素均被精確渲染與對齊,從而提升列印品質,並降低列印過程中發生錯誤的機率。

在 PDF 扁平化過程中,PrintSettings 布林值扮演什麼角色?

IronPrint 中的 PrintSettings 布林值(boolean)是一個關鍵參數,可啟用 PDF 扁平化功能,確保所有圖層合併為單一、可直接列印的格式。

IronPrint 是否需要額外的軟體來將 PDF 檔案轉換為平面檔案?

無需額外軟體。IronPrint 是一個獨立的程式庫,提供所有必要的功能,讓您能直接在 C# 應用程式中將 PDF 文件轉換為純文字格式。

IronPrint 如何確保與不同 PDF 版本的相容性?

IronPrint 設計上兼容各種 PDF 版本,確保扁平化處理過程能維持原始文件的完整性與格式。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
Nuget 下載 41,154 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronPrint
執行範例程式,親眼見證您的文件送印。