如何使用 C# 和 IronPDF 將 PDF 線性化

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

線性化 PDF 可在下載過程中立即顯示首頁,大幅提升大型文件的用戶體驗。 IronPDF 提供簡易的方法,讓您能在 C# 中建立並驗證這些文件,並針對快速網頁瀏覽進行文件優化。

線性化 PDF(亦稱為"快速網頁檢視"或"網頁優化 PDF")是經過結構性重組,以利於網路串流的 PDF 格式。 這使得相容的檢視器能夠在文件下載完成之前,幾乎立即顯示文件的第一頁。

在關鍵任務或時間敏感的應用程式中,此功能特別實用。 它能消除大型文件載入時的惱人等待時間,特別是在網速較慢或行動網路環境下,讓使用者能立即與內容互動。 這有助於在 Professional 環境中加速決策並提升生產力。 結合 IronPDF效能優化功能,可提供卓越的檢視體驗。

在這篇操作指南中,我們將探討 IronPDF 為開發人員提供的各種選項,協助他們將文件匯出為線性化 PDF。

快速入門:將 PDF 線性化以加快網頁瀏覽速度

立即開始使用 IronPDF,輕鬆將您的 PDF 檔案轉為純文字格式。 此簡單的程式碼範例展示了如何透過 IronPDF 的 LinearizePdf 方法,優化 PDF 檔案以加快網頁瀏覽器中的載入速度。 透過在頁面載入時即刻顯示內容,而非等待整個文件下載完成,從而提升使用者體驗。 請依照以下步驟優化您的 PDF 檔案,使其更適合線上分享。

  1. using NuGet 套件管理員安裝 https://www.nuget.org/packages/IronPdf

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

    var pdf = IronPdf.PdfDocument.FromFile("input.pdf");
    pdf.SaveAsLinearized(pdf.BinaryData, "linearized.pdf");
  3. 部署至您的生產環境進行測試

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

    arrow pointer


如何將 PDF 儲存為線性化格式?

使用 IronPDF 將文件儲存為線性化 PDF 是一個快速且簡單的操作。 開始之前,請確認您已透過 NuGet 或其他可用安裝方式安裝 IronPDF

在此範例中,我們將使用 RenderHtmlAsPdf 將 HTML 字串渲染為 PDF。 若需處理更複雜的 HTML 文件,您不妨探索 IronPDF 的 HTML 轉 PDF 轉換功能。 隨後,我們將使用 SaveAsLinearized 實例方法,將 PdfDocument 物件儲存為線性化 PDF,並將輸出檔案路徑作為字串參數傳入。

:path=/static-assets/pdf/content-code-examples/how-to/linearize-pdf.cs
using IronPdf;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Pdf Bytes</h1>");

// Get the PDF binary data
var pdfBytes = pdf.BinaryData;

// Save the PDF binary data as a linearized PDF file
PdfDocument.SaveAsLinearized(pdfBytes, "linearize-from-bytes.pdf");
Imports IronPdf

' Instantiate Renderer
Dim renderer As New ChromePdfRenderer()

' Create a PDF from an HTML string using VB.NET
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Pdf Bytes</h1>")

' Get the PDF binary data
Dim pdfBytes = pdf.BinaryData

' Save the PDF binary data as a linearized PDF file
PdfDocument.SaveAsLinearized(pdfBytes, "linearize-from-bytes.pdf")
$vbLabelText   $csharpLabel

此流程會重新組織 PDF 的內部格式,將關鍵資訊置於檔案開頭,從而實現漸進式下載與渲染。 在透過網頁應用程式提供 PDF 檔案時,此功能尤為實用。

翻譯成果應呈現何種樣貌?

PDF 屬性對話方塊中,Highlighted 的

如何節省 PDF Bytes 為線性化格式?

除了可直接儲存 PdfDocument 物件外,IronPDF 亦允許使用者將 PDF 位元組陣列轉換為線性化 PDF。 此靈活性在處理儲存於資料庫中的 PDF 檔案,或在記憶體密集型應用程式中處理 PDF 時,尤為實用。 如需進一步了解如何在記憶體中處理 PDF,請參閱我們關於從記憶體串流載入 PDF 的指南。

在此範例中,我們將示範如何將 HTML 字串渲染為 PdfDocument 物件,取得其位元組陣列,然後使用 SaveAsLinearized 重載方法(該方法接受 byte[] 輸入、輸出路徑及可選密碼)將該資料儲存為線性化 PDF/A。

翻譯成果應呈現何種樣貌?

這是程式碼產生的檔案:

如何將 MemoryStream 儲存為線性化格式?

接受 Stream 輸入的 SaveAsLinearized 重載方法,仍會將線性化後的輸出寫入指定輸出路徑的檔案中。 當您的原始 PDF 已處於流式狀態(來自資料庫、網路或記憶體緩衝區),且您希望將線性化的結果儲存至磁碟時,此功能便十分實用。

在此範例中,我們將把 PdfDocument 物件轉換為位元組陣列,寫入 MemoryStream,然後將該串流儲存為線性化 PDF 檔案,以展示此功能。

若需完全避免寫入磁碟(例如因應 HIPAA、PCI-DSS、沙箱應用程式,或採用唯讀檔案系統的雲端函式),請參閱下一節中的記憶體內方法。

這是程式碼產生的檔案:

如何將資料完全載入記憶體中進行線性化處理?

針對沙盒環境、雲端函式或合規性敏感的工作流程(如 HIPAA、PCI-DSS),在這些環境中寫入磁碟受到限制或不被鼓勵,IronPDF 提供了 LinearizePdfToBytesLinearizePdfToStream 方法,可直接返回線性化 PDF,無需臨時檔案或磁碟 I/O。

這些方法既可作為 PdfDocument 的實例方法使用,也可作為接受 byte[]Stream 輸入的靜態方法使用。

取得線性化輸出(以位元組為單位)

當您需要 LinearizePdfToBytes 來表示 HTTP 回應、資料庫 byte[] 欄位,或任何固定長度的緩衝區時,請使用 varbinary

using IronPdf;

// Instance method: linearize the current document, get bytes back
var pdf = PdfDocument.FromFile("input.pdf");
byte[] linearizedBytes = pdf.LinearizePdfToBytes();

// Static method: linearize from a byte array without instantiating PdfDocument
byte[] inputBytes = File.ReadAllBytes("input.pdf");
byte[] result = PdfDocument.LinearizePdfToBytes(inputBytes);

// Password-protected PDFs
byte[] decrypted = PdfDocument.LinearizePdfToBytes(encryptedBytes, password: "secret");
using IronPdf;

// Instance method: linearize the current document, get bytes back
var pdf = PdfDocument.FromFile("input.pdf");
byte[] linearizedBytes = pdf.LinearizePdfToBytes();

// Static method: linearize from a byte array without instantiating PdfDocument
byte[] inputBytes = File.ReadAllBytes("input.pdf");
byte[] result = PdfDocument.LinearizePdfToBytes(inputBytes);

// Password-protected PDFs
byte[] decrypted = PdfDocument.LinearizePdfToBytes(encryptedBytes, password: "secret");
Imports IronPdf

' Instance method: linearize the current document, get bytes back
Dim pdf = PdfDocument.FromFile("input.pdf")
Dim linearizedBytes As Byte() = pdf.LinearizePdfToBytes()

' Static method: linearize from a byte array without instantiating PdfDocument
Dim inputBytes As Byte() = File.ReadAllBytes("input.pdf")
Dim result As Byte() = PdfDocument.LinearizePdfToBytes(inputBytes)

' Password-protected PDFs
Dim decrypted As Byte() = PdfDocument.LinearizePdfToBytes(encryptedBytes, password:="secret")
$vbLabelText   $csharpLabel

將線性化輸出作為串流取得

當需將輸出傳送至其他資料流(如雲端 Blob 上傳、HTTP 回應內容、網路套接字)且不將整個檔案緩衝至記憶體時,請使用 LinearizePdfToStream

// Instance method: return a Stream
Stream linearizedStream = pdf.LinearizePdfToStream();

// Static method: linearize from a stream
using var inputStream = File.OpenRead("input.pdf");
Stream resultStream = PdfDocument.LinearizePdfToStream(inputStream);
// Instance method: return a Stream
Stream linearizedStream = pdf.LinearizePdfToStream();

// Static method: linearize from a stream
using var inputStream = File.OpenRead("input.pdf");
Stream resultStream = PdfDocument.LinearizePdfToStream(inputStream);
Imports System.IO

' Instance method: return a Stream
Dim linearizedStream As Stream = pdf.LinearizePdfToStream()

' Static method: linearize from a stream
Using inputStream As FileStream = File.OpenRead("input.pdf")
    Dim resultStream As Stream = PdfDocument.LinearizePdfToStream(inputStream)
End Using
$vbLabelText   $csharpLabel

控制線性化策略

這六種方法皆接受一個可選的 LinearizationMode 參數:

模式 行為 何時使用
Automatic (預設) 首先嘗試基於檔案的方法;若磁碟存取受限,則回退至記憶體內處理 建議預設; works across most environments
InMemory 完全在記憶體中執行線性化處理,無需磁碟 I/O HIPAA / PCI-DSS 工作流程、沙箱應用程式、唯讀檔案系統、雲端函式
FileBased 使用系統暫存目錄中的臨時檔案 當您明確需要臨時檔案行為且具備寫入權限時
using IronPdf;

// Force in-memory linearization (no disk I/O at all)
byte[] linearized = pdf.LinearizePdfToBytes(LinearizationMode.InMemory);
using IronPdf;

// Force in-memory linearization (no disk I/O at all)
byte[] linearized = pdf.LinearizePdfToBytes(LinearizationMode.InMemory);
Imports IronPdf

' Force in-memory linearization (no disk I/O at all)
Dim linearized As Byte() = pdf.LinearizePdfToBytes(LinearizationMode.InMemory)
$vbLabelText   $csharpLabel

請注意ArgumentException 會在輸入位元組為空或輸入串流無法讀取時觸發。 ArgumentNullException 當輸入串流為 null 時會拋出此例外。}}]

如何將線性化 PDF 串流至 HTTP 回應?

LinearizePdfToStream 與 ASP.NET 的 FileStreamResult 結合使用,即可直接將針對網頁優化的 PDF 傳送至瀏覽器,無需建立暫存檔:

:path=/static-assets/pdf/content-code-examples/how-to/linearize-pdf-http-response.cs
using IronPdf;
using Microsoft.AspNetCore.Mvc;

public class ReportController : Controller
{
    public IActionResult DownloadReport()
    {
        var pdf = PdfDocument.FromFile("quarterly-report.pdf");
        Stream linearized = pdf.LinearizePdfToStream(LinearizationMode.InMemory);

        return new FileStreamResult(linearized, "application/pdf")
        {
            FileDownloadName = "quarterly-report.pdf"
        };
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports System.IO

Public Class ReportController
    Inherits Controller

    Public Function DownloadReport() As IActionResult
        Dim pdf = PdfDocument.FromFile("quarterly-report.pdf")
        Dim linearized As Stream = pdf.LinearizePdfToStream(LinearizationMode.InMemory)

        Return New FileStreamResult(linearized, "application/pdf") With {
            .FileDownloadName = "quarterly-report.pdf"
        }
    End Function
End Class
$vbLabelText   $csharpLabel

瀏覽器接收的是經線性化的 PDF 檔案,系統會先顯示第一頁,其餘內容則以串流方式傳送——過程中絕不會有任何中間檔案接觸伺服器的磁碟。


如何驗證 PDF 是否已線性化?

除了透過 PDF 檢視器(例如 Adobe Acrobat)檢查文件屬性以確認 PDF 是否已線性化外,IronPDF 亦提供透過 IsLinearized 方法以程式化方式進行檢查的方式。 它接受一個字串參數作為檔案路徑,若 PDF 檔案經過加密,則可選地接受第二個字串參數作為密碼。 此驗證功能對於品質保證至關重要,並可整合至自動化測試工作流程中。

在此範例中,我們將使用上述三個範例的輸出檔案來測試它們是否經過線性化處理,並加入第四個未經線性化的 PDF 檔案,以展示該方法的運作行為。 若需更進階的 PDF 處理與驗證技術,請探索 IronPDF 的完整功能集

成果為何?

顯示 PDF 線性化結果的除錯輸出:三個 True 值與一個 False 值

如您所見,前三個範例會返回 MemoryStream,而最後一個未經線性化的 PDF/A 則會返回 IsLinearized

請注意線性化是一種檔案層級的結構,因此驗證是透過 IsLinearized 對儲存的檔案進行的。 若要產生線性化的輸出(以位元組或串流形式),且不寫入磁碟,請使用上述所述的 LinearizePdfToBytesLinearizePdfToStream 方法。)}]

線性化 PDF 的最佳實踐

處理線性化 PDF 時,請遵循以下最佳實務:

  1. 檔案大小考量:由於格式重新組織,線性化可能會使檔案大小略微增加。 必要時,請使用 IronPDF 的壓縮功能來優化檔案大小。

  2. 網頁部署:線性化 PDF 非常適合用於網頁應用程式。 請將您的 Web 伺服器設定為支援位元組範圍請求,以充分發揮線性化的優勢。

  3. 效能測試:請務必在目標環境中測試線性化 PDF 檔案。 在網速較慢的情況下處理大型檔案時,效能提升最為顯著。

  4. 相容性:雖然大多數現代 PDF 檢視器皆支援線性化 PDF,但請確保與使用者偏好的檢視器相容。

如需更多最佳化策略與進階 PDF 處理技巧,請參閱 IronPDF 的渲染選項文件

常見問題

什麼是線性化 PDF,為什麼要使用它?

線性化 PDF(亦稱為「快速網頁檢視」或「網頁優化 PDF」)是經過結構性重組以利於網路串流的 PDF 格式。IronPDF 的線性化功能可讓相容的檢視器在下載其餘內容的同時,幾乎立即顯示第一頁,大幅提升大型文件的用戶體驗,特別是在網速較慢或行動網路環境下。

如何在 C# 中建立線性化 PDF?

透過 IronPDF,您可以使用 SaveAsLinearized 方法輕鬆建立線性化 PDF。只需載入或建立您的 PDF 文件,然後呼叫 pdf.SaveAsLinearized(pdf.BinaryData, 'output.pdf'),即可將其儲存為針對快速網頁瀏覽所優化的線性化 PDF。

我可以將現有的 PDF 檔案轉換為線性化格式嗎?

是的,IronPDF 允許您將現有的 PDF 轉換為線性化格式。您可以透過 PdfDocument.FromFile('input.pdf') 載入任何 PDF,然後使用 SaveAsLinearized 方法將其儲存為線性化 PDF,以提升網頁效能。

如何確認 PDF 是否已進行線性化處理?

IronPDF 提供 IsLinearized 屬性,用於檢查 PDF 是否已線性化。只需載入您的 PDF 文件並檢查 IsLinearized 布林屬性,即可判斷該文件是否已針對快速網頁瀏覽進行優化。

將 PDF 線性化對網頁應用程式有哪些主要好處?

透過 IronPDF 將 PDF 文件線性化,可實現首頁即時顯示,消除大型文件令人沮喪的載入時間,使 Professional 環境中的決策更為迅速,並顯著提升使用者體驗,特別是在任務關鍵型或時間敏感的應用中。

Curtis Chau
技術撰稿人

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

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

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

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronPdf
執行範例 觀看您的 HTML 轉為 PDF。