MemoryStream 轉 PDF C

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

IronPDF允許在 C# 中直接將 MemoryStream 物件轉換為 PDF 文件,而無需存取文件系統。 將您的 FileStream 或位元組陣列傳遞給 PdfDocument 建構函數,以便在記憶體中即時建立和操作 PDF。

在 C# .NET中載入和建立 MemoryStream 到 PDF 文件,而無需存取檔案系統。 這是透過 System.IO 命名空間中的 MemoryStream 物件實現的。 此功能適用於雲端環境、Web 應用程式或檔案系統存取受限的場景。

快速入門:使用 C# 從 MemoryStream 建立 PDF

使用IronPDF ,只需一行程式碼即可將 MemoryStream 轉換為 PDF。 從 MemoryStream 初始化 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

  • A MemoryStream
  • A 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);
$vbLabelText   $csharpLabel

我可以使用哪些類型的流物件?

此範例展示如何從檔案系統讀取 PDF 檔案並建立 PdfDocument 物件。 您也可以從透過網路通訊或其他資料交換協定收到的 byte[] 初始化 PdfDocument。 將 PDF 資料轉換為可編輯對象,以便根據需要進行修改。

以下是一個展示不同資料流來源的綜合範例:

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);
}
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);
}
$vbLabelText   $csharpLabel

何時應該使用 MemoryStream 而不是基於檔案的操作?

MemoryStream 操作在以下場景中表現出色:

  1. Web 應用程式:在ASP.NET應用程式中動態提供 PDF,而無需建立臨時伺服器檔案。

2.雲端環境:在檔案系統存取受限或暫存成本高的情況下,可在Azure FunctionsAWS Lambda中使用。

3.安全性:在記憶體中處理敏感文檔,避免在磁碟上留下臨時文件。

4.效能:對於中小型 PDF 文件,記憶體操作比磁碟 I/O 更快,尤其是在使用固態儲存或網路附加儲存時。

如何將PDF匯出到MemoryStream?

將已載入或建立的 PDF 文件匯出至 MemoryStream 進行處理或傳輸。 這在 Web 應用程式中提供 PDF 文件或將其儲存在資料庫中時非常有用。

以下是如何將 PDF 檔案匯出到 MemoryStream:

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 = new MemoryStream())
{
    pdf.SaveAs(memoryStream);

    // Example: Convert to byte array for database storage
    byte[] pdfBytes = memoryStream.ToArray();

    // Example: Reset position to read from beginning
    memoryStream.Position = 0;

    // Use the stream as needed (e.g., return in web response)
}
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 = new MemoryStream())
{
    pdf.SaveAs(memoryStream);

    // Example: Convert to byte array for database storage
    byte[] pdfBytes = memoryStream.ToArray();

    // Example: Reset position to read from beginning
    memoryStream.Position = 0;

    // Use the stream as needed (e.g., return in web response)
}
$vbLabelText   $csharpLabel

進階記憶體流操作

合併來自多個記憶體流的 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();
    }
}
$vbLabelText   $csharpLabel

在記憶體中套用安全設定

在將所有內容保存在記憶體中的同時,設定 PDF 的密碼和權限

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 = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;

// Export secured PDF to memory
using (MemoryStream securedStream = new MemoryStream())
{
    pdf.SaveAs(securedStream);
    byte[] securedPdfBytes = securedStream.ToArray();
    // Store or transmit secured PDF bytes
}
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 = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;

// Export secured PDF to memory
using (MemoryStream securedStream = new MemoryStream())
{
    pdf.SaveAs(securedStream);
    byte[] securedPdfBytes = securedStream.ToArray();
    // Store or transmit secured PDF bytes
}
$vbLabelText   $csharpLabel

MemoryStream PDF 操作的最佳實踐

1.正確釋放:使用 using 語句或明確釋放 MemoryStreamPdfDocument 對象,以防止記憶體洩漏。

2.考慮記憶體限制:監控大型 PDF 或高容量處理的記憶體使用量。 考慮對PDF檔案進行壓縮或分塊處理。

3.錯誤處理:在處理流程時,特別是在處理損壞或格式錯誤的 PDF 資料時,應實作 try-catch 區塊來處理例外狀況。

4.非同步操作:在 Web 應用程式中處理 PDF 時使用非同步方法,以保持回應性。

與其他IronPDF功能的集成

MemoryStreams 提供了多種 PDF 操作可能性:

準備好要看看你還能做什麼了嗎? 請造訪我們的教學頁面:編輯 PDF

常見問題解答

如何在不存取檔案系統的情況下,在 C# 中將 MemoryStream 轉換為 PDF?

IronPDF 允許直接將 MemoryStream 物件轉換為 PDF 文件,而無需存取檔案系統。只需將您的 MemoryStream 傳給 PdfDocument 的建構程式:var pdfDoc = new IronPdf.PdfDocument(myMemoryStream).此方法非常適合雲端環境、Web 應用程式或檔案系統存取受限的場景。

我可以使用哪些類型的串流物件在記憶體中建立 PDF?

IronPDF 的 PdfDocument 构造函數接受三种类型的內存對象:MemoryStream、FileStream和byte陣列(byte[])。您可以從這些來源中的任何一個初始化一個 PdfDocument,使得它可以靈活地應對各種資料來源,如網路通訊、資料庫 blob 或 API 回應。

我可以從位元組而非檔案路徑載入 PDF 嗎?

是的,IronPDF 可以直接從位元組陣列載入 PDF。您可以使用: var pdfDoc = new IronPdf.PdfDocument(pdfBytes).當透過網路通訊接收 PDF 資料或從資料庫擷取 PDF 資料時,這個功能特別有用。

如何從 HTTP 回應串流建立 PDF?

使用 IronPDF,您可以從 HTTP 回應建立 PDF,方法是先將回應轉換成 byte array:byte[] pdfData = await client.GetByteArrayAsync(url);然後初始化一個 PdfDocument:var pdfFromHttp = new IronPdf.PdfDocument(pdfData)。這樣就能從 Web API 或遠端來源進行無縫 PDF 處理。

使用 MemoryStream 進行 PDF 作業有什麼好處?

將 MemoryStream 與 IronPDF 搭配使用具有多項優點:無檔案系統依存性、更快的記憶體處理、更好的安全性(無暫存檔案),而且非常適合檔案系統存取可能受限或限制的雲端環境或容器化應用程式。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

審核人
Jeff Fritz
Jeffrey T. Fritz
首席程序经理 - .NET 社群团队
Jeff 也是 .NET 和 Visual Studio 团队的首席程序经理。他是 .NET Conf 虚拟会议系列的执行制作人,并主持“Fritz 和朋友”这一每周两次的開發者的直播节目,在节目上讨论技術并与观众一起编写代碼。Jeff 撰写研讨会、主持演讲,并计划大型 Microsoft 開發者活動(包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit)的內容。
準備好開始了嗎?
Nuget 下載 17,803,474 | 版本: 2026.3 剛剛發布
Still Scrolling Icon

還在滾動嗎?

想快速取得證據? PM > Install-Package IronPdf
運行範例看著你的HTML程式碼變成PDF檔。