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 formIRON VB CONVERTER ERROR developers@ironsoftware.comIronPdfは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.comIronPDFとZetPDFの比較:機能の比較
アーキテクチャの違いを理解することは、技術的な意思決定者が移行への投資を評価するのに役立ちます:
| フィーチャー | ZetPDF | IronPDF |
|---|---|---|
| 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 ZetPDFIronPDFをインストールします:
# Install IronPDF
dotnet add package IronPdf# Install IronPDF
dotnet add package IronPdfステップ 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ステップ 3: ライセンスの初期化
アプリケーション起動時のライセンス初期化を追加します:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"コード移行の例
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.comIronPDFのアプローチ:
// 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.comZetPDFは、ファイルパスに直接書き込む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.comIronPDFのアプローチ:
// 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.comZetPDFは、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.comIronPDFのアプローチ:
// 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.comZetPDFは、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.comIronPDF 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.comZetPDFのアプローチでは、フォントオブジェクトを作成し、正確なピクセル位置を計算し、グラフィックのコンテキストを手動で管理する必要があります。 IronPdfのアプローチでは、ウェブ開発者がすでに知っている標準的なHTMLとCSSを使用しています。フォント、色、レイアウトは使い慣れたCSSプロパティで処理されます。
ZetPDFAPIからIronPDFへのマッピングリファレンス
このマッピングは、APIと同等のものを直接示すことで、移行を加速します:
| ZetPDF | IronPDF | ノート |
|---|---|---|
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>課題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>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" .HTMLへの変換が必要な座標ベースの描画コードを文書化すること。 フォントと色の使用パターンに注意してください。 レイアウト構造をHTMLに対応させる。
コード更新タスク
1.ZetPDF NuGetパッケージの削除 2.IronPdf NuGetパッケージをインストールする 3.名前空間のインポートをZetPDFからIronPdfに更新してください。 4.HtmlToPdfConverterをChromePdfRendererに置き換えてください。 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ドキュメントとチュートリアルをご覧ください。






