HTML要素やページの一部のセクションをC#でPDFに変換する方法
IronPDFには特定のHTML要素をターゲットにするための組み込みのSelectCssメソッドがありません。 ChromePdfRendererは完全なHTMLドキュメントをレンダリングします—ページ全体、URL全体、HTML文字列全体。 ページの特定のセクションからPDFを生成するために、JavaScript DOM操作、CSSインジェクション、サーバーサイドのHTMLフラグメント抽出、URLレンダリングとJSターゲティングの4つのアプローチの1つを使用してレンダリング前にターゲット要素を分離します。
各アプローチは異なる制約に適しています。 JavaScript DOMの分離は、ターゲットを除いて全てを削除する必要がある場合に、URLや完全なページをレンダリングする際に機能します。 CSSインジェクションは、DOMを変更せずに不要なコンテンツを隠します。 サーバーサイドの抽出は、生のHTMLにアクセスできる場合に最もクリーンな結果を提供します。 URLレンダリングとJSターゲティングは、ソースHTMLが利用できないライブダッシュボードやサードパーティーページを処理します。
無料の30日間トライアルを開始して、全てのアプローチをテストしてください。
クイックスタート: 特定のHTML要素をPDFとして抽出
JavaScript DOM分離とWaitForを使用してCSSセレクタで任意の要素をターゲットし、そのフラグメントだけをPDFにレンダリングします。
-
IronPDF をNuGetパッケージマネージャでインストール
-
このコード スニペットをコピーして実行します。
using IronPdf; var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.JavaScript = @" var target = document.querySelector('#invoice-summary'); document.body.innerHTML = target.outerHTML; "; renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000); var pdf = renderer.RenderHtmlAsPdf(fullPageHtml); pdf.SaveAs("invoice-summary.pdf"); -
実際の環境でテストするためにデプロイする
今日プロジェクトで IronPDF を使い始めましょう無料トライアル
最小のワークフロー (3つのステップ)
- NuGetを介して
IronPdfをインストールします:Install-Package IronPdf ChromePdfRenderOptions.JavaScriptを設定してターゲット要素を分離し、WaitForを設定してその存在を確認しますRenderHtmlAsPdf()またはRenderUrlAsPdf()を呼び出します—PDFには分離されたコンテンツのみが含まれます
JavaScript DOM操作で要素を分離する方法は?
ChromePdfRenderOptions.JavaScriptプロパティは、HTMLがロードされた後、PDFがレンダリングされる前に実行されるJavaScriptの文字列を受け取ります。 ターゲット要素のdocument.body.innerHTMLを置換することにより、レンダリングされたページから他のすべてを削除します。 これは最も柔軟なアプローチで、RenderUrlAsPdf()の両方で機能します。
WaitFor.HtmlQuerySelector()メソッドは、JavaScriptが実行される前にターゲット要素がDOMに存在することを確認します。 これは非同期コンテンツを含むページでは重要です — Reactコンポーネント、Angularテンプレート、API駆動のデータが初期ページ読み込み後に入力されます。
:path=/static-assets/pdf/content-code-examples/how-to/html-element-to-pdf-2.cs
using IronPdf;
string fullPageHtml = @"
<html>
<body>
<header><h1>Acme Corp Invoice</h1></header>
<nav>Navigation links...</nav>
<div id='invoice-summary'>
<h2>Invoice #12345</h2>
<table>
<tr><td>Widget A</td><td>$49.99</td></tr>
<tr><td>Widget B</td><td>$29.99</td></tr>
<tr><td><strong>Total</strong></td><td><strong>$79.98</strong></td></tr>
</table>
</div>
<footer>Footer content...</footer>
</body>
</html>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
// Replace the body with only the target element
renderer.RenderingOptions.Javascript = @"
var el = document.querySelector('#invoice-summary');
if (el) {
document.body.innerHTML = el.outerHTML;
}
";
// Wait for the target element to exist before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000);
PdfDocument pdf = renderer.RenderHtmlAsPdf(fullPageHtml);
pdf.SaveAs("invoice-summary-only.pdf");
Imports IronPdf
Dim fullPageHtml As String = "
<html>
<body>
<header><h1>Acme Corp Invoice</h1></header>
<nav>Navigation links...</nav>
<div id='invoice-summary'>
<h2>Invoice #12345</h2>
<table>
<tr><td>Widget A</td><td>$49.99</td></tr>
<tr><td>Widget B</td><td>$29.99</td></tr>
<tr><td><strong>Total</strong></td><td><strong>$79.98</strong></td></tr>
</table>
</div>
<footer>Footer content...</footer>
</body>
</html>"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
' Replace the body with only the target element
renderer.RenderingOptions.Javascript = "
var el = document.querySelector('#invoice-summary');
if (el) {
document.body.innerHTML = el.outerHTML;
}
"
' Wait for the target element to exist before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000)
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(fullPageHtml)
pdf.SaveAs("invoice-summary-only.pdf")
JavaScriptは、#invoice-summary divのouterHTMLでボディ全体を置換します。 結果のPDFには請求書テーブルのみが含まれます — ヘッダー、ナビゲーション、フッターはありません。 WaitFor.HtmlElementById()メソッドは、IDでターゲティングする場合により簡単な代替手段を提供します:
// Alternative: wait by ID directly
renderer.RenderingOptions.WaitFor.HtmlElementById("invoice-summary", 10000);
// Alternative: wait by ID directly
renderer.RenderingOptions.WaitFor.HtmlElementById("invoice-summary", 10000);
' Alternative: wait by ID directly
renderer.RenderingOptions.WaitFor.HtmlElementById("invoice-summary", 10000)
複雑なセレクター(クラス名、データ属性、ネストされた要素)の場合、document.querySelector()が受け入れるどんなCSSセレクタ文字列も受け入れます。 追加のHtmlElementByClassName(), HtmlElementByName(), HtmlQuerySelector()にデリゲートしますが、コードではより明確な意図を提供します。
ターゲット要素が親コンテナから継承されたスタイルに依存する場合、outerHTML置換は祖先セレクターに依存するCSSルールを失うことがあります(例: .dashboard .widget table { ... })。 これを保つために、該当する<head>からJS分離にコピーします:
renderer.RenderingOptions.JavaScript = @"
var el = document.querySelector('#invoice-summary');
if (el) {
var head = document.head.innerHTML;
document.body.innerHTML = el.outerHTML;
document.head.innerHTML = head;
}
";
renderer.RenderingOptions.JavaScript = @"
var el = document.querySelector('#invoice-summary');
if (el) {
var head = document.head.innerHTML;
document.body.innerHTML = el.outerHTML;
document.head.innerHTML = head;
}
";
renderer.RenderingOptions.JavaScript = "
var el = document.querySelector('#invoice-summary');
if (el) {
var head = document.head.innerHTML;
document.body.innerHTML = el.outerHTML;
document.head.innerHTML = head;
}
"
これにより、元の<head>のコンテンツ(スタイルシート、フォント、メタタグ)を保持しながら、ボディだけを置き換えます。 JavaScriptからPDFへの方法およびWaitForの方法は、複数の非同期データソースを持つページの追加設定オプションをカバーします。
CSSインジェクションで要素を分離する方法は?
ChromePdfRenderOptions.CustomCssUrlプロパティは、IronPDFがレンダリングの前に適用するスタイルシートへのファイルパスまたはURLを受け取ります。 DOMを操作する代わりに、CSS display: noneを使用してターゲット要素以外のすべてを非表示にします。 これにより、元のDOM構造が保持され、JavaScriptの実行を完全に避けることができます。
:path=/static-assets/pdf/content-code-examples/how-to/html-element-to-pdf-5.cs
using IronPdf;
// Create a CSS file that hides everything except #invoice-summary
string cssContent = @"
body > *:not(#invoice-summary) {
display: none !important;
}
#invoice-summary {
display: block !important;
margin: 0;
padding: 20px;
}
";
File.WriteAllText("isolate-element.css", cssContent);
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CustomCssUrl = "isolate-element.css";
PdfDocument pdf = renderer.RenderHtmlAsPdf(fullPageHtml);
pdf.SaveAs("invoice-css-isolated.pdf");
Imports IronPdf
' Create a CSS file that hides everything except #invoice-summary
Dim cssContent As String = "
body > *:not(#invoice-summary) {
display: none !important;
}
#invoice-summary {
display: block !important;
margin: 0;
padding: 20px;
}
"
File.WriteAllText("isolate-element.css", cssContent)
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.CustomCssUrl = "isolate-element.css"
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(fullPageHtml)
pdf.SaveAs("invoice-css-isolated.pdf")
注意: RenderHtmlAsPdf()と一緒にHTML文字列のレンダリングでのみ動作します。 URLレンダリングの場合、CSSの注入をJavaScriptプロパティに埋め込んでください:
renderer.RenderingOptions.JavaScript = @"
var style = document.createElement('style');
style.textContent = 'body > *:not(#invoice-summary) { display: none !important; }';
document.head.appendChild(style);
";
renderer.RenderingOptions.JavaScript = @"
var style = document.createElement('style');
style.textContent = 'body > *:not(#invoice-summary) { display: none !important; }';
document.head.appendChild(style);
";
renderer.RenderingOptions.JavaScript = "
var style = document.createElement('style');
style.textContent = 'body > *:not(#invoice-summary) { display: none !important; }';
document.head.appendChild(style);
"
ソースHTMLを制御する場合、@media printルールは最も軽量な代替手段を提供します—外部依存関係もランタイム注入もありません:
@media print {
header, nav, footer, .sidebar { display: none !important; }
#invoice-summary { width: 100%; margin: 0; }
}
PdfCssMediaType.Printに設定して、これらのルールをアクティブにします:
:path=/static-assets/pdf/content-code-examples/how-to/html-element-to-pdf-8.cs
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
Imports IronPdf.Rendering
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
これは、アプリケーションがすでに@media printルールを定義しているフォームセクション印刷シナリオに最適です。またはフォームHTMLがサーバー側で構築されている場合、アプローチ3でも最適です。
CSSアプローチは一つの重要な制限があります: display: noneが誤った具体性レベルで使用されると、隠された要素は依然としてドキュメントフローでスペースを占有します。 特定のブレークポイントで要素を再表示する可能性のあるフレームワークスタイル(Bootstrap, Tailwind)を上書きするには、常に!importantを使用してください。 深くネストされたターゲットの場合、より正確なセレクタがコラテラルな隠れを回避します。
body > *:not(#target),
body > *:not(#target) ~ * {
display: none !important;
}
サーバーサイドでHTMLフラグメントを抽出する方法は?
生のHTMLにアクセスできる場合 — ファイル、データベース、CMS、またはHTTPレスポンスから読み取る — 最もクリーンなアプローチは、HTMLパーサーを使用してサーバーサイドでターゲット要素を抽出し、そのフラグメントをRenderHtmlAsPdf()に渡すことです。 JavaScriptもCSSインジェクションも実行時DOM操作もありません。
AngleSharpは、このパターンの標準的な.NET HTMLパーサーです。
:path=/static-assets/pdf/content-code-examples/how-to/html-element-to-pdf-10.cs
using IronPdf;
using AngleSharp;
using AngleSharp.Html.Parser;
string fullPageHtml = @"
<html>
<head>
<style>
table { border-collapse: collapse; width: 100%; }
td, th { border: 1px solid #ddd; padding: 8px; text-align: left; }
</style>
</head>
<body>
<header><h1>Dashboard</h1></header>
<div id='revenue-widget'>
<h3>Q4 Revenue</h3>
<table>
<tr><th>Month</th><th>Revenue</th></tr>
<tr><td>October</td><td>$1.2M</td></tr>
<tr><td>November</td><td>$1.5M</td></tr>
<tr><td>December</td><td>$1.8M</td></tr>
</table>
</div>
<div id='other-content'>Other widgets...</div>
</body>
</html>";
// Parse and extract the target element
var parser = new HtmlParser();
var document = parser.ParseDocument(fullPageHtml);
var targetElement = document.QuerySelector("#revenue-widget");
if (targetElement is null)
{
Console.WriteLine("Target element not found.");
return;
}
// Wrap the fragment in a minimal HTML document to preserve styles
string fragmentHtml = $@"
<html>
<head>
<style>
table {{ border-collapse: collapse; width: 100%; }}
td, th {{ border: 1px solid #ddd; padding: 8px; text-align: left; }}
</style>
</head>
<body>
{targetElement.OuterHtml}
</body>
</html>";
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(fragmentHtml);
pdf.SaveAs("revenue-widget.pdf");
Imports IronPdf
Imports AngleSharp
Imports AngleSharp.Html.Parser
Dim fullPageHtml As String = "
<html>
<head>
<style>
table { border-collapse: collapse; width: 100%; }
td, th { border: 1px solid #ddd; padding: 8px; text-align: left; }
</style>
</head>
<body>
<header><h1>Dashboard</h1></header>
<div id='revenue-widget'>
<h3>Q4 Revenue</h3>
<table>
<tr><th>Month</th><th>Revenue</th></tr>
<tr><td>October</td><td>$1.2M</td></tr>
<tr><td>November</td><td>$1.5M</td></tr>
<tr><td>December</td><td>$1.8M</td></tr>
</table>
</div>
<div id='other-content'>Other widgets...</div>
</body>
</html>"
' Parse and extract the target element
Dim parser As New HtmlParser()
Dim document = parser.ParseDocument(fullPageHtml)
Dim targetElement = document.QuerySelector("#revenue-widget")
If targetElement Is Nothing Then
Console.WriteLine("Target element not found.")
Return
End If
' Wrap the fragment in a minimal HTML document to preserve styles
Dim fragmentHtml As String = $"
<html>
<head>
<style>
table {{ border-collapse: collapse; width: 100%; }}
td, th {{ border: 1px solid #ddd; padding: 8px; text-align: left; }}
</style>
</head>
<body>
{targetElement.OuterHtml}
</body>
</html>"
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(fragmentHtml)
pdf.SaveAs("revenue-widget.pdf")
重要な詳細は、抽出されたフラグメントを関連する<link>タグを持つ完全なHTMLドキュメントでラッピングすることです。 このラッパーがないと、インラインスタイルは正しくレンダリングされるが、外部スタイルシートと継承されたCSSルールは失われます。メールテンプレートプレビューのレンダリングでは、すでに文字列として保存されているテンプレートHTMLは、この抽出パターンによってピクセル単位で完璧な結果を得ることができます。
同様のパターンは、代替パーサーとしてHtmlAgilityPackで機能します。
:path=/static-assets/pdf/content-code-examples/how-to/html-element-to-pdf-11.cs
using HtmlAgilityPack;
using IronPdf;
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(fullPageHtml);
var targetNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@id='revenue-widget']");
if (targetNode is null)
{
Console.WriteLine("Target element not found.");
return;
}
string fragmentHtml = $"<html><body>{targetNode.OuterHtml}</body></html>";
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(fragmentHtml);
pdf.SaveAs("revenue-widget-hap.pdf");
Imports HtmlAgilityPack
Imports IronPdf
Dim htmlDoc As New HtmlDocument()
htmlDoc.LoadHtml(fullPageHtml)
Dim targetNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@id='revenue-widget']")
If targetNode Is Nothing Then
Console.WriteLine("Target element not found.")
Return
End If
Dim fragmentHtml As String = $"<html><body>{targetNode.OuterHtml}</body></html>"
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(fragmentHtml)
pdf.SaveAs("revenue-widget-hap.pdf")
:path=/static-assets/pdf/content-code-examples/how-to/html-element-to-pdf-12.cs
PdfDocument pdf = renderer.RenderHtmlAsPdf(fragmentHtml, @"C:\templates\assets\");
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(fragmentHtml, "C:\templates\assets\")
AngleSharpとHtmlAgilityPackの選択は主に好みの問題です。 AngleSharpはCSSセレクタ(QuerySelector)を使用し、フロントエンド開発者のメンタルモデルと一致します。 HtmlAgilityPackはXPath(SelectSingleNode)を使用し、XMLを多用する.NETコードベースではより親しみやすいです。
メールテンプレートプレビューのレンダリング-送信前にHTMLメールテンプレートのPDFプレビューを生成-は純粋なアプローチ3シナリオです。 テンプレートHTMLは保存された文字列であり、外部リソース(画像、フォント)は既知のURLにホストされており、RenderHtmlAsPdf(string Html, string BaseUrlOrPath)のパラメーターがすべての相対パスを解決します。
HTMLにReactまたはVueアプリケーションが実行時にポピュレートする<div id="app"></div>が含まれている場合、抽出されたフラグメントは空になります。 そのような場合は、アプローチ1または4を使用します。
ライブURLをレンダリングする際に要素をターゲットにする方法は?
ソースHTMLにアクセスできないライブURL—サードパーティのダッシュボード、外部レポート、ホストされたアプリケーション—の場合、WaitForと組み合わせて、ページ読み込み後に特定のセクションを分離します。
これは、ダッシュボードウィジェットをエクスポートするシナリオです: BIツールがウェブページ上でチャートやテーブルをレンダリングし、単一のウィジェットを利害関係者配信用のPDFとしてエクスポートする必要があります。
:path=/static-assets/pdf/content-code-examples/how-to/html-element-to-pdf-13.cs
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
// Wait for the dashboard widget to render (async content)
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("[data-widget='revenue-chart']", 15000);
// Isolate the widget after it renders
renderer.RenderingOptions.Javascript = @"
var widget = document.querySelector('[data-widget=""revenue-chart""]');
if (widget) {
// Preserve computed styles by cloning into a clean body
document.body.innerHTML = '';
document.body.appendChild(widget);
}
";
PdfDocument pdf = renderer.RenderUrlAsPdf("https://dashboard.example.com/q4-report");
pdf.SaveAs("revenue-chart-export.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
' Wait for the dashboard widget to render (async content)
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("[data-widget='revenue-chart']", 15000)
' Isolate the widget after it renders
renderer.RenderingOptions.Javascript = "
var widget = document.querySelector('[data-widget=""revenue-chart""]);
if (widget) {
// Preserve computed styles by cloning into a clean body
document.body.innerHTML = '';
document.body.appendChild(widget);
}
"
Dim pdf As PdfDocument = renderer.RenderUrlAsPdf("https://dashboard.example.com/q4-report")
pdf.SaveAs("revenue-chart-export.pdf")
WaitFor.HtmlQuerySelector()呼び出しにより、JavaScript実行前にウィジェットがDOMに存在することを確認します。 15秒のタイムアウトは、ダッシュボードデータを入力するAPI呼び出しの遅さに対応しています。 JavaScriptはその後、ページを該当のウィジェットのみへと削減します。
複雑なCSS依存関係を持つページの場合、appendChildアプローチ(ノードをコピーする代わりに移動)により、要素がCSSOMにおける位置を保持するため、より多くの計算スタイルが保存されます。 アプローチ1のinnerHTML置換アプローチは簡単ですが、祖先セレクタに依存するスタイルを失うことがあります。
ターゲットページが認証を必要とする場合、RenderUrlAsPdf()を呼び出す前にレンダラでクッキーを設定してください:
renderer.RenderingOptions.CustomCookies = new Dictionary<string, string>
{
{ "session_id", "abc123" },
{ "auth_token", "bearer-xyz" }
};
renderer.RenderingOptions.CustomCookies = new Dictionary<string, string>
{
{ "session_id", "abc123" },
{ "auth_token", "bearer-xyz" }
};
Imports System.Collections.Generic
renderer.RenderingOptions.CustomCookies = New Dictionary(Of String, String) From {
{"session_id", "abc123"},
{"auth_token", "bearer-xyz"}
}
定期的なダッシュボードエクスポート(例:夜間のPDF生成を利害関係者メール配信用)では、タイムアウト例外をキャッチするリトライループにレンダリングをラップします。 もしWaitFor がそのmaxWaitTime を超えた場合、IronPDFは利用可能なコンテンツでレンダリングを進めます — これにより不完全な可能性があります。 タイムアウトを増やすかNetworkIdle0() に切り替えることにより、通常、遅いネットワークでの断続的な障害を解決します。
4つのアプローチの比較
| アプローチ | 最適 | ソースHTMLが必要 | JS依存 | 複雑 |
|---|---|---|---|---|
| JavaScript DOMアイソレーション | 任意のソースからの一般的な要素抽出 | なし | はい | 中規模 |
| CSSインジェクション | DOMの変更なしにセクションを隠します; @media print レイアウト |
部分的(CustomCssUrlがRenderHtmlAsPdfを必要とします) |
なし(URLのためにJSで注入しない限り) | 低レベル |
| サーバーサイドフラグメント抽出 | CMSコンテンツ、保存されたテンプレート、メールプレビュー | はい | なし | 低–中 |
| JSターゲティングによるURLレンダリング | ライブダッシュボード、サードパーティーページ、SPAウィジェット | なし | はい | 中 –高 |
正しいアプローチの選択
決定は2つの要素に依存します: 生のHTMLにアクセスできるかどうかと、ターゲットコンテンツがJavaScriptでレンダリングを必要としているかどうか。
Invoice ラインアイテムの抽出が最も一般的な使用ケースです。 請求書のHTMLがサーバーサイドで生成される場合(Razorビュー、Handlebarsテンプレート、保存されたHTML文字列)、アプローチ3(サーバーサイド抽出)はランタイムオーバーヘッドゼロで最もクリーンな結果を提供します。 #line-items テーブルを抽出し、それをスタイル付きHTMLシェルに包んでレンダリングします。
Dashboard ウィジェットエクスポートにはJavaScript実行が必要です - ウィジェットのコンテンツは初期ページ読み込み後にAPIコールによってポピュレートされるからです。 アプローチ1(JS DOMアイソレーション)は、ダッシュボードがローカルで実行されるか、認証の背後にある場合に処理します。 アプローチ4(JSターゲティングによるURLレンダリング)は、ダッシュボードがサードパーティのホストされたアプリケーションでURLしか持たない場合に必要です。
Form セクション印刷 — ユーザレビューまたはコンプライアンスアーカイバルのためのマルチステップフォームの特定のセクションの抽出 — は、アプリケーションがすでに@media printルールを定義している場合、自然にアプローチ2(CSSインジェクション)にマッピングされます。フォームHTMLがサーバー側で構築されている場合、アプローチ3でも適しています。
Email テンプレートプレビューのレンダリング — 送信前にHTMLメールテンプレートのPDFプレビューを生成 — は完全にアプローチ3のシナリオです。 テンプレートHTMLは保存された文字列で、外部リソース(画像、フォント)は既知のURLにホストされており、BaseUrlOrPathのパラメータがすべての相対パスを解決します。
複数のシナリオをサポートする必要があるアプリケーションでは、戦略パラメータを受け入れるサービスインターフェースの背後でレンダリングロジックをカプセル化します。
public enum ElementExtractionStrategy
{
JavaScriptIsolation,
CssInjection,
ServerSideExtraction,
UrlWithJsTargeting
}
public enum ElementExtractionStrategy
{
JavaScriptIsolation,
CssInjection,
ServerSideExtraction,
UrlWithJsTargeting
}
Public Enum ElementExtractionStrategy
JavaScriptIsolation
CssInjection
ServerSideExtraction
UrlWithJsTargeting
End Enum
これにより、レンダラー構成を重複させることなく、入力タイプに基づいて適切なアプローチを呼び出すコードが選択できます。
次のステップ
IronPDFでのHTML要素のアイソレーションはレンダリング時の課題であり、組み込みのAPI機能ではありません。 上記の4つのアプローチは全範囲をカバーしています - サーバーサイドテンプレート抽出(ゼロJS、最もクリーンな出力)からライブURLターゲティング(完全なJS実行、SPAと非同期コンテンツに対応)まで。 比較表は迅速な参照を提供し、実世界のシナリオは一般的なビジネス要件を適切な戦略にマップします。
プロダクション展開に関する追加の考慮事項がいくつかあります:
パフォーマンス: サーバーサイド抽出(アプローチ3)はJavaScriptの実行を完全にスキップするため最速です。 JavaScriptベースのアプローチ(1と4)は、ページの複雑さとWaitForのタイムアウトに比例したオーバーヘッドを追加します。 バッチ処理の場合(例、500の請求書PDFを生成)、ChromePdfRendererインスタンスにより、最高のスループットが得られます。
デバッグ: PDF出力がブランクまたはコンテンツが欠落している場合、WaitForのタイムアウトを増やします。 ターゲット要素が非同期データに依存している場合、RenderDelayよりも信頼性があります。 レンダリングオプションガイドは、レイアウトに影響を与えるビューポート幅とペーパーフィットの構成をカバーしています。
アプローチの組み合わせ: 戦略のミックスを防ぐものはありません。 複数のフラグメント(1つのソースからのヘッダー、別のソースからのデータテーブル、第三のソースからのチャートSVG)からコンポジットHTMLドキュメントを構築するためにサーバーサイド抽出を使用し、組み立てたドキュメントを単一のPDFとしてレンダリングすることができます。 RenderHtmlAsPdf(string Html, string BaseUrlOrPath)メソッドは、ベースURLから相対アセットパスを解決し、異種ソースから文書を組み立てるのを簡単にします。
JavaScriptからPDFへの方法で高度なJS実行パターンを、WaitForドキュメントで利用可能なすべての待機戦略を、レンダリングオプションガイドで完全なChromePdfRenderOptionsの表面を、カスタムJavaScriptコード例で実行可能なスニペットを探求してください。
ライセンスオプションを表示 $999から始まります。 ChromePdfRenderOptions APIリファレンスおよびWaitFor APIリファレンスがすべてのプロパティとメソッドを文書化しています。
よくある質問
C#でHTML要素をPDFに変換する主要なアプローチは何ですか?
JS分離、CSS隠し、サーバーサイド抽出、ライブURLターゲティングが主要なアプローチであり、すべてIronPDFを使用して実装できます。
HTMLからPDFへの変換でJSの分離はどのように機能しますか?
JS分離は、JavaScriptを実行してHTMLドキュメントを動的に操作し、それをPDFに変換します。IronPDFを使用して特定の要素のみがレンダリングされることを確保します。
PDF変換においてCSSの隠しはどのように使用されますか?
CSSの隠しは、PDFに現れてはならない要素を隠すためにCSSスタイルを使用します。IronPDFは、変換プロセス中にスタイルシートやスタイルルールを指定することでこれをサポートします。
IronPDFは特定のHTML要素をサーバーサイドで抽出してPDFを生成できますか?
はい、IronPDFは特定のHTML要素をサーバーサイドで抽出し、ウェブページのどの部分がPDFに変換されるかを正確に制御します。
HTMLからPDFへの変換におけるライブURLターゲティングの利点は何ですか?
ライブURLターゲティングにより、IronPDFはライブウェブページのURLから要素を直接PDFに変換し、ローカルHTMLファイルが不要なまま、最新のコンテンツをキャプチャします。
IronPDFを使用して、ウェブページのセクションのみをPDFに変換できますか?
はい、IronPDFはウェブページの特定のセクションや要素をPDFに変換する機能を提供しており、関連コンテンツに容易に焦点を当てることができます。
IronPDFは、HTMLからPDFへの変換中に動的コンテンツをどのように処理しますか?
IronPDFは変換中にJavaScriptを実行して動的コンテンツをレンダリングし、クライアントサイドのスクリプトに依存する要素がPDF内で正確に表現されることを確保します。

