PDF 轉 MemoryStream C#

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

使用 IronPDF 的 Stream 屬性或 BinaryData 屬性,在 C# .NET 中將 PDF 轉換為 MemoryStream,無需存取檔案系統即可在記憶體中操作 PDF,適用於網頁應用程式和資料處理。

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

我們可以在 C# .NET 中將 PDF 匯出至 MemoryStream,而不需碰觸檔案系統。 這可以透過 System.IO .NET 命名空間內的 MemoryStream 物件來實現。 當您開發基於雲端的應用程式、使用 Azure Blob Storage 工作,或需要在記憶體中處理 PDF 以優化效能時,這種方法尤其有用。

在記憶體串流中處理 PDF 的能力對於現代網路應用程式來說是不可或缺的,尤其是當 部署到 Azure 或其他雲端平台時,檔案系統存取可能會受到限制,或是您想要避免磁碟 I/O 作業的開銷時。 IronPDF 利用其內建的串流處理方法,讓這個過程變得簡單直接。

快速入門:將 PDF 轉換為 MemoryStream

使用 IronPDF 的 API 將您的 PDF 檔案轉換為 MemoryStream。 本指南可幫助開發人員開始載入 PDF 並將其匯出至 MemoryStream,以便整合至 .NET 應用程式。 按照此範例在 C# 中實作 PDF 處理功能。

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

  1. 使用 NuGet 套件管理器安裝 IronPDF

    PM > Install-Package IronPdf

  2. 複製並運行這段程式碼。

    using var stream = new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello Stream!</h1>").Stream;
  3. 部署到您的生產環境進行測試

    立即開始在您的專案中使用 IronPDF,免費試用!
    arrow pointer

如何將 PDF 儲存到記憶體? <!--說明:說明程式碼概念的圖表或截圖 --> `IronPdf.PdfDocument`可以透過以下兩種方式之一直接儲存到記憶體中: [`IronPdf.PdfDocument.Stream`](/object-reference/api/IronPdf.PdfDocument.html)將 PDF 匯出為`System.IO.MemoryStream` - [`IronPdf.PdfDocument.BinaryData`](/object-reference/api/IronPdf.PdfDocument.html)將 PDF 匯出為位元組數組 ( `byte[]` ) 選擇使用 Stream 或 BinaryData 取決於您的特定使用情況。 當您需要使用以流為基礎的 API,或是想要維持與其他 .NET 流作業的相容性時,MemoryStream 是您的理想選擇。 BinaryData 作為一個位元組陣列,非常適合需要將 PDF 資料儲存在資料庫、快取儲存在記憶體或透過網路傳輸的場景。 ```csharp :path=/static-assets/pdf/content-code-examples/how-to/pdf-to-memory-stream-to-stream.cs ``` ### 處理現有PDF文件 當您需要[從記憶體載入 PDF 檔案](https://ironpdf.com/how-to/pdf-memory-stream/)時,IronPDF 會提供方便的方法來處理已存在記憶體中的 PDF 檔案: ```csharp using IronPdf; using System.IO; // Load PDF from byte array byte[] pdfBytes = File.ReadAllBytes("existing.pdf"); PdfDocument pdfFromBytes = PdfDocument.FromFile(new MemoryStream(pdfBytes)); // Or directly from a MemoryStream MemoryStream memoryStream = new MemoryStream(pdfBytes); PdfDocument pdfFromStream = PdfDocument.FromFile(memoryStream); // Modify the PDF (add watermark, headers, etc.) // Then export back to memory byte[] modifiedPdfBytes = pdfFromStream.BinaryData; ``` ### 進階記憶體串流作業 對於更複雜的情況,例如當您[從 HTML 字串建立 PDF](https://ironpdf.com/how-to/html-string-to-pdf/) 或[將多張圖片轉換為 PDF](https://ironpdf.com/how-to/image-to-pdf/) 時,您可以結合多個操作,同時將所有內容保留在記憶體中: ```csharp using IronPdf; using System.IO; using System.Collections.Generic; // Create multiple PDFs in memory var renderer = new ChromePdfRenderer(); List pdfStreams = new List(); // Generate multiple PDFs from HTML string[] htmlTemplates = { "

Content...

", "

Content...

" }; foreach (var html in htmlTemplates) { PdfDocument pdf = renderer.RenderHtmlAsPdf(html); pdfStreams.Add(pdf.Stream); } // Merge all PDFs in memory PdfDocument mergedPdf = PdfDocument.Merge(pdfStreams.Select(s => PdfDocument.FromFile(s)).ToList()); // Get the final merged PDF as a stream MemoryStream finalStream = mergedPdf.Stream; ```

我該如何從記憶體提供 PDF 到網頁? --> <!--說明:顯示程式碼執行輸出或結果的截圖 --> 要在網路上提供或匯出 PDF 文件,需要將 PDF 文件作為二進位資料而不是 HTML 發送。 您可以在此 [ 指南中找到更多有關以 C# 匯出和儲存 PDF 文件的資訊](https://ironpdf.com/how-to/export-save-pdf-csharp/)。 在使用 Web 應用程式時,尤其是在 [ASP.NET MVC 環境](https://ironpdf.com/how-to/cshtml-to-pdf-mvc-core/)中,從記憶體串流提供 PDF 具有多項優點,包括更佳的效能和降低伺服器磁碟使用量。 以下是一個 MVC 和 ASP.NET 的簡單範例:

如何使用 MVC 匯出 PDF? 下面程式碼片段中的流是從 IronPDF 擷取到的二進位資料。 回應的 MIME 類型為"application/pdf",檔案名稱指定為"download.pdf"。 此方法可與現代 MVC 應用程式完美搭配,並可整合至您現有的控制器中。 ```csharp using System.Web.Mvc; using System.IO; public ActionResult ExportPdf() { // Assume pdfAsStream is a MemoryStream containing PDF data MemoryStream pdfAsStream = new MemoryStream(); return new FileStreamResult(pdfAsStream, "application/pdf") { FileDownloadName = "download.pdf" }; } ``` 適用於更進階的情況,例如當您[使用 Razor Pages](https://ironpdf.com/how-to/cshtml-to-pdf-razor/) 工作或需要實作自訂標頭: ```csharp using System.Web.Mvc; using IronPdf; public ActionResult GenerateReport(string reportType) { var renderer = new ChromePdfRenderer(); // Configure rendering options for better output renderer.RenderingOptions.MarginTop = 50; renderer.RenderingOptions.MarginBottom = 50; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait; // Generate PDF based on report type string htmlContent = GetReportHtml(reportType); PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent); // Add metadata pdf.MetaData.Author = "Your Application"; pdf.MetaData.Title = $"{reportType} Report"; // Return as downloadable file return File(pdf.Stream, "application/pdf", $"{reportType}_Report_{DateTime.Now:yyyyMMdd}.pdf"); } ```

如何使用 ASP.NET 匯出 PDF? 與上面的例子類似,該流是從 IronPDF 檢索到的二進位資料。 然後配置並刷新回應,以確保將其發送給客戶端。 此方法對於 [ASP.NET Web Forms 應用程式](https://ironpdf.com/how-to/aspx-to-pdf/)或需要更多 HTTP 回應控制時特別有用。 ```csharp using System.IO; using System.Web; public class PdfHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { // Assume pdfAsStream is a MemoryStream containing PDF data MemoryStream pdfAsStream = new MemoryStream(); context.Response.Clear(); context.Response.ContentType = "application/octet-stream"; context.Response.OutputStream.Write(pdfAsStream.ToArray(), 0, (int)pdfAsStream.Length); context.Response.Flush(); } public bool IsReusable => false; } ``` 對於現代的 ASP.NET Core 應用程式而言,這個過程甚至更加簡化: ```csharp using Microsoft.AspNetCore.Mvc; using IronPdf; using System.Threading.Tasks; [ApiController] [Route("api/[controller]")] public class PdfController : ControllerBase { [HttpGet("generate")] public async Task GeneratePdf() { var renderer = new ChromePdfRenderer(); // Render HTML to PDF asynchronously for better performance PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(""); // Return PDF as file stream return File(pdf.Stream, "application/pdf", "generated.pdf"); } [HttpPost("convert")] public async Task ConvertHtmlToPdf([FromBody] string htmlContent) { var renderer = new ChromePdfRenderer(); // Apply custom styling and rendering options renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print; renderer.RenderingOptions.PrintHtmlBackgrounds = true; PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(htmlContent); // Stream directly to response without saving to disk return File(pdf.Stream, "application/pdf"); } } ``` ### 記憶體串流管理的最佳實務 在 Web 應用程式中使用 PDF 記憶體串流時,請考慮這些最佳實務: 1.**正確丟棄資源**:請務必使用 `using` 語句或明確處置 `MemoryStream` 物件,以防止記憶體洩漏。 2.**同步操作**:為了獲得更好的擴充性,尤其是當 [ 使用 async 作業](https://ironpdf.com/how-to/async/)時,請在可用的情況下使用異步方法。 3.**流大小考慮因素**:對於大型 PDF,請考慮實施串流回應,以避免一次將整個 PDF 載入記憶體。 4.**快取**:對於頻繁存取的 PDF,可考慮在記憶體中快取位元組陣列,或使用分散式快取來改善效能。 ```csharp // Example of proper resource management with caching public class PdfService { private readonly IMemoryCache _cache; private readonly ChromePdfRenderer _renderer; public PdfService(IMemoryCache cache) { _cache = cache; _renderer = new ChromePdfRenderer(); } public async Task GetCachedPdfAsync(string cacheKey, string htmlContent) { // Try to get from cache first if (_cache.TryGetValue(cacheKey, out byte[] cachedPdf)) { return cachedPdf; } // Generate PDF if not in cache using (var pdf = await _renderer.RenderHtmlAsPdfAsync(htmlContent)) { byte[] pdfBytes = pdf.BinaryData; // Cache for 10 minutes _cache.Set(cacheKey, pdfBytes, TimeSpan.FromMinutes(10)); return pdfBytes; } } } ``` 透過遵循這些模式並利用 IronPDF 的記憶體串流功能,您可以建立高效率、可擴充的 Web 應用程式,在不依賴檔案系統作業的情況下處理 PDF 的產生與傳送。 當[部署到 AWS 等雲端平台](E/get-started/aws/)或在容器化環境中工作時,這種方法尤其有益。

常見問題解答

如何在 C# 中將 PDF 轉換為 MemoryStream?

IronPDF 提供了兩種將 PDF 轉換為記憶體的主要方式:使用 Stream 屬性以 System.IO.MemoryStream 匯出,或使用 BinaryData 屬性以 byte array 匯出。只需創建或載入一個 PdfDocument 並訪問這些屬性,就可以在不觸及檔案系統的情況下在記憶體中處理 PDF。

在記憶體中處理 PDF 而非檔案有什麼好處?

使用 IronPDF 在記憶體中處理 PDF 有幾個優點:避免磁碟 I/O 作業,提高效能;與 Azure 等檔案系統存取可能受限的雲端平台有更好的相容性;不將敏感的 PDF 儲存在磁碟上,提高安全性;與 Web 應用程式和 API 無縫整合。

我可以從記憶體串流載入現有的 PDF 嗎?

是的,IronPDF允許您使用PdfDocument.FromStream()方法從記憶體中載入PDF,對於MemoryStream輸入或PdfDocument.FromBytes()方法對於位元組輸入。這使您能夠處理從 Web 請求、資料庫或其他基於記憶體的來源接收的 PDF,而無需將其保存到磁盤。

如何在 ASP.NET 或 MVC 應用程式中從記憶體提供 PDF?

IronPDF 可讓您輕鬆地在 Web 應用程式中直接從記憶體提供 PDF。您可以使用 Stream 屬性或 BinaryData 屬性來取得 PDF 內容,並在控制器動作中將其作為 FileResult 或 FileContentResult 傳回,非常適合在 ASP.NET Core 或 MVC 應用程式中即時產生和提供 PDF。

是否可以在記憶體中直接將 HTML 呈現為 PDF?

是的,IronPDF 的 ChromePdfRenderer 可以直接將 HTML 內容渲染至 MemoryStream,而無需建立臨時檔案。您可以使用 RenderHtmlAsPdf() 方法,並立即存取 Stream 屬性,以 MemoryStream 的方式取得 PDF,因此非常適合雲端應用程式和高效能的使用情境。

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

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

準備好開始了嗎?
Nuget 下載 17,012,929 | 版本: 2025.12 剛剛發布