C# と IronPDFを使用して.NET CoreでHTMLをPDFに変換する
HTMLから直接高忠実度のPDFを生成することは、現代 for .NETアプリケーションにおける日常的な要件です。レポート、請求書、チケットなど、ウェブUIに合ったピクセルパーフェクトな出力が必要です。 IronPDFは、HTML、Razorビュー、フルウェブサイトを標準準拠のPDFドキュメントにレンダリングするための単一のC# APIを公開することで、このワークフローを簡素化します。 このガイドの終わりまでに、開発者はASP.NET CoreプロジェクトでURL、生のHTML、またはMVCビューを変換し、同じコードをWindows、Linux、Docker、またはサーバーレス環境にデプロイできるようになります。
クイックスタート: .NET Coreで HTML から PDF を作成する
IronPDFライブラリを使用して、.NET CoreでHTMLをPDFに簡単に変換します。 このガイドは、HTMLコンテンツを高品質のPDFに最小限のコードでレンダリングする簡単な例を提供します。 アプリケーションにPDF作成を容易に統合することを求める開発者に最適です。
最小限のワークフロー(5ステップ)
IronPDFNuGetパッケージをインストールする。RenderUrlAsPdfでウェブサイトのURLを変換するRenderHtmlAsPdfで生のHTMLをレンダリングします。- MVCビューをPDFにエクスポートする
- 用紙サイズ、余白、ヘッダー、フッターの調整
クイックスタートチェックリスト
- インストール –
Install-Package IronPdf - URLをレンダリング –
ChromePdfRenderer.RenderUrlAsPdf() - 生のHTMLをレンダリング –
ChromePdfRenderer.RenderHtmlAsPdf() - Razorビューをエクスポート –
ChromePdfRenderer.RenderHtmlAsPdfAsync() - 出力を微調整 –
ChromePdfRenderer.RenderingOptionsを活用
このチュートリアルでカバーする内容
- URL、HTML文字列、およびRazorビューの変換
- 紙、マージン、およびメディアタイプの構成
- クロスプラットフォーム展開(Windows、Linux、Docker)
- 後処理:マージ、透かし、パスワード保護、そしてデジタル署名PDF
- エンドトゥーエンドのサンプル: チケット予約MVCアプリ
PDFライブラリを.NET Coreにインストールするにはどうすればいいですか?
.NET 8プロジェクトでは、ライブラリをインストールするのは1行だけで、.NET 9 プレビューや今後 for .NET 10リリースとも前方互換性を維持します。 NuGetのパッケージマネージャコンソールを使用し、パッケージマネージャはWindows、Linux、Docker、およびサーバーレスターゲットに自動的にすべての依存関係を解決します。
PM> Install-Package IronPdf # .NET 8 LTS and higher
PM> Install-Package IronPdf # .NET 8 LTS and higher
dotnet add package IronPdfで機能します。インストールが完了したら、任意の公開URLを変換することで、すべてが正常に接続されていることを確認します。
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-3.cs
public class ClientModel
{
[Required]
public string Name { get; set; }
[Required]
public string Phone { get; set; }
[Required]
public string Email { get; set; }
}
Public Class ClientModel
<Required>
Public Property Name() As String
<Required>
Public Property Phone() As String
<Required>
Public Property Email() As String
End Class
仕組み
ChromePdfRendererはサンドボックス化されたChromiumインスタンスをバックグラウンドで起動し、別途Chromeのインストールは不要です。RenderUrlAsPdfは完全にレンダリングされたDOMをキャプチャして、JavaScriptで駆動されるコンテンツ、CSSメディアクエリ、およびフォントを含みます。- 結果として生成される
PdfDocumentは、後ほどこのチュートリアルで紹介する能力で、出力のマージ、パスワード保護、またはデジタル署名が可能です。
デプロイの微妙な問題についての詳細は(Azure App Service、AWS Lambda、オンプレミスLinux)、専用のインストールガイド および 高度なNuGet設定ページ をご覧ください。 DockerおよびK8sクラスター用の内部CI/CDのヒントは、Dockerデプロイのベストプラクティスでカバーされています。
.NET CoreサービスがライブのウェブサイトURLをPDFに変換するにはどうすればいいですか?
RenderUrlAsPdf への単一の呼び出しは十分です:公開URLを渡すだけで、IronPDFが完全にレンダリングされた、標準に準拠したPDFを返します。 以下のコードは.NET 8 LTSにターゲットを絞り、.NET 9 プレビューや2025年のリリース予定 for .NET 10にも変更なくコンパイルされます。
ステップバイステップの例
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-4.cs
public class ClientServices
{
private static ClientModel _clientModel;
public static void AddClient(ClientModel clientModel)
{
_clientModel = clientModel;
}
public static ClientModel GetClient()
{
return _clientModel;
}
}
Public Class ClientServices
Private Shared _clientModel As ClientModel
Public Shared Sub AddClient(ByVal clientModel As ClientModel)
_clientModel = clientModel
End Sub
Public Shared Function GetClient() As ClientModel
Return _clientModel
End Function
End Class
なぜこれが動作するのか
ChromePdfRendererはサンドボックス化されたChromiumインスタンスを起動し、システムのChrome依存を避けて、Dockerイメージをスリムに保ちます。RenderUrlAsPdfはDOMとJavaScriptが完了するのを待ってからスナップショットを撮るので、シングルページアプリが正しくレンダリングされます。CssMediaTypeを Print に設定することで、エンジンに印刷特有のルールを使用して、ブラウザの 印刷 → PDFとして保存 出力を一致させることを指示します。- 結果として生成される
PdfDocumentは暗号化されたり、デジタル署名が行われたり、マージされたり、ラスタライズできます—これらの能力は後のセクションで説明されています。
renderer.LoggingOptions.DebugMode = true を有効にして、レンダリング中にライブのDevToolsを検査するためにヘッドレスChromeデバッグガイドを参照してください。関連リソース
-APIリファレンス– ChromePdfRenderer.RenderUrlAsPdf
-APIリファレンス– PdfDocument.SaveAs
- チュートリアル – DockerコンテナにIronPDFをデプロイする
生のHTMLを.NET CoreでPDFに変換するにはどうすればいいですか?
HTML文字列またはRazorビューのレンダリングされたマークアップをChromePdfRenderer.RenderHtmlAsPdf に渡すと、瞬時に標準に準拠したPDFが生成されます。 このメソッドはIronPDFの組込みChromiumエンジンを起動するため、外部ブラウザやWebViewの依存関係は必要ありません。 以下に示す同じコードは、今日 for .NET 8 LTSでコンパイルされ、2025年11月のリリース予定 for .NET 10と前方互換性を保ち続けます。
例 — HTMLフラグメントからPDFを生成する
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-5.cs
@model IronPdfMVCHelloWorld.Models.ClientModel
@{
ViewBag.Title = "Book Ticket";
}
<h2>Index</h2>
@using (Html.BeginForm())
{
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Phone, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Phone, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Phone, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-10 pull-right">
<button type="submit" value="Save" class="btn btn-sm">
<i class="fa fa-plus"></i>
<span>
Save
</span>
</button>
</div>
</div>
</div>
}
model ReadOnly Property () As IronPdfMVCHelloWorld.Models.ClientModel
ViewBag.Title = "Book Ticket"
End Property
'INSTANT VB TODO TASK: The following line could not be converted:
(Of h2) Index</h2> [using](Html.BeginForm())
If True Then
'INSTANT VB TODO TASK: The following line uses invalid syntax:
' <div class="form-horizontal"> @Html.ValidationSummary(True, "", New { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(model => model.Name, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Name, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Name, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Phone, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Phone, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Phone, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Email, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Email, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Email, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> <div class="col-md-10 pull-right"> <button type="submit" value="Save" class="btn btn-sm"> <i class="fa fa-plus"></i> <span> Save </span> </button> </div> </div> </div> }
コードが示すこと
- 埋め込みChromium — IronPDFはChromiumエンジンをバンドルしており、モダンなブラウザとHTML5、CSS3、JavaScriptの互換性を保証します。
- シングル依存関係 — 軽量NuGetインストールは、Windows、Linux、Docker、Azure / AWSをカバーし、追加のシステムライブラリが不要です。
- レンダリングオプション —
PaperSize,CssMediaType,RenderDelayはブラウザの印刷設定を反映しているので、PDFが画面レイアウトと一致します。 - 将来に対応 — APIの対象は.NET 8、.NET 9 STS、および今後登場する.NET 10で同様であるため、長期的なメンテナンスは最小限です。
- ポストプロセッシングフック —
PdfDocumentがマージ、パスワード保護、電子署名のヘルパーを公開します—それぞれ後のガイドで説明します。
さらに読む: ステップバイステップのHTML文字列からPDFへのチュートリアルと完全なChromePdfRenderer APIドキュメントを参照してください。
ASP .NET Core MVC ビューを PDF にエクスポートするにはどうすればいいですか?
IronPDFは、.cshtml と同様に完全に処理されたRazorビューをブラウザが行うのと同じ方法でレンダリングし、PdfDocument として結果をストリームします。 以下のワークフローはコントローラーのロジックをクリーンに保ち、ブラウザプラグインを必要とせず、.NET 8 LTS、.NET 9 プレビュー、2025 年 11 月の予定された .NET 10 リリースで機能します。
エンドツーエンド コントローラーの例
// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models; // TicketViewModel
public class TicketsController : Controller
{
private readonly ChromePdfRenderer _renderer;
public TicketsController()
{
_renderer = new ChromePdfRenderer
{
RenderingOptions =
{
PaperSize = PdfPaperSize.A5, // Compact ticket size
PaperOrientation = PdfPdfOrientation.Portrait,
FitToPaperWidth = true,
CssMediaType = PdfCssMediaType.Print,
Margins = new PdfMargins(5, 10, 5, 10) // mm
}
};
}
// GET /Tickets/Print/42
public async Task<IActionResult> Print(int id)
{
TicketViewModel vm = await _service.GetTicketAsync(id);
// 1. Render the Razor view to an HTML string
string html = await RazorTemplateEngine.RenderViewAsync(
HttpContext, "~/Views/Tickets/Print.cshtml", vm);
// 2. Convert HTML → PDF
using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);
// 3. Stream back as a file
return File(pdf.BinaryData, "application/pdf",
$"ticket-{id}.pdf");
}
}
// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models; // TicketViewModel
public class TicketsController : Controller
{
private readonly ChromePdfRenderer _renderer;
public TicketsController()
{
_renderer = new ChromePdfRenderer
{
RenderingOptions =
{
PaperSize = PdfPaperSize.A5, // Compact ticket size
PaperOrientation = PdfPdfOrientation.Portrait,
FitToPaperWidth = true,
CssMediaType = PdfCssMediaType.Print,
Margins = new PdfMargins(5, 10, 5, 10) // mm
}
};
}
// GET /Tickets/Print/42
public async Task<IActionResult> Print(int id)
{
TicketViewModel vm = await _service.GetTicketAsync(id);
// 1. Render the Razor view to an HTML string
string html = await RazorTemplateEngine.RenderViewAsync(
HttpContext, "~/Views/Tickets/Print.cshtml", vm);
// 2. Convert HTML → PDF
using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);
// 3. Stream back as a file
return File(pdf.BinaryData, "application/pdf",
$"ticket-{id}.pdf");
}
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports YourApp.Models ' TicketViewModel
Public Class TicketsController
Inherits Controller
Private ReadOnly _renderer As ChromePdfRenderer
Public Sub New()
_renderer = New ChromePdfRenderer With {
.RenderingOptions = New PdfRenderingOptions With {
.PaperSize = PdfPaperSize.A5, ' Compact ticket size
.PaperOrientation = PdfPdfOrientation.Portrait,
.FitToPaperWidth = True,
.CssMediaType = PdfCssMediaType.Print,
.Margins = New PdfMargins(5, 10, 5, 10) ' mm
}
}
End Sub
' GET /Tickets/Print/42
Public Async Function Print(id As Integer) As Task(Of IActionResult)
Dim vm As TicketViewModel = Await _service.GetTicketAsync(id)
' 1. Render the Razor view to an HTML string
Dim html As String = Await RazorTemplateEngine.RenderViewAsync(
HttpContext, "~/Views/Tickets/Print.cshtml", vm)
' 2. Convert HTML → PDF
Using pdf As PdfDocument = _renderer.RenderHtmlAsPdf(html)
' 3. Stream back as a file
Return File(pdf.BinaryData, "application/pdf", $"ticket-{id}.pdf")
End Using
End Function
End Class
このコードが示すこと
- 一時ファイルを使用しない — Razorビューはメモリ内でレンダリングされ、その後直接
RenderHtmlAsPdfに渡され、ディスクI/Oやtempフォルダのレース条件を回避します。 - チケットサイズの出力 —
PaperSize = A5と狭いマージンは自宅での印刷用チケットをコンパクトに保ちます。 - 一貫した印刷スタイル —
CssMediaType = Printはブラウザが使用する@media printCSSルールを適用します。 - バイナリストリーミング —
pdf.BinaryDataはファイルシステムに触れずにドキュメントをストリームします; - 再利用可能なレンダラー --ChromePdfRendererはコントローラごとに一度インスタンス化され、再利用され、プロセス生成オーバーヘッドを最小限に抑えます。 - 再利用可能なレンダラー —
ChromePdfRendererはコントローラーごとに一度だけインスタンス化され、その後再利用され、プロセスの発生オーバーヘッドを最小限に抑えます。
PaperSize, PaperOrientation, FitToPaperWidth です。
マージン、ヘッダー、フッター、ウォーターマーク。
レンダリング前に用紙サイズ、余白、ヘッダー、透かし、セキュリティを微調整するにはどうすればいいですか?
IronPDFは、用紙寸法、方向、ヘッダー&フッター、JavaScriptタイミング、透かしのすべての側面を制御する1つのChromePdfRenderOptionsオブジェクトを公開しています。暗号化、デジタル署名—すべて追加のブラウザプラグインなしで。
IronPDFは、すべての出力側面を制御する単一のChromePdfRenderOptionsオブジェクトを提供し、用紙のサイズ、向き、ヘッダー&フッター、JavaScriptのタイミング、ウォーターマーク、暗号化、電子署名を追加のブラウザプラグインなしで管理できます。
コードサンプル - 一度に複数のオプションを適用
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-7.cs
[HttpPost]
public ActionResult Index(ClientModel model)
{
if (ModelState.IsValid)
{
ClientServices.AddClient(model);
return RedirectToAction("TicketView");
}
return View(model);
}
<HttpPost>
Public Function Index(ByVal model As ClientModel) As ActionResult
If ModelState.IsValid Then
ClientServices.AddClient(model)
Return RedirectToAction("TicketView")
End If
Return View(model)
End Function
これらのオプションが重要な理由
CssMediaTypeはブラウザの印刷ダイアログを反映し、画面レイアウトとPDFがWindows、Linux、Dockerで一貫しています。- HTMLヘッダーおよびフッターは、Razorトークン、CSS、JavaScriptに対応しており、動的なページ番号やブランディングに便利です。
HtmlStampは、完全なHTML + CSS制御でブランド化されたウォーターマークの作成を単一行で可能にします。- デジタル署名 — コード内で暗号学的シールを直接追加し、法的真正性と改ざんされた証拠を維持します。
- デジタル署名 はコード内に暗号的シールを直接追加し、法的な真正性と改ざんの証拠を維持します。
ExtractAllTextやExtractAllImagesのような抽出ヘルパーは、分析が必要な場合にプロセスを逆に実行します。
クイックリファレンス - 人気の設定
PaperSize、PaperOrientation、Margins、CssMediaType、RenderDelay。
HtmlHeader、HtmlFooter、動的Razorプレースホルダ、ページ番号トークン
ウォーターマーク, Htmlスタンプ, 不透明度, 位置合わせ
SecurityOptions、SignAndStamp、所有者/ユーザーパスワード、証明書の封印
次のタスク: 複数のPDFをマージし、テキストと画像を抽出し、Dockerまたはサーバーレスにデプロイします。 ## PDF生成コードをLinuxおよびWindowsのDockerにどのようにデプロイできますか?
IronPDFは単一の自己完結型NuGetパッケージとして出荷され、ASP.NET Core(またはコンソール)アプリをWindowsとLinuxの両方でコンテナ化するのは簡単です。
IronPdf は単一の自己完結型NuGetパッケージとして出荷されているので、ASP.NET Core(またはコンソール)アプリをコンテナ化するのがWindowsとLinuxの両方で簡単です。 鍵のポイントは、公開されたバイナリをスリムなランタイムイメージにコピーし、Linux上でIronPDFが必要とする2つのネイティブライブラリ(libatk1.0-0)を追加することです。
####### ---------- stage 1 ----------
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["MyPdfApp.csproj", "."]
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish
####### ---------- stage 2 ----------
FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy
######## Install two native libs required by Chromium
RUN apt-get update && \
apt-get install -y --no-install-recommends libnss3 libatk1.0-0 && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyPdfApp.dll"]
mcr.microsoft.com/dotnet/aspnet:8.0-windowsservercore-ltsc2022に置き換えます—Chromium DLLがバンドルされているので追加のパッケージは不要です。- APIアクションは内部で
ChromePdfRenderer.RenderUrlAsPdfを呼び出し、ちょうどSection2のようにします。
docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com
docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com
- APIアクションは内部的にセクション2で行われたのと同じように
ChromePdfRenderer.RenderUrlAsPdfを呼び出します。 - IronPDF はコンテナ内でサンドボックス化された Chromium プロセスを起動します - ヘッドレスでレンダリングするため、X サーバーは不要です。
- 大きなレンダリングでもメモリフットプリントは 200 MB 以下に保たれます。
libatk1.0-0の両方が存在することを確認してください。 ### 内部リソース
- チュートリアル – DockerコンテナにIronPDFをデプロイする
- APIリファレンス –
ChromePdfRendererクラス - APIリファレンス –
ChromePdfRendererクラス
.NET Core で既存の PDF を開いたり、マージしたり、透かしを入れたり、コンテンツを抽出するにはどうすればよいですか?
IronPDFは、IronPDF、Adobe® Acrobat、または他社製品ツールで生成されたかどうかにかかわらず、すべてのPDFを第一級PdfDocumentオブジェクトとして扱い、これを開いて編集し、セキュリティを設定し、品質を損なわずに再度保存できます。 同じAPIサーフェスは、現在.NET 8 LTSで動作し、.NET 9プレビューと近日リリース予定 for .NET 10で変更なくコンパイルできます。
統一サンプル — 開く → マージ → 透かし → 抽出
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-10.cs
[HttpPost]
public ActionResult TicketView(TicketModel model)
{
IronPdf.Installation.TempFolderPath = $@"{Directory.GetParent}/irontemp/";
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
var html = this.RenderViewAsync("_TicketPdf", model);
var renderer = new IronPdf.ChromePdfRenderer();
using var pdf = renderer.RenderHtmlAsPdf(html.Result, @"wwwroot/css");
return File(pdf.Stream.ToArray(), "application/pdf");
}
<HttpPost>
Public Function TicketView(ByVal model As TicketModel) As ActionResult
IronPdf.Installation.TempFolderPath = $"{AddressOf Directory.GetParent}/irontemp/"
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
Dim html = Me.RenderViewAsync("_TicketPdf", model)
Dim renderer = New IronPdf.ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html.Result, "wwwroot/css")
Return File(pdf.Stream.ToArray(), "application/pdf")
End Function
これが重要な理由
- 開く&マージ –
PdfDocument.FromFileは暗号化ファイルを含む標準準拠のPDFを読み込み、PdfDocument.Mergeは単一の呼び出しで任意の数のドキュメントを連結します。 - ウォーターマーク –
HtmlStamp) は完全にスタイル付けされたHTML/CSSオーバーレイを埋め込み—ロゴ、QRコード、または斜めテキスト—選択されたページにラスタライズなしで配置します。 - コンテンツ抽出 –
ExtractAllTextとExtractAllImagesが生のUTF-8テキストまたはバイナリイメージストリームを引き出し、下流のアーカイブまたはAIパイプライン用に使用します。 - 電子署名対応 – 同じ
SignAndStampで封印され、RFC 3161準拠のハッシュを生成しISO 32000-2 デジタル署名要件に一致します。 - オープンスタンダード準拠 – IronPDFは元のPDF構造(フォント、レイヤー、XMPメタデータ)を保持するため、出力はAdobe® Readerやその他のISO 32000-1ビューワーと互換性があります。
- 将来に備える – このAPIは相互運用性アセンブリやWin32 GDI呼び出しを避けるため、コードはWindows、Linux、Docker、および今後 for .NET 10サーバーレスSKUでも変更なしで実行されます。
ページを分割、回転、または削除する必要がありますか? 詳細な操作については、ページレベルの編集チュートリアルをご覧ください。
.NET CoreでPDFを暗号化およびデジタル署名するにはどうすればよいですか?
IronPDFはドキュメントを2ステップで保護します: AESベースの暗号化(ユーザー/所有者パスワード + グラニュラー権限)および X.509デジタル署名 を使用して、ファイルを暗号ハッシュで封印します。 両方のAPIは同じPdfDocumentオブジェクトに住んでおり、ワークフローは今日 for .NET 8 LTSと将来 for .NET 9プレビューおよび.NET 10リリースでも変わらずコンパイルされます。
例 — 256ビットAESを適用し、印刷権をロックし、目に見える署名を追加する
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-11.cs
using System.IO;
using System.Threading.Tasks;
public static class ControllerExtensions
{
public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
{
if (string.IsNullOrEmpty(viewName))
{
viewName = controller.ControllerContext.ActionDescriptor.ActionName;
}
controller.ViewData.Model = model;
using (var writer = new StringWriter())
{
IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial);
if (viewResult.Success == false)
{
return $"A view with the name {viewName} could not be found";
}
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, new HtmlHelperOptions());
await viewResult.View.RenderAsync(viewContext);
return writer.GetStringBuilder().ToString();
}
}
}
Imports System.IO
Imports System.Threading.Tasks
Public Module ControllerExtensions
<System.Runtime.CompilerServices.Extension> _
Public Async Function RenderViewAsync(Of TModel)(ByVal controller As Controller, ByVal viewName As String, ByVal model As TModel, Optional ByVal As Boolean = False) As Task(Of String)
If String.IsNullOrEmpty(viewName) Then
viewName = controller.ControllerContext.ActionDescriptor.ActionName
End If
controller.ViewData.Model = model
Using writer = New StringWriter()
Dim viewEngine As IViewEngine = TryCast(controller.HttpContext.RequestServices.GetService(GetType(ICompositeViewEngine)), ICompositeViewEngine)
Dim viewResult As ViewEngineResult = viewEngine.FindView(controller.ControllerContext, viewName, Not partial)
If viewResult.Success = False Then
Return $"A view with the name {viewName} could not be found"
End If
Dim viewContext As New ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, New HtmlHelperOptions())
Await viewResult.View.RenderAsync(viewContext)
Return writer.GetStringBuilder().ToString()
End Using
End Function
End Module
舞台裏
- AES-256暗号化 — IronPDFは、権限のない開封、印刷、コピー&ペーストを防ぐNIST承認のAESキーでペイロードをラップします。
- 権限の細分化 —
AllowUserFormDataのようなプロパティはアクションごとの権利を切り替えます; 制限を有効にするには、所有者パスワードが必要です。 - 電子署名 —
SignAndStampはRFC 3161タイムスタンプと証明書チェーンを埋め込み、Adobe® Acrobatやその他のISO 32000-2ビューアによって認識される改ざん防止ハッシュを生成します。 - ワンストップAPI — 暗号化と署名の両方が同じ
PdfDocumentインスタンスを変更し、複数のファイルにわたる処理を回避し、内部フォント、レイヤー、およびメタデータを保持します。
location文字列がASCIIクリーンであることを確認してください。コアセキュリティ設定
PdfSecuritySettings → OwnerPassword, UserPassword, EncryptionAlgorithm, AllowUserPrinting.
PdfDocument.SignAndStamp - PFX パス、権限、場所、理由、タイムスタンプ
深堀りのための内部リソース
- チュートリアル – PDFをパスワード保護する
- 例 – PDFにデジタル署名する
- API reference –
PdfSecuritySettings
HTMLからPDFへのパフォーマンスを最適化し、スケールさせるにはどうすればよいですか?
IronPDFのChromiumエンジンは、すでに1秒未満の通常のハードウェア上のほとんどのページをレンダリングしますが、バッチレンダリングを有効にし、マルチスレッドを有効にし、ヘッドレスChromeオーバーヘッドを削減することでスループットを倍増させることができます。 - ChromePdfRendererはスレッドセーフです。単一のインスタンスがデッドロックせずに数十の同時タスクをサービスできます。
Parallel.ForEachはすべてのCPUコアを最大限に活用します。典型的なサーバーでは単一スレッドループと比較して4~6倍のスループットが得られます。
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-12.cs
IronPdf.License.LicenseKey = "YourLicenseKey";
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Set rendering options
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Portrait;
renderer.RenderHtmlFileAsPdf(@"testFile.html").SaveAs("GeneratedFile.pdf");
Imports IronPdf
License.LicenseKey = "YourLicenseKey"
Dim renderer As New ChromePdfRenderer()
' Set rendering options
renderer.RenderingOptions.PaperSize = Rendering.PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = Rendering.PdfPaperOrientation.Portrait
renderer.RenderHtmlFileAsPdf("testFile.html").SaveAs("GeneratedFile.pdf")
ChromePdfRendererがスレッドセーフです; 単一のインスタンスは、デッドロックなしで数十の同時タスクに対応できます。Parallel.ForEachがすべてのCPUコアを飽和させます; 通常のサーバーでは、シングルスレッドループと比較して4~6倍のスループット向上が見られます。 いずれかのライブラリが不足していると、Dockerログに"libnss3.so not found"エラーとして現れます。
2. ヘッドレスChromeの起動コストを削減する
IronPDF は独自の Chromium ビルドを出荷しますが、レンダリングごとに小さな起動税が発生します。 プーリングが役立ち、 Linux コンテナーには 2 つのネイティブ ライブラリが含まれている必要があります。
RUN apt-get update && \
apt-get install -y --no-install-recommends libnss3 libatk1.0-0
いずれかのライブラリが欠けていると、Dockerログにlibnss3.so not foundエラーが表示されます。
推奨Chromeフラグ(IronPDFによって自動的に適用)には、コンテナ内のメモリおよびルートユーザー問題を軽減するために--no-sandboxが含まれます。
3. RenderDelay またはWaitForで遅延JavaScriptを待つ
DOMContentLoadedの後にカウンターをアニメートしたりデータを取得するページには短い遅延が必要な場合があります:
renderer.RenderingOptions.RenderDelay = 200; // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
renderer.RenderingOptions.RenderDelay = 200; // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
renderer.RenderingOptions.RenderDelay = 200 ' ms
' OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
カスタムプロミスやDOMポーリングのための専用のWaitForチュートリアルを参照してください。
4. 1つのリクエストのためのデバッグログを有効にする
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-15.cs
IronPdf.License.LicenseKey = "YourLicenseKey";
PdfDocument pdf = PdfDocument.FromFile("1.pdf");
PdfDocument pdf2 = PdfDocument.FromFile("2.pdf");
pdf.AppendPdf(pdf2);
pdf.SaveAs("appendedFile.pdf");
IronPdf.License.LicenseKey = "YourLicenseKey"
Dim pdf As PdfDocument = PdfDocument.FromFile("1.pdf")
Dim pdf2 As PdfDocument = PdfDocument.FromFile("2.pdf")
pdf.AppendPdf(pdf2)
pdf.SaveAs("appendedFile.pdf")
ライブDevToolsトレースは、欠けているフォント、404画像、およびコードの再コンパイルを必要としないタイミングイベントを明らかにします。
5. 再レンダリングの代わりにテンプレートPDFを再利用する
請求書の実行については、プレースホルダーとして[[name]]を使用するテンプレートPDFを作成し、複雑なHTMLを再構築する代わりにテキストの置換を行います。 それは10倍速く、メモリ的にも軽いです。
クイックチューニングチェックリスト
Parallel.ForEach、async/await、単一のChromePdfRendererを再利用します。
aspnet:8.0-jammy; install libnss3 + libatk1.0-0; flags --no-sandbox, --disable-gpu を使用してください。
RenderDelay、WaitFor()、DevTools のタイムラインを記録し、SPA のハイドレーションを遅くします。
さらなる読み物
- 方法 – 非同期/マルチスレッドでPDFを生成する
- トラブルシューティング – パフォーマンスアシスタンスセンター
- 例 – スレッド化レンダリングデモ
無料トライアルをダウンロードし、ライセンスを選び、専門のサポートを受けられる場所はどこですか?
30日間のトライアルキーは、Start Free Trialフォームから即座に発行され、透かしなしでHTML-to-PDF、デジタル署名、暗号化を含むすべての機能を解除します。
ライブラリを評価した後、永久的なデベロッパー、デプロイ、またはエンタープライズライセンスを選択してください; 各プランは無料の小規模アップデートと開発/ステージング/本番使用権利、および30日間の返金保証を含みます。 鍵を適用するのはコードの一行で(IronPdf.License.LicenseKey = "YOUR-KEY";)、CI/CDパイプラインでの自動化が可能です。
包括的なドキュメント—クイックスタートガイド、APIリファレンス、およびチュートリアルビデオ—はドキュメントポータルにあり、すべて for .NETリリースに合わせて更新されます。
エンジニアリングの質問はシカゴに拠点を置くサポートチームから、ライブチャット、メール、または電話で1営業日以内に応答されます。
パフォーマンスチューニングと配置に関するFAQは、パフォーマンスアシスタンスセンターに集約されています。
クイックリンク
| リソース | URL | その重要性 |
|---|---|---|
| 30日間のトライアルキーを取得する | https://ironpdf.com/demos/ |
透かしなしですべての機能を解除 |
| ライセンスと価格 | https://ironpdf.com/licensing/ |
永久またはサブスクリプションプラン; Iron Suite は 10 のライブラリをまとめています |
| APIリファレンス | https://ironpdf.com/object-reference/api/ |
完全なクラスドキュメント、例:ChromePdfRenderer |
| ドキュメントポータル | https://ironpdf.com/docs/ |
ガイド、チュートリアル、サンプルプロジェクト |
| パフォーマンスアシスタンス | https://ironpdf.com/troubleshooting/ironpdf-performance-assistance/ |
最適化とスケーリングのヒント |
| サポートに連絡する | https://ironsoftware.com/contact-us/ |
ライブチャット、電子メール、電話サポート |
次のステップ
- サンプルリポジトリをクローンし、MVCビューのレンダリングからAES-256暗号化までのすべての主要機能をデモンストレーションします。
- トライアルキーをプラグインし、既存のソリューションでユニットテストを実行してクロスプラットフォーム互換性を検証します。
- ライブデモを予約するし、エンジニアリングチームとプロジェクト固有の推奨事項を相談します。
これらのリソースを手にして、あらゆる.NETチームが、オンプレミス、Docker、およびサーバーレスのいずれであっても、単一のスプリントでピクセルパーフェクトなPDFを本番環境に出荷できます。
よくある質問
.NET CoreでHTMLをPDFに変換するにはどうすればよいですか?
IronPDFライブラリを使用して.NET CoreでHTMLをPDFに変換できます。まず、IronPDF NuGetパッケージをインストールし、ChromePdfRendererインスタンスを作成します。RenderHtmlAsPdfメソッドを使用してHTML文字列をPDFに変換します。
ウェブサイトのURLをPDF文書に変換するにはどうすればよいですか?
ウェブサイトのURLをPDF文書に変換するには、IronPDF NuGetパッケージをインストールし、ChromePdfRendererインスタンスを作成し、RenderUrlAsPdfメソッドを使ってURLをPDFにレンダリングします。結果はSaveAsメソッドを使用して保存できます。
RazorビューをPDFに変換する最良の方法は何ですか?
RazorビューをPDFに変換する最良の方法はIronPDFを使用することです。まず、RazorビューをHTML文字列にレンダリングし、この文字列をRenderHtmlAsPdfメソッドに渡してPDF文書を作成します。
PDF文書のセキュリティをどのように強化できますか?
IronPDFを使用してPDFのセキュリティを強化できます。AES-256暗号化、パスワード設定、ユーザー権限の制御を適用します。SecuritySettingsプロパティを介してこれらの設定を構成し、印刷や編集といった操作を制限します。
PDFレンダリングのカスタマイズに対してどのようなオプションがありますか?
IronPDFはChromePdfRenderOptionsクラスを通じてさまざまなレンダリングオプションを提供し、用紙サイズ、方向、マージン、CSSメディアタイプを設定できます。また、ヘッダー、フッター、透かしを追加してカスタマイズされたドキュメント出力も可能です。
DockerコンテナにPDF生成アプリケーションをどのようにデプロイしますか?
DockerコンテナにPDF生成アプリケーションをデプロイするには、DockerfileでLinuxの依存関係を構成し、ユーザー権限を設定します。IronPdf.Installation.LinuxAndDockerDependenciesAutoConfigを利用して依存関係を自動管理します。
C#を使用してPDFに透かしを追加するにはどうすればよいですか?
IronPDFを利用してHtmlStampオブジェクトでWatermarkプロパティを使用することでPDFに透かしを追加できます。高度なオプションには、HtmlStamperクラスを使用してカスタムポジショニングや透過効果を設定できます。
PDF文書にデジタル署名を追加できますか?
はい、IronPDFのPdfSignatureクラスを使用してPDFにデジタル署名を追加できます。PdfDocumentのSignメソッドを利用し、証明書ファイルを提供して文書の完全性と信憑性を確保します。
.NET CoreでPDF生成のパフォーマンスをどのように最適化できますか?
スレッドセーフなChromePdfRendererインスタンスを再利用し、マルチスレッディングを有効にし、不要なヘッドレス- ChromeのスタートアップフラグをトリミングすることでPDF生成のパフォーマンスを最適化します。これらの実践によりアプリケーションの効率を向上させます。
このチュートリアル for .NET Core HTMLからPDFへの例は.NET 10でも動作しますか?
はい。IronPDFは.NET 10と完全に互換性があるため、このチュートリアルのChromePdfRenderer HTMLからPDFへの例を.NET 10プロジェクトでコアコードを変更せずに使用できます。主な違いはプロジェクトを作成するときに.NET 10をターゲットにし、その後NuGetから最新のIronPDFパッケージをインストールして、HTML、Razorビュー、またはURLからピクセルパーフェクトなPDFを生成することです。

