PDF to 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 に変換し、Web アプリケーションやデータ処理でファイルシステムにアクセスすることなくインメモリー PDF 操作を可能にします。

ファイルシステムに触れることなく、C# .NETでPDFをMemoryStreamにエクスポートできます。 これは、System.IO .NET名前空間内に存在する MemoryStream オブジェクトを通じて可能になります。 このアプローチは、クラウドベースのアプリケーションを開発するとき、Azure Blob Storageで作業するとき、またはパフォーマンスの最適化のためにPDFをメモリ内で処理する必要があるときに特に役立ちます。

特に、ファイルシステムへのアクセスが制限されている可能性のあるAzureやその他のクラウドプラットフォームにデプロイする場合や、ディスクI/O操作のオーバーヘッドを避けたい場合などです。 IronPdfはストリーム操作のための組み込みメソッドでこのプロセスを簡単にします。

クイックスタート: PDF を MemoryStream に変換する

IronPDFのAPIを使ってPDFファイルをMemoryStreamに変換してください。 このガイドは、開発者がPDFをロードし、.NETアプリケーションに統合するためにMemoryStreamにエクスポートすることから始めるのに役立ちます。 この例に従って、C#でPDF処理機能を実装してください。

  1. IronPDF をNuGetパッケージマネージャでインストール

    PM > Install-Package IronPdf
  2. このコード スニペットをコピーして実行します。

    using var stream = new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello Stream!</h1>").Stream;
  3. 実際の環境でテストするためにデプロイする

    今日プロジェクトで IronPDF を使い始めましょう無料トライアル

    arrow pointer

PDFをメモリに保存するにはどうすればよいですか?

IronPdf.PdfDocument は、次の 2 つの方法のいずれかでメモリに直接保存できます。

StreamとBinaryDataのどちらを使用するかは、特定のユースケースによります。 MemoryStreamは、ストリームベースのAPIを使用する必要がある場合や、他 for .NETストリーム操作との互換性を維持したい場合に最適です。 バイト配列としてのBinaryDataは、PDFデータをデータベースに格納したり、メモリにキャッシュしたり、ネットワーク経由で送信したりする必要があるシナリオに最適です。

:path=/static-assets/pdf/content-code-examples/how-to/pdf-to-memory-stream-to-stream.cs
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;
$vbLabelText   $csharpLabel

既存のPDFの操作

メモリからPDFをロードする必要がある場合、IronPDFはすでにメモリにあるPDFを扱う便利な方法を提供します:

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

高度なメモリ ストリーム操作

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

// Get the final merged PDF as a stream
MemoryStream finalStream = mergedPdf.Stream;
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 => 
    PdfDocument.FromFile(s)).ToList());

// Get the final merged PDF as a stream
MemoryStream finalStream = mergedPdf.Stream;
$vbLabelText   $csharpLabel

メモリから Web に PDF を提供するにはどうすればよいですか?

Web 上で PDF を提供またはエクスポートするには、HTML の代わりにバイナリデータとして PDF ファイルを送信する必要があります。 このC#でのPDFドキュメントのエクスポートと保存に関するガイドに、より詳しい情報があります。 Webアプリケーション、特に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"
    };
}
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"
    };
}
$vbLabelText   $csharpLabel

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

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

最新 for .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");
    }
}
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");
    }
}
$vbLabelText   $csharpLabel

メモリ ストリーム管理のベスト プラクティス

WebアプリケーションでPDFメモリストリームを扱う場合は、以下のベストプラクティスを考慮してください:

1.リソースを適切に破棄する: メモリ リークを防ぐために、常に using ステートメントを使用するか、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;
        }
    }
}
// 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;
        }
    }
}
$vbLabelText   $csharpLabel

これらのパターンに従い、IronPdfのメモリーストリーム機能を利用することで、ファイルシステム操作に依存することなくPDFの生成と配信を行う効率的でスケーラブルなWebアプリケーションを構築することができます。 このアプローチは、AWSのようなクラウドプラットフォームにデプロイする場合や、コンテナ化された環境で作業する場合に特に有益です。

よくある質問

C#でPDFをMemoryStreamに変換するには?

IronPDFはPDFをメモリに変換する2つの主な方法を提供します: Streamプロパティを使ってSystem.IO.MemoryStreamとしてエクスポートするか、BinaryDataプロパティを使ってバイト配列としてエクスポートします。PdfDocumentを作成またはロードし、これらのプロパティにアクセスするだけで、ファイルシステムに触れることなくメモリ上のPDFを扱うことができます。

ファイルではなくメモリ上でPDFを扱う利点は何ですか?

IronPDFを使用してPDFをメモリ上で扱うことはいくつかの利点を提供します: ディスクI/Oオペレーションを回避することによるパフォーマンスの向上、ファイルシステムへのアクセスが制限されているAzureのようなクラウドプラットフォームとの互換性の向上、機密PDFをディスク上に保存しないことによるセキュリティの向上、ウェブアプリケーションやAPIとのシームレスな統合。

既存のPDFをメモリストリームから読み込むことはできますか?

はい、IronPDFではメモリーストリーム入力の場合はPdfDocument.FromStream()メソッドを、バイト配列入力の場合はPdfDocument.FromBytes()を使用してメモリーからPDFをロードすることができます。これにより、ウェブリクエストやデータベース、その他のメモリベースのソースから受け取ったPDFをディスクに保存せずに扱うことができます。

ASP.NETやMVCアプリケーションでメモリからPDFを提供するには?

IronPDFはウェブアプリケーションでメモリから直接PDFを提供することを容易にします。StreamプロパティまたはBinaryDataプロパティを使用してPDFコンテンツを取得し、コントローラアクションでFileResultまたはFileContentResultとして返すことができ、ASP.NET CoreまたはMVCアプリケーションでPDFをオンザフライで生成して提供するのに最適です。

メモリ内で直接HTMLをPDFにレンダリングすることは可能ですか?

はい、IronPDFのChromePdfRendererはテンポラリファイルを作成せずにHTMLコンテンツを直接MemoryStreamにレンダリングできます。RenderHtmlAsPdf()メソッドを使用し、すぐにStreamプロパティにアクセスしてPDFをMemoryStreamとして取得できますので、クラウドベースのアプリケーションや高性能なシナリオに最適です。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

準備はできましたか?
Nuget ダウンロード 17,803,474 | バージョン: 2026.3 リリース
Still Scrolling Icon

まだスクロールしていますか?

すぐに証拠が欲しいですか? PM > Install-Package IronPdf
サンプルを実行するHTML が PDF に変換されるのを確認します。