如何在 C# 中列印前將 PDF 展平

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

IronPrint 的 PrintSettings 類別包含一個 Flatten 屬性,該屬性會在列印時將所有互動表單欄位、註解和圖像層合併為靜態內容。我們在 PrintSettings 物件上設置 Flatten = true,其他的由 IronPrint 處理 — 不需要單獨的 PDF 操作程式庫或中間文件存檔。

本指南涵蓋何時以及如何在列印前將 PDF 展平,並提供用於同步、合併設置和異步工作的 C# 程式碼。

快速入門:在列印前展平 PDF

  1. 通過 NuGet 安裝 IronPrint: Install-Package IronPrint
  2. using IronPrint; 新增到文件中
  3. 建立一個 PrintSettings 物件
  4. 設定 Flattentrue
  5. 將設置傳遞給 Printer.Print()Printer.PrintAsync()
  1. 使用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 展平?

我們透過在 PrintSettings 物件上設置 Flatten 屬性為 true 來在列印時展平 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。 然後我們設置 FlattenPrinter.Print Flatten 告訴 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 以避免不必要的處理負擔。

如何將展平與其他列印設置結合?

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 先應用展平操作,然後根據剩餘設置格式化結果靜態文件,然後再將作業發送到列印機。 有關 列印設置選項(包括列印機選擇托盤配置)的更多資訊,請參閱完整配置指南。

如何進行異步展平和列印?

對於主要執行緒阻塞不可接受的應用程式—例如 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

當列印邏輯位於服務層時,這種基於類別的模式很有用。 我們將 Flatten = truePaperSize.Letter 一同設定,以適用於美國格式的表單。 await 關鍵字在 IronPrint 處理展平操作並發送列印作業時釋放呼叫執行緒。

IronPrint 的異步方法—包括 PrintAsyncShowPrintDialogAsync—都遵循 Flatten 設置,與其同步對應方法 await PrintSettings.Flatten Flatten = true 完全一致。 無論我們是靜默列印還是透過 列印對話框,展平行為始終一致。

我的下一步是什麼?

我們已經涵蓋如何使用 IronPrint 的 PrintSettings 屬性在 C# 中於列印前展平 PDF。 關鍵要點:設置 Flatten 以在列印時合併互動表單欄位、註解和圖片層成靜態內容—不修改源文件。

要繼續構建這樣的內容:

開始免費的30天試用,以測試在您自己的列印工作流程中展平PDF,或查看授權選項以供生產使用。

常見問題

列印前壓平 PDFs 的目的是什麼?

壓平 PDF 確保所有表單字段、註釋和圖像合併為單一層,從而保證準確的呈現和列印。

如何使用 C# 壓平 PDF?

您可以通過使用 IronPrint 程式庫來在 C# 中壓平 PDF。這涉及在 PrintSettings 中設置布林值,以確保在列印過程中適當壓平所有元素。

為什麼需要壓平表單字段和註釋?

需要壓平表單字段和註釋以防止列印時修改或錯位,確保一致的輸出。

如果未在列印前壓平 PDF,會發生什麼?

如果未壓平 PDF,可能會導致互動元素(如表單字段和註釋)未正確列印,導致列印文件中的錯誤或資訊缺失。

IronPrint 是否支持平整除表單字段以外其他 PDF 元素?

是的,IronPrint 支持壓平各種 PDF 元素,包括註釋、圖像和其他分層內容,保證一切都按預期列印。

是否可以在 C# 中自動化壓平過程?

當然可以,通過使用 IronPrint,您可以在您的 C# 程式碼中配置 PrintSettings,自動化壓平過程,簡化批量處理 PDF 的工作流程。

壓平 PDF 會影響列印質量嗎?

壓平 PDF 通常可以通過確保所有元素準確呈現和對齊,從而提高列印質量,減少列印過程中的錯誤。

PrintSettings 布林值在 PDF 壓平中扮演什麼角色?

IronPrint 中的 PrintSettings 布林值是一個關鍵參數,使 PDF 壓平,確保所有層合併為單一、可列印的格式。

IronPrint 是否需要額外的軟體來壓平 PDF?

不需要額外的軟體。IronPrint 是一個獨立的程式庫,提供在您的 C# 應用中直接壓平 PDF 所需的所有功能。

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

IronPrint 設計時考慮到了與不同 PDF 版本的相容性,確保壓平過程保持原始文件的完整性和格式。

Curtis Chau
技術作家

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

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

準備好開始了嗎?
Nuget 下載 44,051 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

仍在滾動?

想要快速證明嗎? PM > Install-Package IronPrint
運行範例 看看您的文件如何到達印表機。