C#でjsreportからIronPDFに移行する方法
jsreportからIronPDFへの移行:完全なC#移行ガイド
jsreportからIronPDFへの移行は、あなたの.NET PDFワークフローを、外部バイナリ管理と個別のサーバープロセスによるNode.js依存のシステムから、完全にプロセス内で実行される純粋な.NETライブラリへと変えます。 このガイドでは、.NETのプロフェッショナルな開発者向けに、インフラの複雑さやJavaScriptのテンプレート要件を排除する包括的な移行パスを、ステップバイステップで提供します。
なぜjsreportからIronPDFに移行するのか
jsreportの課題
jsreportは、純粋な.NET環境にはない複雑さをもたらします:
1.Node.jsの依存性:Node.jsのランタイムとバイナリを必要とし、単純な.NETアプリケーションであるべきものにインフラの複雑さを加えます。
2.外部バイナリ管理:個別のNuGetパッケージ(jsreport.Binary、jsreport.Binary.Linux、jsreport.Binary.OSX)を通じて、Windows、Linux、およびOSX用のプラットフォーム固有のバイナリをダウンロードして管理する必要があります。
3.分離サーバープロセス:ユーティリティまたは Web サーバーとして実行され、StartAsync() および KillAsync() ライフサイクル メソッドによる追加のプロセス管理が必要です。
4.JavaScriptテンプレート:C#ネイティブの機能を使用する代わりに、Handlebars、JsRender、または他のJavaScriptテンプレートシステムを強制的に学習させます。
5.複雑なリクエスト構造:単純な PDF 生成でさえ、ネストされた<コード>テンプレート</コード構成を持つ冗長な<コード>RenderRequest</コードオブジェクトを必要とします。
6.ライセンス制限:無料版ではテンプレート数に制限があります; スケーリングには商用ライセンスが必要です。
7.ストリームベース出力:手動でのファイル操作とメモリ・ストリーム管理を必要とするストリームを返します。
jsreportとIronPDFの比較
| フィーチャー | jsreport | IronPDF |
|---|---|---|
| ランタイム | Node.js + .NET | 純粋な.NET |
| バイナリ管理 | マニュアル(jsreport.Binaryパッケージ) | 自動翻訳 |
| サーバープロセス | 必須(ユーティリティまたはウェブサーバ) | 進行中 |
| テンプレート作成 | JavaScript(ハンドルバーなど) | C# (Razor、文字列補間) |
| APIスタイル | 冗長なリクエストオブジェクト | クリーンで流暢なメソッド |
| アウトプット | ストリーム | PdfDocument オブジェクト |
| PDF操作 | 制限的 | 広範囲(マージ、分割、編集) |
| 非同期サポート | 非同期のみ | 同期と非同期の両方 |
2025年、2026年まで.NET 10とC# 14の採用を計画しているチームにとって、IronPDFは外部ランタイムに依存しない.NETネイティブライブラリとして将来を見据えた基盤を提供します。
マイグレーションの複雑さの評価
機能別の見積もり作業
| フィーチャー | 移行の複雑さ | ノート |
|---|---|---|
| HTMLからPDFへ | 低レベル | メソッドの直接置換 |
| URLからPDFへ | 低レベル | 直接的な方法、回避策なし |
| ヘッダー/フッター | 低レベル | プレースホルダーの構文変更 |
| ページ設定 | 低レベル | プロパティのマッピング |
| サーバーライフサイクル | 低レベル | 完全に削除 |
| バイナリ管理 | 低レベル | 完全に削除 |
パラダイムシフト
このjsreportの移行における基本的なシフトは、サーバー管理を伴う冗長なリクエストオブジェクトからシンプルなプロセス内メソッド呼び出しへのものです:
jsreport: LocalReporting().UseBinary().AsUtility().Create() → RenderAsync(RenderRequest) →ストリーム→ File
IronPDF: ChromePdfRenderer → RenderHtmlAsPdf(html) → SaveAs()始める前に
前提条件
1..NET環境: .NET Framework 4.6.2+ または .NET Core 3.1+ / .NET 5/6/7/8/9+. 2.NuGetアクセス:NuGetパッケージをインストールする能力。 3.IronPDFライセンス:ironPdf.comからライセンスキーを取得してください。
NuGetパッケージの変更
# Removejsreportpackages
dotnet remove package jsreport.Binary
dotnet remove package jsreport.Binary.Linux
dotnet remove package jsreport.Binary.OSX
dotnet remove package jsreport.Local
dotnet remove package jsreport.Types
dotnet remove package jsreport.Client
# Install IronPDF
dotnet add package IronPdf# Removejsreportpackages
dotnet remove package jsreport.Binary
dotnet remove package jsreport.Binary.Linux
dotnet remove package jsreport.Binary.OSX
dotnet remove package jsreport.Local
dotnet remove package jsreport.Types
dotnet remove package jsreport.Client
# Install IronPDF
dotnet add package IronPdfライセンス構成
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.comjsreportの使用法を特定する。
# Find alljsreportreferences
grep -r "using jsreport\|LocalReporting\|RenderRequest\|RenderAsync" --include="*.cs" .
grep -r "JsReportBinary\|Template\|Recipe\|Engine\." --include="*.cs" .# Find alljsreportreferences
grep -r "using jsreport\|LocalReporting\|RenderRequest\|RenderAsync" --include="*.cs" .
grep -r "JsReportBinary\|Template\|Recipe\|Engine\." --include="*.cs" .完全な API リファレンス
クラスマッピング
| jsreportクラス | IronPDF 同等物 | ノート |
|---|---|---|
| <コード>ローカルレポート</コード | <コード>ChromePdfRenderer</コード | メインレンダラー |
| <コード>ReportingService</コード | <コード>ChromePdfRenderer</コード | 同じクラス |
| <コード>RenderRequest</コード | メソッドのパラメータ | ラッパー不要 |
| <コード>テンプレート</コード | メソッドのパラメータ | ラッパー不要 |
| <コード>Chrome</コード | <コード>レンダリングオプション</コード | Chrome オプション |
| <コード>レポート</コード | <コード>PdfDocument</コード | 成果物 |
| <コード>エンジン</コード | (不要) | テンプレート用のC#。 |
メソッドマッピング
| jsreportメソッド | IronPDF 同等物 | ノート |
|---|---|---|
LocalReporting().UseBinary().AsUtility().Create()。 | new ChromePdfRenderer(). | ワンライナー |
rs.RenderAsync(request). | renderer.RenderHtmlAsPdf(html). | 直接通話 |
rs.StartAsync(). | (不要) | 進行中 |
rs.KillAsync()。 | (不要) | 自動クリーンアップ |
report.Content.CopyTo(stream)のようにします。 | pdf.SaveAs(path)またはpdf.BinaryData。 | 直接アクセス |
RenderRequestプロパティのマッピング
| jsreportテンプレートプロパティ | IronPDF 同等物 | ノート |
|---|---|---|
| <コード>テンプレート.コンテンツ</コード | RenderHtmlAsPdf()の最初のパラメータ | 直接HTML文字列 |
Template.Recipe = Recipe.ChromePdf. | (不要) | 常にChromePdf |
Template.Engine = Engine.None. | (不要) | C#テンプレートを使用する |
Chrome.HeaderTemplate。 | RenderingOptions.TextHeaderまたは HtmlHeader。 | HTMLヘッダー |
Chrome.FooterTemplate。 | RenderingOptions.TextFooterまたはHtmlFooter。 | HTMLフッター |
Chrome.DisplayHeaderFooter。 | (自動) | ヘッダーの自動有効化 |
Chrome.MarginTop。 | RenderingOptions.MarginTop。 | 単位:ミリメートル |
プレースホルダーのマッピング(ヘッダー/フッター)
| jsreportプレースホルダ | IronPDF プレースホルダー | ノート |
|---|---|---|
<span> class="pageNumber"></span></span> | <コード>{ページ}</コード | 現在のページ |
<span> class="totalPages"></span></span> | <コード>{総ページ数}</コード | 総ページ数 |
{#pageNum}<//code> | <コード>{ページ}</コード | 現在のページ |
{#numPages}<//code> | <コード>{総ページ数}</コード | 総ページ数 |
{#timestamp}<//code> | {date}<//code> | 現在の日付 |
コード移行の例
例1: 基本的なHTMLからPDFへ
翻訳前 (jsreport):
// NuGet: Install-Package jsreport.Binary
// NuGet: Install-Package jsreport.Local
// NuGet: Install-Package jsreport.Types
using jsreport.Binary;
using jsreport.Local;
using jsreport.Types;
using System;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var rs = new LocalReporting()
.UseBinary(JsReportBinary.GetBinary())
.AsUtility()
.Create();
var report = await rs.RenderAsync(new RenderRequest()
{
Template = new Template()
{
Recipe = Recipe.ChromePdf,
Engine = Engine.None,
Content = "<h1>Hello from jsreport</h1><p>This is a PDF document.</p>"
}
});
using (var fileStream = File.Create("output.pdf"))
{
report.Content.CopyTo(fileStream);
}
Console.WriteLine("PDF created successfully!");
}
}// NuGet: Install-Package jsreport.Binary
// NuGet: Install-Package jsreport.Local
// NuGet: Install-Package jsreport.Types
using jsreport.Binary;
using jsreport.Local;
using jsreport.Types;
using System;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var rs = new LocalReporting()
.UseBinary(JsReportBinary.GetBinary())
.AsUtility()
.Create();
var report = await rs.RenderAsync(new RenderRequest()
{
Template = new Template()
{
Recipe = Recipe.ChromePdf,
Engine = Engine.None,
Content = "<h1>Hello from jsreport</h1><p>This is a PDF document.</p>"
}
});
using (var fileStream = File.Create("output.pdf"))
{
report.Content.CopyTo(fileStream);
}
Console.WriteLine("PDF created successfully!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF</h1><p>This is a PDF document.</p>");
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully!");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF</h1><p>This is a PDF document.</p>");
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comjsreport アプローチは、3 つの NuGet パッケージ (jsreport.Binary, jsreport.Local, jsreport.Types), 3 つの名前空間インポート、非同期のみの実行、流暢なビルダーチェーン (LocalReporting().UseBinary().AsUtility().Create())、RecipeとEngineを指定するTemplateオブジェクトがネストされた冗長なRenderRequest、そしてusingブロックによるストリームからファイルへの手動コピーです。
IronPDFはこれを1つのNuGetパッケージ、1つの名前空間、3行のコード、そして同期実行に削減します。 ChromePdfRenderer.RenderHtmlAsPdf()メソッドはHTMLを直接受け入れ、シンプルなSaveAs()メソッドでPdfDocumentを返します。 その他のレンダリングオプションについては、HTML to PDF documentationを参照してください。
例2: URLからPDFへ
翻訳前 (jsreport):
// NuGet: Install-Package jsreport.Binary
// NuGet: Install-Package jsreport.Local
// NuGet: Install-Package jsreport.Types
using jsreport.Binary;
using jsreport.Local;
using jsreport.Types;
using System;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var rs = new LocalReporting()
.UseBinary(JsReportBinary.GetBinary())
.AsUtility()
.Create();
var report = await rs.RenderAsync(new RenderRequest()
{
Template = new Template()
{
Recipe = Recipe.ChromePdf,
Engine = Engine.None,
Content = "<html><body><script>window.location='https://example.com';</script></body></html>"
}
});
using (var fileStream = File.Create("webpage.pdf"))
{
report.Content.CopyTo(fileStream);
}
Console.WriteLine("Webpage PDF created successfully!");
}
}// NuGet: Install-Package jsreport.Binary
// NuGet: Install-Package jsreport.Local
// NuGet: Install-Package jsreport.Types
using jsreport.Binary;
using jsreport.Local;
using jsreport.Types;
using System;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var rs = new LocalReporting()
.UseBinary(JsReportBinary.GetBinary())
.AsUtility()
.Create();
var report = await rs.RenderAsync(new RenderRequest()
{
Template = new Template()
{
Recipe = Recipe.ChromePdf,
Engine = Engine.None,
Content = "<html><body><script>window.location='https://example.com';</script></body></html>"
}
});
using (var fileStream = File.Create("webpage.pdf"))
{
report.Content.CopyTo(fileStream);
}
Console.WriteLine("Webpage PDF created successfully!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("Webpage PDF created successfully!");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("Webpage PDF created successfully!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comこの例は、jsreportの重要な制限を強調しています。 jsreportコードは、ウェブページをキャプチャするためにHTMLコンテンツに埋め込まれたJavaScriptのリダイレクトワークアラウンド(window.location='https://example.com')を使用しなければなりません。 この間接的なアプローチは、特定のウェブサイトで失敗する可能性があり、不必要な複雑さを追加します。
IronPDFは専用のRenderUrlAsPdf()メソッドを提供し、JavaScriptの完全な実行とモダンなCSSのサポートであらゆるURLを直接レンダリングします。 回避策や埋め込みスクリプトはありません。 URLからPDFへの変換の詳細については、こちらをご覧ください。
例3: ヘッダーとフッターのあるPDF
翻訳前 (jsreport):
// NuGet: Install-Package jsreport.Binary
// NuGet: Install-Package jsreport.Local
// NuGet: Install-Package jsreport.Types
using jsreport.Binary;
using jsreport.Local;
using jsreport.Types;
using System;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var rs = new LocalReporting()
.UseBinary(JsReportBinary.GetBinary())
.AsUtility()
.Create();
var report = await rs.RenderAsync(new RenderRequest()
{
Template = new Template()
{
Recipe = Recipe.ChromePdf,
Engine = Engine.None,
Content = "<h1>Document with Header and Footer</h1><p>Main content goes here.</p>",
Chrome = new Chrome()
{
DisplayHeaderFooter = true,
HeaderTemplate = "<div style='font-size:10px; text-align:center; width:100%;'>Custom Header</div>",
FooterTemplate = "<div style='font-size:10px; text-align:center; width:100%;'>Page <span class='pageNumber'></span> of <span class='totalPages'></span></div>"
}
}
});
using (var fileStream = File.Create("document_with_headers.pdf"))
{
report.Content.CopyTo(fileStream);
}
Console.WriteLine("PDF with headers and footers created successfully!");
}
}// NuGet: Install-Package jsreport.Binary
// NuGet: Install-Package jsreport.Local
// NuGet: Install-Package jsreport.Types
using jsreport.Binary;
using jsreport.Local;
using jsreport.Types;
using System;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var rs = new LocalReporting()
.UseBinary(JsReportBinary.GetBinary())
.AsUtility()
.Create();
var report = await rs.RenderAsync(new RenderRequest()
{
Template = new Template()
{
Recipe = Recipe.ChromePdf,
Engine = Engine.None,
Content = "<h1>Document with Header and Footer</h1><p>Main content goes here.</p>",
Chrome = new Chrome()
{
DisplayHeaderFooter = true,
HeaderTemplate = "<div style='font-size:10px; text-align:center; width:100%;'>Custom Header</div>",
FooterTemplate = "<div style='font-size:10px; text-align:center; width:100%;'>Page <span class='pageNumber'></span> of <span class='totalPages'></span></div>"
}
}
});
using (var fileStream = File.Create("document_with_headers.pdf"))
{
report.Content.CopyTo(fileStream);
}
Console.WriteLine("PDF with headers and footers created successfully!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Custom Header",
FontSize = 10
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page} of {total-pages}",
FontSize = 10
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Document with Header and Footer</h1><p>Main content goes here.</p>");
pdf.SaveAs("document_with_headers.pdf");
Console.WriteLine("PDF with headers and footers created successfully!");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Custom Header",
FontSize = 10
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page} of {total-pages}",
FontSize = 10
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Document with Header and Footer</h1><p>Main content goes here.</p>");
pdf.SaveAs("document_with_headers.pdf");
Console.WriteLine("PDF with headers and footers created successfully!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comjsreportのアプローチでは、ChromeオブジェクトをTemplateに追加し、DisplayHeaderFooter = trueを設定し、特別なCSSクラスプレースホルダ(<span> class="pageNumber"></span>, <span> class="totalPages"></span>) を持つHTMLテンプレートを使用する必要があります。 ヘッダーとフッターのテンプレートには、完全なインラインスタイルが含まれている必要があります。
IronPDFはCenterText、LeftText、RightText、FontSizeの専用プロパティを持つ、よりクリーンなTextHeaderFooter構成を提供します。 ページ番号プレースホルダは、より単純な{page}と{total-pages}構文を使用します。 HTMLのヘッダーオプションについては、headers and footers documentationを参照してください。
重要な移行に関する注意事項
サーバーのライフサイクル管理をなくす
jsreportは、明示的なサーバーライフサイクル管理を必要とします:
//jsreport(DELETE THIS):
var rs = new LocalReporting()
.UseBinary(JsReportBinary.GetBinary())
.AsUtility()
.Create();
// Or for web server mode:
var rs = new LocalReporting()
.UseBinary(JsReportBinary.GetBinary())
.AsWebServer()
.Create();
await rs.StartAsync();
// ... use rs ...
await rs.KillAsync();//jsreport(DELETE THIS):
var rs = new LocalReporting()
.UseBinary(JsReportBinary.GetBinary())
.AsUtility()
.Create();
// Or for web server mode:
var rs = new LocalReporting()
.UseBinary(JsReportBinary.GetBinary())
.AsWebServer()
.Create();
await rs.StartAsync();
// ... use rs ...
await rs.KillAsync();IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFは完全にインプロセスで実行され、サーバーの起動、プロセス管理、クリーンアップは必要ありません:
// IronPDF:
var renderer = new ChromePdfRenderer();
// Just use it—no lifecycle management needed// IronPDF:
var renderer = new ChromePdfRenderer();
// Just use it—no lifecycle management neededIRON VB CONVERTER ERROR developers@ironsoftware.comプラットフォーム固有のバイナリ パッケージの削除
jsreportは、ターゲットプラットフォームごとに個別のNuGetパッケージを必要とします:
# DELETE these platform-specific packages:
dotnet remove package jsreport.Binary
dotnet remove package jsreport.Binary.Linux
dotnet remove package jsreport.Binary.OSX# DELETE these platform-specific packages:
dotnet remove package jsreport.Binary
dotnet remove package jsreport.Binary.Linux
dotnet remove package jsreport.Binary.OSXIronPdfは単一のNuGetパッケージを通してすべてのプラットフォーム要件を自動的に処理します。
プレースホルダ構文の更新
jsreportは、CSSのクラスベースまたは中括弧プレースホルダを使用します。 IronPDFは異なる構文を使用します:
//jsreportplaceholders:
"<span class='pageNumber'></span>" // or {#pageNum}
"<span class='totalPages'></span>" // or {#numPages}
//IronPDFplaceholders:
"{page}"
"{total-pages}"
"{date}"
"{html-title}"//jsreportplaceholders:
"<span class='pageNumber'></span>" // or {#pageNum}
"<span class='totalPages'></span>" // or {#numPages}
//IronPDFplaceholders:
"{page}"
"{total-pages}"
"{date}"
"{html-title}"IRON VB CONVERTER ERROR developers@ironsoftware.comC#文字列補間でハンドルバーを置き換える
jsreportは、Engine.HandlebarsでHandlebarsテンプレートをよく使用します:
//jsreportHandlebars (DELETE THIS):
Template = new Template
{
Content = "<h1>Hello, {{name}}</h1>",
Engine = Engine.Handlebars
},
Data = new { name = "World" }
//IronPDFwith C# string interpolation:
string name = "World";
string html = $"<h1>Hello, {name}</h1>";
var pdf = renderer.RenderHtmlAsPdf(html);//jsreportHandlebars (DELETE THIS):
Template = new Template
{
Content = "<h1>Hello, {{name}}</h1>",
Engine = Engine.Handlebars
},
Data = new { name = "World" }
//IronPDFwith C# string interpolation:
string name = "World";
string html = $"<h1>Hello, {name}</h1>";
var pdf = renderer.RenderHtmlAsPdf(html);IRON VB CONVERTER ERROR developers@ironsoftware.comストリーム処理を簡素化する
jsreportは、手動でのコピーが必要なストリームを返します:
//jsreportstream handling (DELETE THIS):
using (var fileStream = File.Create("output.pdf"))
{
report.Content.CopyTo(fileStream);
}
// Or for byte array:
using (var memoryStream = new MemoryStream())
{
await report.Content.CopyToAsync(memoryStream);
return memoryStream.ToArray();
}
//IronPDFdirect access:
pdf.SaveAs("output.pdf");
// Or:
byte[] bytes = pdf.BinaryData;//jsreportstream handling (DELETE THIS):
using (var fileStream = File.Create("output.pdf"))
{
report.Content.CopyTo(fileStream);
}
// Or for byte array:
using (var memoryStream = new MemoryStream())
{
await report.Content.CopyToAsync(memoryStream);
return memoryStream.ToArray();
}
//IronPDFdirect access:
pdf.SaveAs("output.pdf");
// Or:
byte[] bytes = pdf.BinaryData;IRON VB CONVERTER ERROR developers@ironsoftware.comトラブルシューティング
問題 1: LocalReporting が見つかりません。
問題:コードはIronPDFに存在しないLocalReportingクラスを参照している。
解決策:ChromePdfRendererに置き換えてください:
// jsreport
var rs = new LocalReporting().UseBinary().AsUtility().Create();
// IronPDF
var renderer = new ChromePdfRenderer();// jsreport
var rs = new LocalReporting().UseBinary().AsUtility().Create();
// IronPDF
var renderer = new ChromePdfRenderer();IRON VB CONVERTER ERROR developers@ironsoftware.com問題 2: RenderRequest が見つかりません
問題:コードはRenderRequestとTemplateラッパーオブジェクトを使用しています。
解決策:HTMLを直接レンダーメソッドに渡します:
// jsreport
await rs.RenderAsync(new RenderRequest { Template = new Template { Content = html } });
// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);// jsreport
await rs.RenderAsync(new RenderRequest { Template = new Template { Content = html } });
// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);IRON VB CONVERTER ERROR developers@ironsoftware.com課題3:ページ番号が表示されない
問題:jsreport プレースホルダー構文 <span> class="pageNumber"></span> を使用しています。
解決策:IronPDFプレースホルダーの構文を更新しました:
//jsreportsyntax (won't work)
"Page <span class='pageNumber'></span> of <span class='totalPages'></span>"
//IronPDFsyntax
"Page {page} of {total-pages}"//jsreportsyntax (won't work)
"Page <span class='pageNumber'></span> of <span class='totalPages'></span>"
//IronPDFsyntax
"Page {page} of {total-pages}"IRON VB CONVERTER ERROR developers@ironsoftware.com課題4: JsReportBinaryが見つかりません
問題:コードはJsReportBinary.GetBinary()を参照しています。
解決策:IronPDFは外部バイナリを必要としません:
// DELETE thisjsreportpattern:
.UseBinary(JsReportBinary.GetBinary())
//IronPDFneeds nothing—just create the renderer:
var renderer = new ChromePdfRenderer();// DELETE thisjsreportpattern:
.UseBinary(JsReportBinary.GetBinary())
//IronPDFneeds nothing—just create the renderer:
var renderer = new ChromePdfRenderer();IRON VB CONVERTER ERROR developers@ironsoftware.com移行チェックリスト
移行前
- [すべてのjsreport
usingステートメントを特定する。 - [ ] Handlebars/JsRenderを使用したリストテンプレート(C#文字列補間への変換)
- [現在使用しているChromeのオプション(余白、用紙サイズ)を文書化してください。)
- [ウェブサーバーモードとユーティリティモードのチェック(どちらもインプロセスになります)
- [ ] プラットフォーム固有のバイナリパッケージに注意 (すべて削除)
- [IronPDF ライセンスキーの取得
パッケージの変更
- [ ]
jsreport.Binaryパッケージを削除する - [ ]
jsreport.Binary.Linuxパッケージを削除する - [ ]
jsreport.Binary.OSXパッケージを削除する - [ ]
jsreport.Localパッケージを削除する - [ ]
jsreport.Typesパッケージを削除する - [ ]
jsreport.Clientパッケージを削除する - [ ]
IronPdfパッケージをインストールする
コードの変更
- [ ] 起動時にライセンスキー設定を追加する
- [
LocalReportingを<コード>ChromePdfRenderer</コードに置き換えてください。 - [ ]
RenderRequestラッパーの削除 - [
Templateラッパーの削除 - [ ] プレースホルダーの構文を更新 (
<span> class="pageNumber">→{page}) - [ハンドルバーをC#文字列補間で置き換える
- [
StartAsync()/KillAsync()呼び出しを削除してください。 - [ストリームコピーを
BinaryDataまたはSaveAs()に置き換えてください。
テスティング
- [すべてのPDF生成パスのテスト
- [ヘッダー/フッターレンダリングの検証
- [ページ番号の確認
- [マージン間隔の検証
- [複雑なCSS/JavaScriptページでのテスト
- [ベンチマーク性能
移行後
- [jsreport バイナリファイルの削除
- [不要になった場合は、Node.jsの依存関係を削除してください。
- [デプロイスクリプトの更新
- [ドキュメントの更新
結論
jsreportからIronPDFに移行することで、Node.jsの依存関係、外部バイナリの管理、サーバーのライフサイクル処理の複雑さが解消されます。 冗長なRenderRequestオブジェクトから単純なメソッド呼び出しへのパラダイムシフトは、完全なPDF生成機能を維持しながら、コード量を大幅に削減します。
この移行における主な変更点は以下のとおりです: 1.ランタイム:Node.js + .NET→ Pure .NET 2.サーバープロセス:必須 → インプロセス(排除) 3.バイナリ管理:手動プラットフォームパッケージ → 自動 4.テンプレート作成:JavaScript (ハンドルバー) → C# (文字列補間) 5.APIスタイル:簡潔なリクエストオブジェクト → きれいな流暢メソッド 6.プレースホルダ:<span> class="pageNumber"> → {page}<//code>.
IronPDFドキュメント、チュートリアル、APIリファレンスをすべてご覧になり、jsreportへの移行を加速させてください。






