如何使用 IronPDF 使用 C# 线性化 PDF.

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

线性化 PDF 可在下载时立即显示首页,极大地改善了大型文档的用户体验。 IronPDF 提供了在 C# 中创建和验证这些文档的简便方法,可优化文档以实现快速的网页浏览。

线性化PDF,也被称为"快速网页查看"或"网页优化PDF",是为了互联网流媒体而结构重组的。 这使得兼容的查看器几乎可以立即显示文档的第一页,远在整个文件下载完成之前。

在任务关键或时间紧迫的应用中,此功能尤其有用。 它消除了大型文档的加载时间,尤其是在慢速或移动网络上,使用户可以立即与内容互动。 这促进了更快的决策,并提高了专业环境中的生产力。 结合 IronPDF 的性能优化功能,它们能提供卓越的阅读体验。

在本文中,我们将探讨 IronPDF 为开发人员提供的将文档导出为线性化 PDF 的选项。

快速入门:将 PDF 线性化以加快网页浏览速度

使用IronPDF开始轻松线性化您的PDF。 此简单代码示例演示了如何利用 IronPDF 的 LinearizePdf 方法优化 PDF,以实现网页浏览器中的更快加载。 通过允许页面在加载时显示,而不是等待整个文档下载,提高用户体验。 按照以下步骤简化您的PDF并提高其在线共享的效率。

  1. 使用 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 的内部格式,将关键信息置于文件开头,从而支持渐进式下载和渲染。 在通过 Web 应用程序提供 PDF 文件时,该工具尤为实用。

输出结果是什么样的?

PDF 属性对话框,高亮显示快速网络视图设置,演示线性化 PDF 优化

如何将 PDF 字节保存为线性化格式?

除了直接保存 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 输入的静态方法使用。

获取线性化输出(字节数组)

当需要表示 HTTP 响应、数据库 byte[] 列或任何固定长度缓冲区时,请使用 LinearizePdfToBytes

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

将线性化输出作为流获取

当将输出直接传输至另一个流(如云存储块上传、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 异常在输入流为空时抛出。)}]

如何将线性化 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 是否已线性化?

除了通过 Adobe Acrobat 等 PDF 阅读器检查文档属性以确认 PDF 是否已线性化外,IronPDF 还提供了一种通过 IsLinearized 方法以编程方式进行检查的方式。 它接受一个字符串参数作为文件路径,如果 PDF 文件已加密,则可选地接受第二个字符串参数作为密码。 这种验证能力对于质量保证至关重要,可以集成到自动测试工作流程中。

在本示例中,我们将使用上述三个示例的输出文件来测试它们是否线性化,并包含第四个非线性化 PDF 来展示该方法的行为。 有关更高级的 PDF 操作和验证技术,请探索 IronPDF 的全面功能集

结果如何?

调试输出显示 PDF 线性化结果:三个真值和一个假值

如您所见,前三个示例返回 MemoryStream,而最后一个未线性化的 PDF/A 文件则返回 IsLinearized

请注意线性化是一种文件级结构,因此可通过 IsLinearized 对已保存的文件进行验证。 若要生成线性化输出(如字节或流),且不写入磁盘,请使用上述所述的 LinearizePdfToBytesLinearizePdfToStream 方法。)}]

线性化 PDF 的最佳实践

在处理线性化 PDF 时,请考虑以下最佳实践:

1.文件大小注意事项:由于格式重组,线性化可能会略微增加文件大小。 必要时使用 IronPDF 的压缩功能来优化文件大小。

2.网络部署:线性化 PDF 是网络应用的理想选择。 配置您的网络服务器以支持字节范围请求,从而最大限度地发挥线性化的优势。

3.性能测试:始终在目标环境中测试线性化 PDF。 在连接速度较慢的情况下,大文件的性能提升最为明显。

4.兼容性:虽然大多数现代 PDF 阅读器都支持线性化 PDF,但仍要确保与用户首选阅读器的兼容性。

有关其他优化策略和高级 PDF 处理技术,请参阅 IronPDF 的渲染选项文档

常见问题解答

什么是线性化 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 进行线性化处理,可立即显示第一页,消除大型文档令人沮丧的加载时间,在专业环境中实现更快的决策,并显著改善用户体验,尤其是在关键任务或时间敏感型应用中。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 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文件。