IRONSOFTWAREHOME

PDF to MemoryStream C#

Curtis Chau
Curtis Chau
Updated: 2026年6月4日

使用IronPDF的BinaryData屬性,在C# .NET中將PDF轉換為MemoryStream,從而實現無需存取文件系統即可進行網頁應用程式和資料處理的PDF記憶體操作。

我們可以在C# .NET中導出PDF到MemoryStream而不觸碰文件系統。 這可以通過System.IO .NET命名空間中。 此方法在開發基於雲的應用程式、與Azure Blob Storage合作或需要在記憶體中處理PDF以優化性能時特別有用。

能夠在記憶體流中處理PDF對於現代網頁應用程式而言是必需的,特別是在部署到Azure或其他雲平台時,文件系統的存取可能會受到限制,或當您希望避免磁碟I/O操作的負擔時。 IronPDF使此流程變得簡單,因為它具有內建的流操作方法。

快速入門:將PDF轉換為MemoryStream

使用IronPDF的API將您的PDF文件轉換為MemoryStream。 本指南幫助開發者開始在.NET應用程式中載入PDF並將其導出到MemoryStream中。 按照此範例在C#中實施PDF處理功能。

  1. 1Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf

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

    using var stream = new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello Stream!</h1>").Stream;
    C#
  3. 3部署以在您的實時環境中測試

    今天就開始在您的專案中使用IronPDF,透過免費試用
    arrow pointer

如何將PDF保存到記憶體?

可以通過兩種方式之一將IronPdf.PdfDocument直接保存到記憶體中:

選擇使用BinaryData取決於您的具體用例。 MemoryStream在需要使用基於流的API或希望與其他.NET流操作保持相容時最理想。 當您需要將PDF資料儲存在資料庫中、在記憶體中快取或通過網路傳輸時,BinaryData作為字節陣列是完美的。

using IronPdf;
using System.IO;

var renderer = new ChromePdfRenderer();

// Convert the URL into PDF
PdfDocument pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/");

// Export PDF as Stream
MemoryStream pdfAsStream = pdf.Stream;

// Export PDF as Byte Array
byte[] pdfAsByte = pdf.BinaryData;

處理現有的PDF

當您需要從記憶體中載入PDF時,IronPDF提供方便的方法來處理已經存在於記憶體中的PDF:

using IronPdf;
using System.IO;

// Load PDF from byte array
byte[] pdfBytes = File.ReadAllBytes("existing.pdf");
PdfDocument pdfFromBytes = new PdfDocument(pdfBytes);

// Or directly from a MemoryStream
MemoryStream memoryStream = new MemoryStream(pdfBytes);
PdfDocument pdfFromStream = new PdfDocument(memoryStream);

// Modify the PDF (add watermark, headers, etc.)
// Then export back to memory
byte[] modifiedPdfBytes = pdfFromStream.BinaryData;
C#

高級記憶體流操作

對於更複雜的場景,例如您正在從HTML字串建立PDF將多個圖像轉換為PDF時,您可以在保持所有操作在記憶體中的同時結合多個操作:

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

// Create multiple PDFs in memory
var renderer = new ChromePdfRenderer();
List<MemoryStream> pdfStreams = new List<MemoryStream>();

// Generate multiple PDFs from HTML
string[] htmlTemplates = { 
    "<h1>Report 1</h1><p>Content...</p>", 
    "<h1>Report 2</h1><p>Content...</p>" 
};

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 =>
    new PdfDocument(s)).ToList());

// Get the final merged PDF as a stream
MemoryStream finalStream = mergedPdf.Stream;
C#

我最喜歡的程式庫是IronPDF。它允許快速高效地操作PDF文件。它還有許多有價值的功能,例如導出到PDF/A格式和數位簽署PDF文件。

Milan Jovanovic

Microsoft MVP

查看案例研究

IronOCR意味著我們每年可以從手動處理中節省$40,000,同時提高生產力,釋放資源以進行高影響的任務。我會強烈推薦它。

Brent Matzelle

首席技術官,OPYN

查看案例研究

IronSuite在我們的運營中扮演著至關重要的角色。這些工具增加了包括建立平面圖和改善庫存管理在內的業務效率。

David Jones

首席軟體工程師,Agorus Build

查看案例研究

如何從記憶體將PDF提供給Web?

要在網頁上提供或導出PDF,您需要將PDF文件作為二進制資料而不是HTML發送。 您可以在此關於在C#中導出和保存PDF文件的指南中找到更多資訊。 在處理網頁應用程式時,特別是在ASP.NET MVC環境中,從記憶體流中提供PDF提供了若干優勢,包括更好的性能和減少伺服器磁碟使用。

以下是MVC和ASP.NET的快速範例:

如何使用MVC導出PDF?

下面程式碼片段中的流是從IronPDF檢索到的二進制資料。 響應的MIME型別是'application/pdf',指定文件名為'download.pdf'。 這種方法可以無縫地與現代MVC應用程式配合使用,並可以整合到您現有的控制器中。

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或需要實施自定義標頭時:

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應用程式或當您需要更多地控制HTTP響應時。

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應用程式,過程甚至更為簡化:

using Microsoft.AspNetCore.Mvc;
using IronPdf;
using System.Threading.Tasks;

[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public async Task<IActionResult> GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        
        // Render HTML to PDF asynchronously for better performance
        PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Dynamic PDF</h1>");
        
        // Return PDF as file stream
        return File(pdf.Stream, "application/pdf", "generated.pdf");
    }
    
    [HttpPost("convert")]
    public async Task<IActionResult> 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");
    }
}

記憶體流管理最佳實踐

在網頁應用程式中處理PDF記憶體流時,請考慮以下最佳實踐:

  1. 正確處理資源:始終使用MemoryStream物件以防止記憶體泄漏。

  2. 異步操作:為了更好的可擴展性,特別是在進行異步操作時,當可用時請使用異步方法。

  3. 流大小考量:對於大PDF,考慮實施流回應以避免一次將整個PDF載入到記憶體中。

  4. 快取:對於頻繁存取的PDF,考慮在記憶體中快取字節陣列或使用分佈式快取以提高性能。

// 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<byte[]> 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的記憶體流功能,您可以構建高效、可擴展的網頁應用程式,在不依賴文件系統操作的情況下處理PDF的生成和交付。 在部署到像AWS這樣的雲平台或在容器化環境中工作時,此方法特別有利。

常見問題

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

IronPDF提供兩種主要方法來將PDF轉換為記憶體:使用Stream屬性匯出為System.IO.MemoryStream,或使用BinaryData屬性匯出為字節陣列。只需建立或載入PdfDocument並存取這些屬性,即可在不觸碰檔案系統的情況下在記憶體中處理PDF。

使用記憶體中的PDF而非文件有什麼好處?

使用IronPDF在記憶體中處理PDF有多項優勢:通過避免磁碟I/O操作來提高性能,與Azure等雲端平台更好的相容性,因為文件系統存取可能受到限制,不將敏感PDF儲存到磁碟上提高了安全性,無縫整合到Web應用和API中。

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

可以。IronPDF允許您使用PdfDocument.FromStream()方法從記憶體流中載入PDF,或使用PdfDocument.FromBytes() 方法從字節陣列中載入PDF。這使您能夠處理從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屬性以將PDF作為MemoryStream獲取,非常適合雲端應用和高性能場景。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

準備開始了嗎?

Nuget Downloads 20,667,543版本:2026.7剛剛發布

立即獲取您的免費30天試用密鑰
不需要信用卡或建立賬戶
C# 用於PDF的NuGet程式庫
使用NuGet安裝

版本: 2026.7

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解決方案資源管理器,右鍵點選參考,管理NuGet包
  2. 選擇瀏覽並搜尋"IronPdf"
  3. 選擇套件並安裝
C# PDF DLL
下載DLL

版本: 2026.7

立即下載

或者點擊此處下載Windows安裝程式。

  1. 下載並解壓IronPDF到類似~/Libs的位置,位於您的解決方案目錄中
  2. 在Visual Studio解決方案資源管理器,右鍵點選參考。選擇瀏覽,"IronPdf.dll"

授權從$999

有問題嗎?聯絡我們的開發團隊。

Key in blue circle

立即免費取得 30 天試用金鑰

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立