MemoryStream到PDF C

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

IronPDF在C#中支持将MemoryStream对象直接转换为PDF文档,无需访问文件系统。 将您的PdfDocument构造函数,以便在内存中即时创建和操作PDF。

在C# .NET中加载及创建MemoryStream为PDF文件,无需触及文件系统。 这通过System.IO命名空间中得到实现。 在云环境、网络应用或文件系统访问受限的场景中使用此功能。

快速入门:使用 C# 从 MemoryStream 创建 PDF

使用IronPDF在一行代码中将MemoryStream转换为PDF。 从PdfDocument以将PDF创建集成到C#应用程序中而无需处理物理文件。 适用于内存数据处理、网络通信或实时数据转换。

  1. 使用 NuGet 包管理器安装 https://www.nuget.org/packages/IronPdf

    PM > Install-Package IronPdf
  2. 复制并运行这段代码。

    var bytes = File.ReadAllBytes("sample.pdf");
    var pdfDoc = new IronPdf.PdfDocument(myMemoryStream);
  3. 部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronPDF

    arrow pointer

如何从内存中加载 PDF?

从这些.NET内存对象初始化IronPdf.PdfDocument

  • 一个MemoryStream
  • 一个FileStream
  • byte[]形式的二进制数据

这是从PDF文件直接读取流并创建PdfDocument对象的示例:

:path=/static-assets/pdf/content-code-examples/how-to/pdf-memory-stream-from-stream.cs
using IronPdf;
using System.IO;

// Read PDF file as stream
var fileByte = File.ReadAllBytes("sample.pdf");

// Instantiate PDF object from stream
PdfDocument pdf = new PdfDocument(fileByte);
Imports IronPdf
Imports System.IO

' Read PDF file as stream
Private fileByte = File.ReadAllBytes("sample.pdf")

' Instantiate PDF object from stream
Private pdf As New PdfDocument(fileByte)
$vbLabelText   $csharpLabel

我可以使用哪些类型的流对象?

该示例展示了如何从文件系统读取PDF文件并创建PdfDocument对象。 您还可以从通过网络通信或其他数据交换协议接收到的PdfDocument。 将 PDF 数据转换为可编辑对象,以便根据需要进行修改。

下面是一个综合示例,显示了不同的数据流来源:

:path=/static-assets/pdf/content-code-examples/how-to/pdf-memory-stream-3.cs
using IronPdf;
using System.IO;
using System.Net.Http;

// Example 1: From FileStream
using (FileStream fileStream = File.OpenRead("document.pdf"))
{
    var pdfFromFileStream = new PdfDocument(fileStream);
}

// Example 2: From MemoryStream
byte[] pdfBytes = GetPdfBytesFromDatabase(); // Your method to get PDF bytes
using (MemoryStream memoryStream = new MemoryStream(pdfBytes))
{
    var pdfFromMemoryStream = new PdfDocument(memoryStream);
}

// Example 3: From HTTP Response
using (HttpClient client = new HttpClient())
{
    byte[] pdfData = await client.GetByteArrayAsync("https://example.com/document.pdf");
    var pdfFromHttp = new PdfDocument(pdfData);
}
Imports IronPdf
Imports System.IO
Imports System.Net.Http

' Example 1: From FileStream
Using fileStream As FileStream = File.OpenRead("document.pdf")
    Dim pdfFromFileStream = New PdfDocument(fileStream)
End Using

' Example 2: From MemoryStream
Dim pdfBytes As Byte() = GetPdfBytesFromDatabase() ' Your method to get PDF bytes
Using memoryStream As New MemoryStream(pdfBytes)
    Dim pdfFromMemoryStream = New PdfDocument(memoryStream)
End Using

' Example 3: From HTTP Response
Using client As New HttpClient()
    Dim pdfData As Byte() = Await client.GetByteArrayAsync("https://example.com/document.pdf")
    Dim pdfFromHttp = New PdfDocument(pdfData)
End Using
$vbLabelText   $csharpLabel

什么时候应该使用MemoryStream而非基于文件的操作?

MemoryStream操作在以下场景中表现优异:

1.Web 应用程序:在ASP.NET应用程序中动态提供 PDF 服务,而无需创建临时服务器文件。

2.云环境:在 Azure FunctionsAWS Lambda 中使用,文件系统访问受限或临时存储成本高昂。

3.安全性:在内存中处理敏感文件,避免在磁盘上留下临时文件。

4.性能:对于中小型 PDF,内存操作比磁盘 I/O 更快,特别是在固态或网络附加存储的情况下。

Icon Quote related to 什么时候应该使用MemoryStream而非基于文件的操作?

我最喜欢的这种库是 IronPDF。它允许快速高效地操作 PDF 文件。它还具有许多有价值的功能,比如导出为 PDF/A 格式和数字签名 PDF 文档。

Milan Jovanovic related to 什么时候应该使用MemoryStream而非基于文件的操作?

Milan Jovanovic

微软MVP

查看案例研究
Icon Quote related to 什么时候应该使用MemoryStream而非基于文件的操作?

IronOCR 意味着我们每年可以节省 $40,000 的人工处理成本,同时提高生产力,并释放资源用于高影响任务。我强烈推荐它。

Brent Matzelle related to 什么时候应该使用MemoryStream而非基于文件的操作?

Brent Matzelle

首席技术官,OPYN

查看案例研究
Icon Quote related to 什么时候应该使用MemoryStream而非基于文件的操作?

Iron Suite 在我们的运营中起着至关重要的作用。这些工具提高了业务各方面的效率,包括创建平面图和改善库存管理。

David Jones related to 什么时候应该使用MemoryStream而非基于文件的操作?

David Jones

首席软件工程师,Agorus Build

查看案例研究

如何将 PDF 导出到 MemoryStream?

将加载或创建的PDF文档导出回MemoryStream using进行处理或传输。 这在在网络应用程序中服务 PDF 或在数据库中存储 PDF 时非常有用。

以下是如何将 PDF 导出到 MemoryStream:

:path=/static-assets/pdf/content-code-examples/how-to/pdf-memory-stream-4.cs
using IronPdf;
using System.IO;

// Create or load a PDF document
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");

// Export to MemoryStream
using (MemoryStream memoryStream = pdf.Stream)
{
    // Example: Convert to byte array for database storage
    byte[] pdfBytes = pdf.BinaryData;
    
    // Example: Reset position to read from beginning
    memoryStream.Position = 0;
    
    // Use the stream as needed (e.g., return in web response)
}
Imports IronPdf
Imports System.IO

' Create or load a PDF document
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>")

' Export to MemoryStream
Using memoryStream As MemoryStream = pdf.Stream
    ' Example: Convert to byte array for database storage
    Dim pdfBytes As Byte() = pdf.BinaryData
    
    ' Example: Reset position to read from beginning
    memoryStream.Position = 0
    
    ' Use the stream as needed (e.g., return in web response)
End Using
$vbLabelText   $csharpLabel

高级内存流操作

从多个 MemoryStreams 合并 PDF 文件

在内存中合并多个 PDF 文档,无需访问文件系统:

using IronPdf;
using System.Collections.Generic;
using System.IO;

public static byte[] MergePdfsFromMemory(List<byte[]> pdfBytesList)
{
    List<PdfDocument> pdfs = new List<PdfDocument>();

    // Load all PDFs from byte arrays
    foreach (var pdfBytes in pdfBytesList)
    {
        pdfs.Add(new PdfDocument(pdfBytes));
    }

    // Merge PDFs
    PdfDocument merged = PdfDocument.Merge(pdfs);

    // Export merged PDF to byte array
    using (MemoryStream ms = new MemoryStream())
    {
        merged.SaveAs(ms);
        return ms.ToArray();
    }
}
using IronPdf;
using System.Collections.Generic;
using System.IO;

public static byte[] MergePdfsFromMemory(List<byte[]> pdfBytesList)
{
    List<PdfDocument> pdfs = new List<PdfDocument>();

    // Load all PDFs from byte arrays
    foreach (var pdfBytes in pdfBytesList)
    {
        pdfs.Add(new PdfDocument(pdfBytes));
    }

    // Merge PDFs
    PdfDocument merged = PdfDocument.Merge(pdfs);

    // Export merged PDF to byte array
    using (MemoryStream ms = new MemoryStream())
    {
        merged.SaveAs(ms);
        return ms.ToArray();
    }
}
Imports IronPdf
Imports System.Collections.Generic
Imports System.IO

Public Shared Function MergePdfsFromMemory(pdfBytesList As List(Of Byte())) As Byte()
    Dim pdfs As New List(Of PdfDocument)()

    ' Load all PDFs from byte arrays
    For Each pdfBytes In pdfBytesList
        pdfs.Add(New PdfDocument(pdfBytes))
    Next

    ' Merge PDFs
    Dim merged As PdfDocument = PdfDocument.Merge(pdfs)

    ' Export merged PDF to byte array
    Using ms As New MemoryStream()
        merged.SaveAs(ms)
        Return ms.ToArray()
    End Using
End Function
$vbLabelText   $csharpLabel

在内存中应用安全设置

在 PDF 上设置密码和权限,同时将所有内容保存在内存中:

:path=/static-assets/pdf/content-code-examples/how-to/pdf-memory-stream-6.cs
using IronPdf;
using System.IO;

// Load PDF from memory
byte[] unsecuredPdfBytes = GetPdfFromDatabase();
PdfDocument pdf = new PdfDocument(unsecuredPdfBytes);

// Apply security settings
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;

// Export secured PDF to memory
byte[] securedPdfBytes = pdf.BinaryData;
// Store or transmit secured PDF bytes
Imports IronPdf
Imports System.IO

' Load PDF from memory
Dim unsecuredPdfBytes As Byte() = GetPdfFromDatabase()
Dim pdf As New PdfDocument(unsecuredPdfBytes)

' Apply security settings
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False

' Export secured PDF to memory
Dim securedPdfBytes As Byte() = pdf.BinaryData
' Store or transmit secured PDF bytes
$vbLabelText   $csharpLabel

MemoryStream PDF 操作的最佳实践

  1. 妥善处理:使用PdfDocument对象以防止内存泄漏。

2.考虑内存限制:监控大型 PDF 或大量处理的内存使用情况。 考虑实现压缩或分块处理 PDF。

  1. 错误处理:实现try-catch块以处理处理流时的异常,尤其是处理损坏或格式不正确的PDF数据时。

4.异步操作:在网络应用程序中处理 PDF 时使用 async 方法,以保持响应速度。

与 IronPDF 其他功能的集成

MemoryStreams 支持多种 PDF 操作:

准备好看看您还能做些什么吗? 请查看我们的教程页面:编辑 PDF

常见问题解答

如何在不访问文件系统的情况下用 C# 将 MemoryStream 转换为 PDF?

IronPDF 允许将 MemoryStream 对象直接转换为 PDF 文档,而无需访问文件系统。只需将 MemoryStream 传递给 PdfDocument 构造函数:var pdfDoc = new IronPdf.PdfDocument(myMemoryStream).这种方法非常适合云环境、网络应用或文件系统访问受限的情况。

我可以使用哪些类型的流对象在内存中创建 PDF?

IronPDF 的 PdfDocument 构造函数接受三种类型的内存对象:内存流(MemoryStream)、文件流(FileStream)和字节数组(byte[])。你可以从这些来源中的任何一个初始化一个 PdfDocument,使其灵活地用于各种数据源,如网络通信、数据库 blob 或 API 响应。

能否从字节数组而不是文件路径加载 PDF?

是的,IronPDF 可以直接从字节数组加载 PDF。您可以使用以下方法从二进制数据创建一个 PdfDocument 对象:var pdfDoc = new IronPdf.PdfDocument(pdfBytes)。这在通过网络通信接收 PDF 数据或从数据库检索 PDF 数据时特别有用。

如何从 HTTP 响应流创建 PDF?

using IronPDF,您可以从 HTTP 响应创建 PDF,方法是首先将响应转换为字节数组:byte[] pdfData = await client.GetByteArrayAsync(url);然后初始化一个 PdfDocument:var pdfFromHttp = new IronPdf.PdfDocument(pdfData).这样就能从网络 API 或远程源无缝处理 PDF。

using MemoryStream 进行 PDF 操作有哪些好处?

将 MemoryStream 与 IronPDF 结合使用具有以下优势:不依赖文件系统,内存处理速度更快,安全性更高(无临时文件),非常适合文件系统访问受限或受限制的云环境或容器化应用程序。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

审核者
Jeff Fritz
Jeffrey T. Fritz
首席项目经理 - .NET 社区团队
Jeff 也是 .NET 和 Visual Studio 团队的首席项目经理。他是 .NET Conf 虚拟会议系列的执行制片人,并主持“Fritz and Friends”直播节目,每周两次与观众一起谈论技术并编写代码。Jeff 撰写研讨会、演示文稿并计划包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP 峰会在内的最大型微软开发者活动的内容。
准备开始了吗?
Nuget 下载 20,296,129 | 版本: 2026.7 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package IronPdf
运行示例看着你的HTML代码变成PDF文件。