フッターコンテンツにスキップ
移行ガイド

C#でDynamicPDFからIronPDFに移行する方法

なぜDynamicPDFからIronPDFに移行するのですか?

DynamicPDFの製品の断片化は、移行の主な原動力となっています。 ライセンスモデルを理解することは、現在の実装の真のコストを評価するために不可欠です。

製品の断片化の問題

DynamicPDFは、別々のライセンスで別々の製品として販売されています:

  1. DynamicPDF Generator: PDFをゼロから作成
  2. DynamicPDF Merger:既存のPDFを結合、分割、操作します(別途購入)
  3. DynamicPDF Core Suite:ジェネレータとマージャーの統合
  4. DynamicPDF ReportWriter:レポート生成
  5. DynamicPDF HTML Converter: HTMLからPDFへの変換(別アドオン)
  6. DynamicPDF Print Manager:プログラムでPDFを印刷する

完全なPDFソリューションには、DynamicPDFの3-5ライセンスが必要です。 IronPDFは1つのパッケージにすべてを含んでいます。

アーキテクチャの比較

アスペクト ダイナミックPDF IronPDF
製品モデル 断片的(5つ以上の製品) オールインワンライブラリ
ライセンスについて 複数のライセンスが必要 シングルライセンス
HTMLからPDFへ 別途アドオン購入 組み込み、Chromiumベース
CSSサポート 制限付き(アドオンが必要です) フルCSS3とFlexbox/Grid
APIスタイル 座標ベースのポジショニング HTML/CSS + 操作API
ラーニングカーブ Steep(複数のAPI) ジェントル(ウェブ技術)
モダン.NET .NET Standard 2.0 .NET 6/7/8/9+ ネイティブ

主な移行のメリット

1.単一パッケージ: 1つのNuGetパッケージで3~5個のDynamicPDFパッケージを置き換える 2.最新のレンダリング: Chromium エンジンと従来のレンダリング

  1. Webテクノロジー:座標ベースの配置の代わりにHTML/CSSを使用する 4.よりシンプルなAPI:コードが少なくなり、読みやすくなり、メンテナンスが容易になります 5.アドオン購入なし: HTML、マージ、セキュリティがすべて含まれています

移行前の準備

前提条件

あなたの環境がこれらの要件を満たしていることを確認してください:

  • .NET Framework 4.6.2+または.NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+またはC#拡張機能付きVS Code
  • NuGetパッケージマネージャへのアクセス
  • IronPDFライセンスキー (ironpdf.com にて無料トライアル可能)

DynamicPDFの使用状況を監査する

ソリューションディレクトリで以下のコマンドを実行して、すべてのDynamicPDF参照を確認してください:

# Find allダイナミックPDFreferences
grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" .

# Check NuGet packages
dotnet list package | grep -i dynamic
# Find allダイナミックPDFreferences
grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" .

# Check NuGet packages
dotnet list package | grep -i dynamic
SHELL

一般的なパッケージ

  • ceTe.DynamicPDF.CoreSuite.NET
  • ceTe.DynamicPDF.Generator.NET
  • ceTe.DynamicPDF.Merger.NET
  • ceTe.DynamicPDF.HtmlConverter.NET

パラダイムシフトを理解する

DynamicPDFからIronPDFへの移行で最も大きな変更は、ドキュメント作成の基本的なアプローチです。 DynamicPDFは、ページ上の特定のX,Y座標に要素を配置する座標ベースのポジショニングを使用します。 IronPDFはHTML/CSSレンダリングを使用し、ウェブテクノロジーでデザインします。

このパラダイムシフトは、LabelTextAreaTable2要素を同等のHTML要素に変換することを意味します。

ステップごとの移行プロセス

ステップ 1: NuGet パッケージを更新する

すべてのDynamicPDFパッケージを削除し、IronPDFをインストールしてください:

# RemoveダイナミックPDFpackages
dotnet remove package ceTe.DynamicPDF.CoreSuite.NET
dotnet remove package ceTe.DynamicPDF.Generator.NET
dotnet remove package ceTe.DynamicPDF.Merger.NET
dotnet remove package ceTe.DynamicPDF.HtmlConverter.NET

# Install IronPDF
dotnet add package IronPdf
# RemoveダイナミックPDFpackages
dotnet remove package ceTe.DynamicPDF.CoreSuite.NET
dotnet remove package ceTe.DynamicPDF.Generator.NET
dotnet remove package ceTe.DynamicPDF.Merger.NET
dotnet remove package ceTe.DynamicPDF.HtmlConverter.NET

# Install IronPDF
dotnet add package IronPdf
SHELL

ステップ 2: 名前空間参照の更新

DynamicPDF名前空間をIronPDFに置き換えてください:

// Remove these
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;
using ceTe.DynamicPDF.Conversion;

// Add this
using IronPdf;
// Remove these
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;
using ceTe.DynamicPDF.Conversion;

// Add this
using IronPdf;
$vbLabelText   $csharpLabel

ステップ 3: ライセンスの設定

// 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";
$vbLabelText   $csharpLabel

完全な API 移行のリファレンス

コア クラス マッピング

DynamicPDFクラス IronPDF 同等物 ノート
ドキュメント ChromePdfRenderer 新しいPDFを作成する場合
ドキュメント PdfDocument 既存のPDFを操作する場合
ページ HTML <div>(改ページ付き または複数のレンダリング
MergeDocument PdfDocument.Merge()を使用してください。 静的マージ方式
HtmlConverter ChromePdfRenderer 組み込み、アドオンなし

ページ要素と HTML のマッピング

DynamicPDF ページ要素 IronPDF/HTMLに相当するもの
ラベル <p><span><div>
テキストエリア <div>, <p> with CSS
イメージ <img>タグ
表2 HTML <テーブル><code>
ページ番号ラベル {page}</code> /{total-pages}`プレースホルダ

主な API マッピング

ダイナミックPDF IronPDF ノート
ドキュメント + ページ|ChromePdfRenderer` HTMLベースの生成
ラベル</code>, <code>テキストエリア HTML <p><div> CSSによるスタイル
表2 HTML <テーブル><code> 完全なCSSスタイリング
MergeDocument PdfDocument.Merge()を使用してください。 静的メソッド
HtmlConverter ChromePdfRenderer 組み込み、アドオンなし
document.Draw() pdf.SaveAs() / pdf.BinaryData<//code
PageNumberingLabel</code> <code>%%CP%% {ページ}プレースホルダ 異なる構文

コード移行の例

HTMLからPDFへの変換

HTMLからPDFへの変換は、DynamicPDFのHtmlConverterアドオンとIronPDFの内蔵Chromiumレンダリングの必要性を示しています。

DynamicPDFの実装:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Conversion;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        HtmlConverter converter = new HtmlConverter(html);
        converter.Convert("output.pdf");
    }
}
// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Conversion;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        HtmlConverter converter = new HtmlConverter(html);
        converter.Convert("output.pdf");
    }
}
$vbLabelText   $csharpLabel

IronPDFの実装:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

IronPdfのChromePdfRendererはCSS3を完全にサポートしたChromiumベースのレンダリングを提供します。 その他のオプションについては、HTML to PDF documentationを参照してください。

複数のPDFをマージする

PDFのマージでは、DynamicPDFのMergeDocumentクラス(Merger製品ライセンスが必要)とIronPDFの組み込み静的Mergeメソッドの違いを示しています。

DynamicPDFの実装:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Merger;

class Program
{
    static void Main()
    {
        MergeDocument document = new MergeDocument("document1.pdf");
        document.Append("document2.pdf");
        document.Draw("merged.pdf");
    }
}
// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Merger;

class Program
{
    static void Main()
    {
        MergeDocument document = new MergeDocument("document1.pdf");
        document.Append("document2.pdf");
        document.Draw("merged.pdf");
    }
}
$vbLabelText   $csharpLabel

IronPDFの実装:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
$vbLabelText   $csharpLabel

IronPDFの静的なMergeメソッドは複数のPdfDocumentオブジェクトを直接受け入れます。 その他のオプションについては、 PDF 結合のドキュメントを参照してください。

PDFにテキストを追加する

テキストの配置はDynamicPDFの座標ベースのLabel要素からIronPDFのHTMLベースのTextStamperへのパラダイムシフトを示しています。

DynamicPDFの実装:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;

class Program
{
    static void Main()
    {
        Document document = new Document();
        Page page = new Page(PageSize.Letter);
        Label label = new Label("Hello from DynamicPDF!", 0, 0, 504, 100);
        page.Elements.Add(label);
        document.Pages.Add(page);
        document.Draw("output.pdf");
    }
}
// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;

class Program
{
    static void Main()
    {
        Document document = new Document();
        Page page = new Page(PageSize.Letter);
        Label label = new Label("Hello from DynamicPDF!", 0, 0, 504, 100);
        page.Elements.Add(label);
        document.Pages.Add(page);
        document.Draw("output.pdf");
    }
}
$vbLabelText   $csharpLabel

IronPDFの実装:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalAlignment = VerticalAlignment.Top
        };
        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalAlignment = VerticalAlignment.Top
        };
        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

IronPDFのTextStamperは座標ベースの配置ではなく、アライメントベースの配置を提供し、異なるページサイズにレイアウトをより適応させます。 その他のオプションについては、watermark and stamping documentationを参照してください。

完全なドキュメント生成例

この包括的な例では、複数の要素を持つDynamicPDFドキュメントをIronPDFのHTMLアプローチに変換しています。

DynamicPDFの実装:

using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;

// Generation (requires Generator license)
Document document = new Document();
Page page = new Page(PageSize.A4);
Label title = new Label("Invoice Report", 0, 0, 595, 30, Font.HelveticaBold, 18);
title.Align = TextAlign.Center;
page.Elements.Add(title);

Table2 table = new Table2(40, 60, 515, 500);
// ... complex table setup with columns, rows, cells...
page.Elements.Add(table);
document.Pages.Add(page);
document.Draw("invoice.pdf");

// Merging (requires Merger license)
MergeDocument mergeDoc = new MergeDocument("cover.pdf");
mergeDoc.Append("invoice.pdf");
mergeDoc.Draw("final.pdf");
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;

// Generation (requires Generator license)
Document document = new Document();
Page page = new Page(PageSize.A4);
Label title = new Label("Invoice Report", 0, 0, 595, 30, Font.HelveticaBold, 18);
title.Align = TextAlign.Center;
page.Elements.Add(title);

Table2 table = new Table2(40, 60, 515, 500);
// ... complex table setup with columns, rows, cells...
page.Elements.Add(table);
document.Pages.Add(page);
document.Draw("invoice.pdf");

// Merging (requires Merger license)
MergeDocument mergeDoc = new MergeDocument("cover.pdf");
mergeDoc.Append("invoice.pdf");
mergeDoc.Draw("final.pdf");
$vbLabelText   $csharpLabel

IronPDFの実装:

using IronPdf;

var renderer = new ChromePdfRenderer();

// All features in one library
var html = @"
<html>
<head>
    <style>
        body { font-family: Helvetica, sans-serif; padding: 40px; }
        h1 { text-align: center; font-size: 18pt; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
    </style>
</head>
<body>
    <h1>Invoice Report</h1>
    <table>
        <tr><th>Product</th><th>Qty</th><th>Price</th></tr>
        <tr><td>Widget</td><td>10</td><td>$99.99</td></tr>
    </table>
</body>
</html>";

var invoice = renderer.RenderHtmlAsPdf(html);

// Merging included - no separate license
var cover = PdfDocument.FromFile("cover.pdf");
var final = PdfDocument.Merge(cover, invoice);
final.SaveAs("final.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// All features in one library
var html = @"
<html>
<head>
    <style>
        body { font-family: Helvetica, sans-serif; padding: 40px; }
        h1 { text-align: center; font-size: 18pt; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
    </style>
</head>
<body>
    <h1>Invoice Report</h1>
    <table>
        <tr><th>Product</th><th>Qty</th><th>Price</th></tr>
        <tr><td>Widget</td><td>10</td><td>$99.99</td></tr>
    </table>
</body>
</html>";

var invoice = renderer.RenderHtmlAsPdf(html);

// Merging included - no separate license
var cover = PdfDocument.FromFile("cover.pdf");
var final = PdfDocument.Merge(cover, invoice);
final.SaveAs("final.pdf");
$vbLabelText   $csharpLabel

重要な移行に関する注意事項

座標ベースから HTML/CSS ポジショニングへ

根本的なパラダイムシフトとして、X,Y座標のポジショニングをCSSベースのレイアウトに変換する必要があります:

//ダイナミックPDF- coordinate-based
var label = new Label("Hello World", 100, 200, 300, 50);

//IronPDF- CSS positioning (if absolute positioning needed)
var html = "<div style='position:absolute; left:100px; top:200px; width:300px;'>Hello World</div>";

//IronPDF- preferred approach (flow-based)
var html = "<div style='margin-left:100px; margin-top:200px;'>Hello World</div>";
//ダイナミックPDF- coordinate-based
var label = new Label("Hello World", 100, 200, 300, 50);

//IronPDF- CSS positioning (if absolute positioning needed)
var html = "<div style='position:absolute; left:100px; top:200px; width:300px;'>Hello World</div>";

//IronPDF- preferred approach (flow-based)
var html = "<div style='margin-left:100px; margin-top:200px;'>Hello World</div>";
$vbLabelText   $csharpLabel

ページ番号の構文

DynamicPDFとIronPDFはページ番号に異なるプレースホルダー構文を使用します:

//ダイナミックPDFplaceholders
"Page %%CP%% of %%TP%%"

//IronPDFplaceholders
"Page {page} of {total-pages}"
//ダイナミックPDFplaceholders
"Page %%CP%% of %%TP%%"

//IronPDFplaceholders
"Page {page} of {total-pages}"
$vbLabelText   $csharpLabel

ヘッダーとフッター

DynamicPDF Template要素をIronPDF HtmlHeaderFooterに変換します:

//IronPDFheader/footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
//IronPDFheader/footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
$vbLabelText   $csharpLabel

その他のヘッダー/フッターオプションについては、headers and footers documentationを参照してください。

セキュリティ設定

//IronPDFsecurity
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.UserPassword = "userPassword";
//IronPDFsecurity
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.UserPassword = "userPassword";
$vbLabelText   $csharpLabel

包括的なセキュリティ オプションについては、暗号化のドキュメントを参照してください。

移行後のチェックリスト

コードの移行が完了したら、以下を確認してください:

  • 生成されたPDFの視覚的な比較
  • テキストの位置とレイアウトを確認する
  • テストテーブルのレンダリングとオーバーフロー
  • すべてのページのヘッダー/フッターを確認する
  • フォーム入力機能をテストする
  • セキュリティ/暗号化を確認する
  • パフォーマンスベンチマーク
  • 未使用のDynamicPDFライセンスファイルを削除する
  • ドキュメントの更新

PDFインフラストラクチャの将来性を確保する

.NET 10が目前に迫り、C# 14が新しい言語機能を導入する中、最新の.NETパターンを取り入れたPDFライブラリを選択することで、長期的な互換性を確保できます。IronPDFは.NET 6/7/8/9+をネイティブサポートしているため、プロジェクトが2025年や2026年に拡張されても、複数の製品ライセンスを管理したり、断片化されたAPIをナビゲートするような複雑な作業をすることなく、明確に前進することができます。

その他のリソース


DynamicPDFからIronPDFに移行することで、最新のChromiumベースのレンダリングと完全なCSS3サポートを提供しながら、複数の製品ライセンスを管理する複雑さを解消します。 座標ベースの位置決めからHTML/CSS設計への移行は、通常、慣れ親しんだウェブ技術を活用した、より保守性の高いコードにつながります。

カーティス・チャウ
テクニカルライター

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

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。