MemoryStream 至 PDF C#

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

IronPDF 可在 C# 中直接將 MemoryStream 物件轉換為 PDF 文件,而無需存取檔案系統。 將您的 MemoryStream, FileStream, 或 byte array 傳送給 PdfDocument 建構器以立即在記憶體中建立及操作 PDF。

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

<!--說明:說明程式碼概念的圖表或截圖 -->

快速入門:在 C# 中從 MemoryStream 建立 PDF

使用 IronPDF 在一行代碼內將 MemoryStream 轉換成 PDF。 從 MemoryStream 初始化 PdfDocument 以將 PDF 創建整合至 C# 應用程式,而無需處理實體檔案。 適用於記憶體資料處理、網路通訊或即時資料轉換。

Nuget Icon立即開始使用 NuGet 建立 PDF 檔案:

  1. 使用 NuGet 套件管理器安裝 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` 物件的範例: ```csharp :path=/static-assets/pdf/content-code-examples/how-to/pdf-memory-stream-from-stream.cs ```

我可以使用哪些類型的 Stream 物件? 本範例展示如何從檔案系統讀取 PDF 檔案,並建立 `PdfDocument` 物件。 您也可以從透過網路通訊或其他資料交換協定接收的 `byte[]` 中初始化 `PdfDocument` 。 將 PDF 資料轉換為可編輯的物件,以便根據需要進行修改。 以下是一個綜合範例,顯示不同的串流來源: ```csharp 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); } ```

何時應該使用 MemoryStream 而非檔案式作業? `MemoryStream`作業在這些情境中表現優異: 1.**Web 應用程式**:在[ASP.NET應用程式](https://ironpdf.com/how-to/aspx-to-pdf/)中動態服務 PDF,而無需建立臨時伺服器檔案。 2.**雲端環境**:在 [Azure Functions](https://ironpdf.com/how-to/azure/) 或 [AWS Lambda](https://ironpdf.com/get-started/aws/) 中使用,其中檔案系統存取受限或臨時儲存成本高昂。 3.**安全性**:在記憶體中處理敏感文件,避免在磁碟上留下臨時檔案。 4.**效能**:對於中小型 PDF 而言,記憶體作業的速度比磁碟 I/O 快,尤其是使用固態或網路連接的儲存設備。

如何將 PDF 匯出至 MemoryStream? 將載入或建立的 PDF 文件匯出回 `MemoryStream` 以進行處理或傳輸。 這在 [ 在 Web 應用程式中服務 PDF](https://ironpdf.com/how-to/export-save-pdf-csharp/) 或將 PDF 儲存在資料庫時非常有用。 --> <!--說明:說明程式碼概念的圖表或截圖 --> 以下是如何將 PDF 匯出至 MemoryStream: ```csharp using IronPdf; using System.IO; // Create or load a PDF document var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("

This is a PDF from HTML

"); // 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) } ``` ## 進階 MemoryStream 作業。 ### 從多個 MemoryStream 合併 PDFs [在記憶體中合併多個 PDF 文件](https://ironpdf.com/how-to/merge-or-split-pdfs/),而無需存取檔案系統: ```csharp using IronPdf; using System.Collections.Generic; using System.IO; public static byte[] MergePdfsFromMemory(List pdfBytesList) { List pdfs = new List(); // 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(); } } ``` ### 在記憶體中應用安全設定 [在 PDF 上設定密碼和權限](https://ironpdf.com/how-to/pdf-permissions-passwords/),同時將所有內容保留在記憶體中: ```csharp 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 } ``` ## MemoryStream PDF 作業的最佳實務 1.**適當地丟棄**:使用 `using` 語句或明確處置 `MemoryStream` 和 `PdfDocument` 物件,以防止記憶體洩漏。 2.**考慮記憶體限制**:監控大型 PDF 或大量處理的記憶體使用量。 考慮[實現壓縮](https://ironpdf.com/how-to/pdf-compression/)或分塊處理 PDF。 3.**Error Handling**:實施 try-catch 區塊,以便在處理串流(特別是已損壞或畸形的 PDF 資料)時處理異常。 4.**同步操作**:在 Web 應用程式中處理 PDF 時,請使用 [async 方法](https://ironpdf.com/how-to/async/),以維持反應速度。 ## 與其他 IronPDF 功能整合。 MemoryStreams 可以實現多種 PDF 操作可能性: - [將水印](https://ironpdf.com/how-to/custom-watermark/)加到從網路服務接收的 PDF 上 - [從上傳的 PDF 中萃取文字和影像](https://ironpdf.com/how-to/extract-text-and-images/)。 - [將數位簽章](https://ironpdf.com/how-to/signing/)套用至雲端工作流程中的文件 - [將 HTML 轉換為 PDF](https://ironpdf.com/how-to/html-string-to-pdf/) 並直接傳送給使用者 準備好看看您還能做些什麼嗎? 在此查看我們的教學頁面:[ 編輯 PDFs](https://ironpdf.com/tutorials/csharp-edit-pdf-complete-tutorial/)

常見問題解答

如何在不存取檔案系統的情況下,在 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擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

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

經審核
傑夫·弗里茨
傑弗裡·T·弗里茨
.NET 社群團隊首席專案經理
Jeff 同時也是 .NET 和 Visual Studio 團隊的首席專案經理。他是 .NET Conf 虛擬會議系列的執行製片人,並主持每週兩次的開發者直播節目“Fritz and Friends”,在節目中他會與觀眾一起探討技術並編寫程式碼。 Jeff 也為包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit 在內的微軟大型開發者活動撰寫研討會、簡報並策劃內容。
準備好開始了嗎?
Nuget 下載 17,012,929 | 版本: 2025.12 剛剛發布