PDF to MemoryStream C
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処理機能を実装してください。
最小限のワークフロー(5ステップ)
- MemoryStreamをPDFに変換するIronPDF C#ライブラリをダウンロードする。
- 既存のPDFを**`PdfDocument`**オブジェクトとして読み込みます。
- URLまたはHTML文字列/ファイルから新しいPDFをレンダリングする
- `Stream`メソッドと**`BinaryData`**プロパティを使用して、PDFをストリームに変換します。
- MVCやASP.NETを含むWebへのMemoryStreamの提供
PDFをメモリに保存するにはどうすればよいですか?
IronPdf.PdfDocument は、次の 2 つの方法のいずれかでメモリに直接保存できます。
IronPdf.PdfDocument.Streamは PDF をSystem.IO.MemoryStreamとしてエクスポートします。IronPdf.PdfDocument.BinaryDataPDF をバイト配列としてエクスポートします (byte[])
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;
Imports IronPdf
Imports System.IO
Private renderer = New ChromePdfRenderer()
' Convert the URL into PDF
Private pdf As PdfDocument = renderer.RenderUrlAsPdf("https://ironpdf.com/")
' Export PDF as Stream
Private pdfAsStream As MemoryStream = pdf.Stream
' Export PDF as Byte Array
Private pdfAsByte() As Byte = pdf.BinaryData
既存の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;
Imports IronPdf
Imports System.IO
' Load PDF from byte array
Dim pdfBytes As Byte() = File.ReadAllBytes("existing.pdf")
Dim pdfFromBytes As PdfDocument = PdfDocument.FromFile(New MemoryStream(pdfBytes))
' Or directly from a MemoryStream
Dim memoryStream As New MemoryStream(pdfBytes)
Dim pdfFromStream As PdfDocument = PdfDocument.FromFile(memoryStream)
' Modify the PDF (add watermark, headers, etc.)
' Then export back to memory
Dim modifiedPdfBytes As Byte() = pdfFromStream.BinaryData
高度なメモリ ストリーム操作
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;
Imports IronPdf
Imports System.IO
Imports System.Collections.Generic
Imports System.Linq
' Create multiple PDFs in memory
Dim renderer As New ChromePdfRenderer()
Dim pdfStreams As New List(Of MemoryStream)()
' Generate multiple PDFs from HTML
Dim htmlTemplates As String() = {
"<h1>Report 1</h1><p>Content...</p>",
"<h1>Report 2</h1><p>Content...</p>"
}
For Each html As String In htmlTemplates
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
pdfStreams.Add(pdf.Stream)
Next
' Merge all PDFs in memory
Dim mergedPdf As PdfDocument = PdfDocument.Merge(pdfStreams.Select(Function(s) PdfDocument.FromFile(s)).ToList())
' Get the final merged PDF as a stream
Dim finalStream As MemoryStream = mergedPdf.Stream
メモリから 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"
};
}
Imports System.Web.Mvc
Imports System.IO
Public Function ExportPdf() As ActionResult
' Assume pdfAsStream is a MemoryStream containing PDF data
Dim pdfAsStream As New MemoryStream()
Return New FileStreamResult(pdfAsStream, "application/pdf") With {.FileDownloadName = "download.pdf"}
End Function
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");
}
Imports System.Web.Mvc
Imports IronPdf
Public Function GenerateReport(reportType As String) As ActionResult
Dim renderer As 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
Dim htmlContent As String = GetReportHtml(reportType)
Dim pdf As PdfDocument = 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")
End Function
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;
}
Imports System.IO
Imports System.Web
Public Class PdfHandler
Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
' Assume pdfAsStream is a MemoryStream containing PDF data
Dim pdfAsStream As New MemoryStream()
context.Response.Clear()
context.Response.ContentType = "application/octet-stream"
context.Response.OutputStream.Write(pdfAsStream.ToArray(), 0, CInt(pdfAsStream.Length))
context.Response.Flush()
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
最新 .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");
}
}
Imports Microsoft.AspNetCore.Mvc
Imports IronPdf
Imports System.Threading.Tasks
<ApiController>
<Route("api/[controller]")>
Public Class PdfController
Inherits ControllerBase
<HttpGet("generate")>
Public Async Function GeneratePdf() As Task(Of IActionResult)
Dim renderer As New ChromePdfRenderer()
' Render HTML to PDF asynchronously for better performance
Dim pdf As PdfDocument = Await renderer.RenderHtmlAsPdfAsync("<h1>Dynamic PDF</h1>")
' Return PDF as file stream
Return File(pdf.Stream, "application/pdf", "generated.pdf")
End Function
<HttpPost("convert")>
Public Async Function ConvertHtmlToPdf(<FromBody> htmlContent As String) As Task(Of IActionResult)
Dim renderer As New ChromePdfRenderer()
' Apply custom styling and rendering options
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
renderer.RenderingOptions.PrintHtmlBackgrounds = True
Dim pdf As PdfDocument = Await renderer.RenderHtmlAsPdfAsync(htmlContent)
' Stream directly to response without saving to disk
Return File(pdf.Stream, "application/pdf")
End Function
End Class
メモリ ストリーム管理のベスト プラクティス
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;
}
}
}
Imports System
Imports System.Threading.Tasks
' Example of proper resource management with caching
Public Class PdfService
Private ReadOnly _cache As IMemoryCache
Private ReadOnly _renderer As ChromePdfRenderer
Public Sub New(cache As IMemoryCache)
_cache = cache
_renderer = New ChromePdfRenderer()
End Sub
Public Async Function GetCachedPdfAsync(cacheKey As String, htmlContent As String) As Task(Of Byte())
' Try to get from cache first
Dim cachedPdf As Byte() = Nothing
If _cache.TryGetValue(cacheKey, cachedPdf) Then
Return cachedPdf
End If
' Generate PDF if not in cache
Using pdf = Await _renderer.RenderHtmlAsPdfAsync(htmlContent)
Dim pdfBytes As Byte() = pdf.BinaryData
' Cache for 10 minutes
_cache.Set(cacheKey, pdfBytes, TimeSpan.FromMinutes(10))
Return pdfBytes
End Using
End Function
End Class
これらのパターンに従い、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として取得できますので、クラウドベースのアプリケーションや高性能なシナリオに最適です。

