IRONSOFTWAREHOME
ビデオ

How to set fonts in PDFs C#

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

jsreportからIronPDFへの移行は、あなた for .NET PDFワークフローを、外部バイナリ管理と個別のサーバープロセスによるNode.js依存のシステムから、完全にプロセス内で実行される純粋な.NETライブラリへと変えます。 このガイドでは、.NETのプロフェッショナルな開発者向けに、インフラの複雑さやJavaScriptのテンプレート要件を排除する包括的な移行パスを、ステップバイステップで提供します。

なぜjsreportからIronPDFに移行するのか

jsreportの課題

jsreportは、純粋な.NET環境にはない複雑さをもたらします:

  1. Node.js の依存関係: Node.jsランタイムとバイナリが必要なため、単純な.NETアプリケーションであるはずのインフラストラクチャが複雑になります。

  2. 外部バイナリ管理: Windows、Linux、OSX用のプラットフォーム固有のバイナリを個別のNuGetパッケージを通じてダウンロードし、管理する必要があります (jsreport.Binary, jsreport.Binary.Linux, jsreport.Binary.OSX)。

  3. 別のサーバープロセス: ユーティリティまたはWebサーバーとして実行し、追加のプロセス管理がKillAsync()ライフサイクルメソッドで必要です。

  4. **JavaScriptテンプレート:**ネイティブの C# 機能を使用する代わりに、Handlebars、JsRender、またはその他 for JavaScriptテンプレート システムを学習する必要があります。

  5. 複雑なリクエスト構造: 最小限のPDF生成でさえ、入れ子のRenderRequestオブジェクトを必要とします。

  6. ライセンスの制限: 無料ティアは1インスタンスあたり5テンプレートに制限されています; それを超える商用利用にはEnterpriseライセンス(インスタンスあたり年間$395)またはEnterprise Scale(インスタンス全体にわたるロイヤリティフリー、年間$1,295)が必要です。 jsreport.net/buyをご覧ください。

7.**ストリームベースの出力:**手動のファイル操作とメモリ ストリーム管理を必要とするストリームを返します。

jsreportとIronPDFの比較

フィーチャーjsreportIronPDF
ランタイムNode.js + .NET純粋な.NET
バイナリ管理マニュアル(jsreport.Binaryパッケージ)自動翻訳
サーバープロセス必須(ユーティリティまたはウェブサーバ)進行中
テンプレート作成JavaScript(ハンドルバーなど)C# (Razor、文字列補間)
APIスタイル冗長なリクエストオブジェクトクリーンで流暢なメソッド
アウトプットストリームPdfDocument オブジェクト
PDF操作制限的広範囲(マージ、分割、編集)
非同期サポート非同期のみ同期と非同期の両方

IronPDFは、.NET 10およびC# 14の採用を計画するチームに対して、外部ランタイム依存性なしでネイティブ.NET基盤を提供します。


マイグレーションの複雑さの評価

機能別の見積もり作業

フィーチャー移行の複雑さ
HTMLからPDFへ低レベル
URLからPDFへ低レベル
ヘッダー/フッター低レベル
ページ設定低レベル
サーバーライフサイクル低レベル
バイナリ管理低レベル

パラダイムシフト

この jsreport 移行における基本的な変化は、サーバー管理を伴う冗長なリクエスト オブジェクトから、単純なインプロセス メソッド呼び出しへの変更です。

jsreport:  LocalReporting().UseBinary().AsUtility().Create() → RenderAsync(RenderRequest) →ストリーム→ File
IronPDF:   ChromePdfRenderer → RenderHtmlAsPdf(html) → SaveAs()
Text

始める前に

前提条件

  1. .NET環境: .NET Framework 4.6.2+ または.NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGetアクセス: NuGetパッケージをインストールする機能
  3. IronPDFライセンス: IronPDFからライセンスキーを取得します。

NuGetパッケージの変更

# Remove jsreport packages
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
SHELL

ライセンス構成

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

jsreportの使用法を特定する

# Find all jsreport references
grep -r "using jsreport\|LocalReporting\|RenderRequest\|RenderAsync" --include="*.cs" .
grep -r "JsReportBinary\|Template\|Recipe\|Engine\." --include="*.cs" .
SHELL

完全な API リファレンス

クラスマッピング

jsreportクラスIronPDF 同等物
LocalReportingChromePdfRenderer
ReportingServiceChromePdfRenderer
RenderRequestメソッドのパラメータ
Templateメソッドのパラメータ
ChromeRenderingOptions
ReportPdfDocument
Engine(不要)

メソッドマッピング

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 同等物
Template.ContentRenderHtmlAsPdf()への最初のパラメータ
Template.Recipe = Recipe.ChromePdf(不要)
Template.Engine = Engine.None(不要)
Chrome.HeaderTemplateRenderingOptions.TextHeader または HtmlHeader
Chrome.FooterTemplateRenderingOptions.TextFooter または HtmlFooter
Chrome.DisplayHeaderFooter(自動)
Chrome.MarginTopRenderingOptions.MarginTop

プレースホルダーのマッピング(ヘッダー/フッター)

jsreportプレースホルダIronPDF プレースホルダー
<span class='pageNumber'></span>{page}
<span class='totalPages'></span>{total-pages}
{#pageNum}{page}
{#numPages}{total-pages}
{#timestamp}{date}

コード移行の例

例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!");
    }
}

翻訳後(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!");
    }
}

jsreportのアプローチは、3つのNuGetパッケージ (jsreport.Binary, jsreport.Local, jsreport.Types)、3つの名前空間インポート、非同期のみの実行、流暢なビルダーチェーン (usingブロックでストリームからファイルへの手動コピーを必要とします。

IronPDFはこれを1つのNuGetパッケージ、1つの名前空間、3行のコード、そして同期実行に削減します。 ChromePdfRenderer.RenderHtmlAsPdf() メソッドはHTMLを直接受け取り、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!");
    }
}

翻訳後(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!");
    }
}

jsreportはリクエストにChrome.Urlを設定することでURLをレンダリングできますが、トップレベルの便利なメソッドはありません。そして、既存のコードの一般的なパターンである上記 for JavaScriptリダイレクトの回避策 (window.location='https://example.com') は、スクリプトナビゲーションをブロックするサイトでは失敗する可能性があります。

IronPDFはURLを直接引数として受け取り、完全なJavaScriptの実行とモダンCSSのサポートを備えた専用のRenderUrlAsPdf()メソッドを提供します。 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!");
    }
}

翻訳後(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!");
    }
}

jsreportのアプローチはDisplayHeaderFooter = trueを設定し、特別なCSSクラスプレースホルダー (<span class='pageNumber'></span>, <span class='totalPages'></span>) を持つHTMLテンプレートを使用する必要があります。 ヘッダーとフッターのテンプレートには、完全なインラインスタイルが含まれている必要があります。

IronPDFはCenterText, LeftText, RightText, FontSizeの専用プロパティを備えています。 ページ番号のプレースホルダーは、よりシンプルな{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();

IronPDFは完全にインプロセスで実行され、サーバーの起動、プロセス管理、クリーンアップは必要ありません:

// IronPDF:
var renderer = new ChromePdfRenderer();
// Just use it—no lifecycle management needed

プラットフォーム固有のバイナリ パッケージの削除

jsreportは、ターゲットプラットフォームごとに個別のNuGetパッケージを必要とします:

# DELETE these platform-specific packages:
dotnet remove package jsreport.Binary
dotnet remove package jsreport.Binary.Linux
dotnet remove package jsreport.Binary.OSX
SHELL

IronPDFは単一のNuGetパッケージを通してすべてのプラットフォーム要件を自動的に処理します。

プレースホルダ構文の更新

jsreportは、CSSのクラスベースまたは中括弧プレースホルダを使用します。 IronPDFは異なる構文を使用します:

// jsreport placeholders:
"<span class='pageNumber'></span>"  // or {#pageNum}
"<span class='totalPages'></span>"  // or {#numPages}

//IronPDFplaceholders:
"{page}"
"{total-pages}"
"{date}"
"{html-title}"
C#

HandlebarsをC#文字列補間に置き換え

jsreportはEngine.Handlebarsを使用したハンドルバーテンプレートをよく使用します。

// jsreport Handlebars (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);
C#

ストリーム処理を簡素化する

jsreportは、手動でのコピーが必要なストリームを返します:

// jsreport stream 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;
C#

トラブルシューティング

問題 1: LocalReporting が見つかりません

問題: IronPDFには存在しないLocalReportingクラスがコードで参照されています。

解決策: ChromePdfRendererで置き換えます。

// jsreport
var rs = new LocalReporting().UseBinary().AsUtility().Create();

// IronPDF
var renderer = new ChromePdfRenderer();

問題 2: RenderRequest が見つかりません

問題: コードがTemplateラッパーオブジェクトを使用しています。

解決策: HTML をレンダリング メソッドに直接渡します。

// jsreport
await rs.RenderAsync(new RenderRequest { Template = new Template { Content = html } });

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);

課題3:ページ番号が表示されない

問題: jsreportプレースホルダー構文<span class='pageNumber'></span>を使用しています。

解決策: IronPDFプレースホルダー構文を更新します。

// jsreport syntax (won't work)
"Page <span class='pageNumber'></span> of <span class='totalPages'></span>"

//IronPDFsyntax
"Page {page} of {total-pages}"
C#

課題4: JsReportBinaryが見つかりません

問題: コードがJsReportBinary.GetBinary()を参照しています。

**解決策:**完全に削除します。IronPDFは外部バイナリを必要としません。

// DELETE this jsreport pattern:
.UseBinary(JsReportBinary.GetBinary())

//IronPDFneeds nothing—just create the renderer:
var renderer = new ChromePdfRenderer();
C#

移行チェックリスト

移行前

  • すべてのjsreportusing文を特定します
  • Handlebars/JsRender を使用したリスト テンプレート (C# 文字列補間に変換)
  • 現在使用されている Chrome オプション (余白、用紙サイズ) を文書化します
  • Web サーバーとユーティリティ モードを確認します (両方ともインプロセスになります)
  • プラットフォーム固有のバイナリパッケージをメモする(すべて削除)
  • IronPDFライセンスキーを取得する

パッケージの変更

  • jsreport.Binaryパッケージを削除します
  • jsreport.Binary.Linuxパッケージを削除します
  • jsreport.Binary.OSXパッケージを削除します
  • jsreport.Localパッケージを削除します
  • jsreport.Typesパッケージを削除します
  • jsreport.Clientパッケージを削除します
  • IronPdfパッケージをインストールします

コードの変更

  • 起動時にライセンスキー設定を追加する
  • ChromePdfRendererに置き換えます
  • RenderRequestラッパーを削除します
  • Templateラッパーを削除します
  • プレースホルダー構文を更新します (<span class='pageNumber'>{page})
  • ハンドルバーをC#の文字列補間に置き換える
  • StartAsync() / KillAsync()呼び出しを削除します
  • ストリームのコピーをSaveAs()に置き換えます

テスティング

  • すべてのPDF生成パスをテストする
  • ヘッダー/フッターのレンダリングを確認する
  • ページ番号を確認する
  • 余白間隔を検証する
  • 複雑なCSS/JavaScriptページでのテスト
  • ベンチマークパフォーマンス

移行後

  • jsreportバイナリファイルを削除する
  • 不要になった場合はNode.jsの依存関係を削除します
  • デプロイメントスクリプトを更新する
  • ドキュメントの更新

ご注意: jsreportはその所有者の登録商標です。 このサイトはjsreportと提携しておらず、jsreportによって承認されておらず、スポンサーされていません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。
Curtis Chau
テクニカルライター

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

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。