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

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

ZetPDFからIronPDFへの移行:完全なC#開発者ガイド

ZetPDFは、広く使用されているオープンソースのPDFSharpライブラリの基礎の上に構築されたC#アプリケーション用の商用ライセンスのPDFライブラリです。 ZetPDFは商用サポートと基本的なPDF操作機能を提供しますが、PDFSharpの基盤から重大な制限を受け継いでいます。 最も注目すべき点は、ライブラリが座標ベースのグラフィックス・プログラミングに依存しており、最新の代替ツールと比較してHTMLからPDFへの変換機能が限られていることです。

このガイドでは、ZetPDFからIronPdfへの完全な移行パスを、移行を検討しているプロの.NET開発者のために、ステップバイステップの手順、コード比較、実用的な例とともに提供します。

なぜZetPDFから移行するのか

ZetPDFは、PDFSharpのフォークとして、最新のドキュメント生成ワークフローでの有効性を制限する同じアーキテクチャ上の制約を継承しています。 開発チームが移行を検討する主な理由は次のとおりです:

座標ベースのAPI:ZetPDFは、開発者にすべての要素を正確な座標で配置することを強制します。 各要素を手作業で複雑に配置するため、要件が変わるたびにメンテナンスが必要になります。

限られたCSSサポート: スタイリングシステムがないため、すべての要素のフォントと色を手動で管理する必要があります。

JavaScriptのレンダリングはできません:PDF生成中に動的なWebコンテンツをレンダリングしたり、JavaScriptを実行したりすることはできません。

限られた独自の提供:無償でPDFSharpを直接使用することに比べ、ZetPDFはその商用ライセンスを必要とする説得力のある理由をほとんど提供しません。

手動改ページ:自動ページネーションに頼るのではなく、手動でページのオーバーフローを計算し、管理しなければなりません。

テキスト測定が必要です:テキストの折り返しを手動で計算すると、追加の開発オーバーヘッドが発生します。

基本的な問題

ZetPDFとPDFSharpは、すべての要素を正確な座標で配置することを強制します:

// ZetPDF: マニュアル positioning nightmare
graphics.DrawString("Name:", font, brush, new XPoint(50, 100));
graphics.DrawString("John Doe", font, brush, new XPoint(100, 100));
graphics.DrawString("Address:", font, brush, new XPoint(50, 120));
graphics.DrawString("123 Main St", font, brush, new XPoint(100, 120));
// ... hundreds of lines for a simple form
// ZetPDF: マニュアル positioning nightmare
graphics.DrawString("Name:", font, brush, new XPoint(50, 100));
graphics.DrawString("John Doe", font, brush, new XPoint(100, 100));
graphics.DrawString("Address:", font, brush, new XPoint(50, 120));
graphics.DrawString("123 Main St", font, brush, new XPoint(100, 120));
// ... hundreds of lines for a simple form
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPdfはHTML/CSSを使用し、レイアウトエンジンがすべてを処理します:

// IronPDF: Simple HTML
var html = @"
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
// IronPDF: Simple HTML
var html = @"
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFとZetPDFの比較:機能の比較

アーキテクチャの違いを理解することは、技術的な意思決定者が移行への投資を評価するのに役立ちます:

フィーチャーZetPDFIronPDF
PDFSharpに基づいています。はいなし
HTMLからPDFへの変換制限的はい(フルChromium)
商用ライセンスはい。はい
オープンソース財団PDFSharp(MITライセンス)クロムベース
CSSサポートなし完全なCSS3
JavaScript(ジャバスクリプトなしフルES2024
自動レイアウトなしはい
自動改ページなしはい
テーブルマニュアル図面HTML <コード><テーブル><コード></コード
ヘッダー/フッターマニュアルHTML/CSS
ウォーターマークマニュアルコード内蔵
PDFをマージする制限的はい
PDFを分割する制限的はい
デジタル署名なしはい
PDF/Aなしはい
シンプルさと使いやすさ適度高い

クイックスタートZetPDFからIronPDFへの移行

これらの基本的なステップを踏めば、すぐにでも移行を開始できます。

ステップ 1: NuGet パッケージを置き換える。

ZetPDFを削除してください:

# Remove ZetPDF
dotnet remove package ZetPDF
# Remove ZetPDF
dotnet remove package ZetPDF
SHELL

IronPDFをインストールします:

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

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

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

// Before (ZetPDF)
using ZetPdf;
using ZetPdf.Drawing;
using ZetPdf.Fonts;

// After (IronPDF)
using IronPdf;
// Before (ZetPDF)
using ZetPdf;
using ZetPdf.Drawing;
using ZetPdf.Fonts;

// After (IronPDF)
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ステップ 3: ライセンスの初期化

アプリケーション起動時のライセンス初期化を追加します:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

コード移行の例

HTML を PDF に変換する

HTMLからPDFへの操作は、これらの.NET PDFライブラリ間のAPIの違いを示しています。

ZetPDFのアプローチ:

// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        converter.ConvertHtmlToPdf(htmlContent, "output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        converter.ConvertHtmlToPdf(htmlContent, "output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFのアプローチ:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ZetPDFは、ファイルパスに直接書き込むConvertHtmlToPdf()を持つHtmlToPdfConverterを使用します。 IronPDFはPdfDocumentオブジェクトを返すRenderHtmlAsPdf()を持つChromePdfRendererを提供します。

高度なHTMLからPDFへのシナリオについては、HTMLからPDFへの変換ガイドをご覧ください。

URLをPDFに変換する

URLからPDFへの変換は、パターンの違いを明確に示します。

ZetPDFのアプローチ:

// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var url = "https://www.example.com";
        converter.ConvertUrlToPdf(url, "webpage.pdf");
        Console.WriteLine("PDF from URL created successfully");
    }
}
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var url = "https://www.example.com";
        converter.ConvertUrlToPdf(url, "webpage.pdf");
        Console.WriteLine("PDF from URL created successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFのアプローチ:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var url = "https://www.example.com";
        var pdf = renderer.RenderUrlAsPdf(url);
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("PDF from URL created successfully");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var url = "https://www.example.com";
        var pdf = renderer.RenderUrlAsPdf(url);
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("PDF from URL created successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ZetPDFは、ConvertUrlToPdf()と同じHtmlToPdfConverterクラスを使用しています。 IronPDFはChromePdfRenderer上でRenderUrlAsPdf()を提供し、JavaScriptの実行とモダンなCSSを含む正確なウェブページキャプチャのために完全なChromiumレンダリングエンジンを活用しています。

認証とカスタムヘッダーオプションについては、URL to PDF documentationを参照してください。

複数のPDFをマージする

PDFをマージすると、ドキュメントの処理方法にAPIによる大きな違いがあることがわかります。

ZetPDFのアプローチ:

// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var merger = new PdfMerger();
        var files = new List<string> { "document1.pdf", "document2.pdf" };
        merger.MergeFiles(files, "merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var merger = new PdfMerger();
        var files = new List<string> { "document1.pdf", "document2.pdf" };
        merger.MergeFiles(files, "merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFのアプローチ:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdfs = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        };
        var merged = PdfDocument.Merge(pdfs);
        merged.SaveAs("merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdfs = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        };
        var merged = PdfDocument.Merge(pdfs);
        merged.SaveAs("merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ZetPDFは、MergeFiles()でファイルパスを操作する専用のPdfMergerクラスを使用します。 IronPDFはPdfDocument.FromFile()を使ってPdfDocumentオブジェクトとしてドキュメントをロードし、静的なPdfDocument.Merge()メソッドでそれらをマージします。 このオブジェクト指向のアプローチにより、マージされたドキュメントを保存する前に追加操作を行うことができます。

その他のマージ オプションについては、PDF マージ ドキュメントを参照してください。

座標ベースの描画 vs HTML

座標ベースのグラフィックを使用する既存のZetPDFコードを持つ開発者のための移行パスには、描画コマンドをHTML/CSSに変換することが含まれます。

ZetPDFの座標ベースのアプローチ:

using ZetPdf;
using ZetPdf.Drawing;

var document = new PdfDocument();
var page = document.AddPage();
page.Width = XUnit.FromMillimeter(210);
page.Height = XUnit.FromMillimeter(297);

var graphics = XGraphics.FromPdfPage(page);
var titleFont = new XFont("Arial", 24, XFontStyle.Bold);
var bodyFont = new XFont("Arial", 12);

graphics.DrawString("Company Report", titleFont, XBrushes.Navy,
    new XPoint(50, 50));
graphics.DrawString("This is the introduction paragraph.", bodyFont, XBrushes.Black,
    new XPoint(50, 80));
graphics.DrawString("Generated: " + DateTime.Now.ToString(), bodyFont, XBrushes.Gray,
    new XPoint(50, 100));

document.Save("report.pdf");
using ZetPdf;
using ZetPdf.Drawing;

var document = new PdfDocument();
var page = document.AddPage();
page.Width = XUnit.FromMillimeter(210);
page.Height = XUnit.FromMillimeter(297);

var graphics = XGraphics.FromPdfPage(page);
var titleFont = new XFont("Arial", 24, XFontStyle.Bold);
var bodyFont = new XFont("Arial", 12);

graphics.DrawString("Company Report", titleFont, XBrushes.Navy,
    new XPoint(50, 50));
graphics.DrawString("This is the introduction paragraph.", bodyFont, XBrushes.Black,
    new XPoint(50, 80));
graphics.DrawString("Generated: " + DateTime.Now.ToString(), bodyFont, XBrushes.Gray,
    new XPoint(50, 100));

document.Save("report.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF HTMLアプローチ:

using IronPdf;

var html = $@"
<html>
<head>
    <style>
        body {{ font-family: Arial, sans-serif; padding: 50px; }}
        h1 {{ color: navy; }}
        .date {{ color: gray; }}
    </style>
</head>
<body>
    <h1>Company Report</h1>
    <p>This is the introduction paragraph.</p>
    <p class='date'>Generated: {DateTime.Now}</p>
</body>
</html>";

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");
using IronPdf;

var html = $@"
<html>
<head>
    <style>
        body {{ font-family: Arial, sans-serif; padding: 50px; }}
        h1 {{ color: navy; }}
        .date {{ color: gray; }}
    </style>
</head>
<body>
    <h1>Company Report</h1>
    <p>This is the introduction paragraph.</p>
    <p class='date'>Generated: {DateTime.Now}</p>
</body>
</html>";

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ZetPDFのアプローチでは、フォントオブジェクトを作成し、正確なピクセル位置を計算し、グラフィックのコンテキストを手動で管理する必要があります。 IronPdfのアプローチでは、ウェブ開発者がすでに知っている標準的なHTMLとCSSを使用しています。フォント、色、レイアウトは使い慣れたCSSプロパティで処理されます。

ZetPDFAPIからIronPDFへのマッピングリファレンス

このマッピングは、APIと同等のものを直接示すことで、移行を加速します:

ZetPDFIronPDFノート
new PdfDocument().new ChromePdfRenderer().レンダラーの作成
document.AddPage()自動翻訳HTMLから作成されたページ
XGraphics.FromPdfPage(page).該当なし代わりにHTML/CSSを使用してください
<コード>graphics.DrawString()</コードHTMLテキスト要素<p><h1>など。
<コード>graphics.DrawImage()</コード<img>タグHTML画像
<コード>graphics.DrawLine()</コードCSSボーダーまたは<hr>
<コード>graphics.DrawRectangle()</コード></コードCSS <コード>border</コード> + <コード>div</コードHTMLボックス
new XFont().CSS <コード>font-family</コード対応ウェブフォント
<コード>XBrushes.Black</コードCSS <コード>カラー</コードフルカラー対応
<コード>document.Save()</コード<コード>pdf.SaveAs()</コードファイルに保存
<コード>PdfReader.Open()</コードPdfDocument.FromFile()を使用してください。既存のPDFを読み込む
<コード>HtmlToPdfConverter</コード<コード>ChromePdfRenderer</コードHTML変換
ConvertHtmlToPdf()を使用してください。<コード>RenderHtmlAsPdf()</コードHTML文字列からPDFへ
ConvertUrlToPdf()を使用してください。RenderUrlAsPdf()を使用してください。URLからPDFへ
<コード>PdfMerger</コードPdfDocument.Merge()を使用してください。PDFの結合

一般的な移行の問題と解決策

課題1: 座標ベースのレイアウト

ZetPDF:すべてにおいて、正確なX,Y座標と手動での位置決めが必要です。

ソリューション: HTML/CSSフローレイアウトを使用する。 絶対位置指定が必要な場合は、CSSを使用してください:

.positioned-element {
    position: absolute;
    top: 100px;
    left: 50px;
}

課題2:フォントオブジェクト管理

ZetPDF:フォントのバリエーションごとにXFontオブジェクトを作成します。

ソリューション: CSS font-familyを使用してください:

<style>
    body { font-family: Arial, sans-serif; }
    h1 { font-family: 'Times New Roman', serif; font-size: 24px; font-weight: bold; }
</style>
<style>
    body { font-family: Arial, sans-serif; }
    h1 { font-family: 'Times New Roman', serif; font-size: 24px; font-weight: bold; }
</style>
HTML

課題3: カラーハンドリング

ZetPDF:XBrushesとカラーオブジェクトを使用してください。

解決策:標準的なCSSの色を使用する:

.header { color: navy; background-color: #f5f5f5; }
.warning { color: rgb(255, 0, 0); }

課題4:マニュアルの改ページ

ZetPDF:Y位置を追跡し、コンテンツがオーバーフローしたときに手動で新しいページを作成します。

ソリューション: IronPDFは自動改ページを処理します。 明示的な制御にはCSSを使用してください:

.section { page-break-after: always; }
.keep-together { page-break-inside: avoid; }

課題5:テーブルの作成

ZetPDF:長方形、線、テキストの位置決めを手動で描画する必要があります。

ソリューション: CSSスタイリングで標準的なHTMLテーブルを使用してください:

<table style="border-collapse: collapse; width: 100%;">
    <tr>
        <th style="border: 1px solid black; padding: 8px;">Header</th>
    </tr>
    <tr>
        <td style="border: 1px solid black; padding: 8px;">Data</td>
    </tr>
</table>
<table style="border-collapse: collapse; width: 100%;">
    <tr>
        <th style="border: 1px solid black; padding: 8px;">Header</th>
    </tr>
    <tr>
        <td style="border: 1px solid black; padding: 8px;">Data</td>
    </tr>
</table>
HTML

ZetPDF移行チェックリスト

マイグレーション前のタスク

コードベースを監査して、すべてのZetPDFの使用方法を確認してください:

grep -r "using ZetPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|PdfMerger\|XGraphics" --include="*.cs" .
grep -r "using ZetPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|PdfMerger\|XGraphics" --include="*.cs" .
SHELL

HTMLへの変換が必要な座標ベースの描画コードを文書化すること。 フォントと色の使用パターンに注意してください。 レイアウト構造をHTMLに対応させる。

コード更新タスク

1.ZetPDF NuGetパッケージの削除 2.IronPdf NuGetパッケージをインストールする 3.名前空間のインポートをZetPDFからIronPdfに更新してください。 4.HtmlToPdfConverterChromePdfRendererに置き換えてください。 5.ConvertHtmlToPdf()コールをRenderHtmlAsPdf() + SaveAs()に変換する。 6.ConvertUrlToPdf()コールをRenderUrlAsPdf() + SaveAs()に変換する。 7.PdfMerger.MergeFiles()PdfDocument.Merge()を使用してください。に置き換えてください。 8.DrawString()コールをHTMLテキスト要素に変換する 9.XFontを CSS font-familyに変換してください。 10.XBrushesをCSSカラーに置き換える 11.起動時にIronPDFライセンスの初期化を追加する

移行後のテスト

移行後、これらの点を検証してください:

  • ビジュアル出力を比較し、外観が一致または改善されていることを確認します。
  • CSSスタイリングでフォントが期待通りに表示されることを確認する。
  • 自動ページネーションで改ページが正しく行われることをテストする
  • 画像が正しく配置され、表示されていることを確認する
  • PDF のマージ操作が正しい出力を生成することをテストする
  • すべての既存機能が新しい実装で動作することを確認する。

IronPDFに移行する主な利点

ZetPDFからIronPDFに移行することで、いくつかの重要な利点が得られます:

最新のChromiumレンダリングエンジン: IronPDFはHTMLからPDFへの変換にChromiumを使用し、CSS3とES2024 JavaScriptの完全なサポートを保証します。 最新のフレームワークとレスポンシブデザインを正しくレンダリングすること。

HTMLベースのコンテンツ作成:ウェブ開発者は、既存のHTMLとCSSのスキルを活用できます。 座標ベースの描画APIを学んだり、フォント・オブジェクトを管理したりする必要はありません。

自動レイアウトとページネーション:テキストの折り返し、改ページ、フローレイアウトは自動的に行われます。 要素の位置を手動で計算する必要はありません。

簡略化されたAPI:一般的な操作のための単一メソッド呼び出し。 PdfDocument.Merge()は、複雑なファイルパスの処理パターンを置き換えます。

アクティブ開発:2026年まで.NET 10とC# 14の採用が増加する中、IronPDFの定期的なアップデートは現在と将来の.NETバージョンとの互換性を保証します。

包括的な機能セット:組み込みの透かし、電子署名、PDF/Aコンプライアンス、ZetPDFに欠けている高度なPDF操作機能。

結論

ZetPDFは、そのPDFSharp基盤を通して基本的なPDF操作機能を提供します。 しかし、座標ベースのグラフィックス・プログラミング・アプローチ、限られたHTMLサポート、最新機能の欠如が、文書生成タスクに不必要な複雑さを生み出しています。

IronPdfはPDFの生成をグラフィックプログラミングの練習から、慣れ親しんだHTML/CSS開発に変えます。 NuGetパッケージを置き換え、コンバータクラスを更新し、コンテンツ作成にHTMLを活用する。

IronPDFの無料トライアルで今すぐ移行を開始し、Chromiumベースのドキュメント生成のシンプルさを体験してください。

包括的な実装ガイダンスについては、IronPDFドキュメントチュートリアルをご覧ください。

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

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

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