C#でHiQPdfからIronPDFに移行する方法
HiQPdfは商用HTML-to-PDFライブラリですが、本番アプリケーションに影響を与えるいくつかの制限があります:
1.制限のある"無料"バージョン:無料バージョンでは、邪魔な透かしが入る 3 ページ制限があり、完全なドキュメント生成を必要とする実稼働ワークロードには基本的に使用できません。
2.古い WebKit エンジン:HiQPdfは、React、Angular、Vue などの最新の JavaScript フレームワークと互換性のない、古い WebKit ベースのレンダリング エンジンを使用します。
- .NET Core のサポートが不明瞭:ドキュメントでは .NET Core / .NET 5+ のサポートが明確に示されていないため、最新のアプリケーション開発に不確実性が生じています。
4.断片化されたパッケージ:異なるプラットフォーム用の複数の NuGet パッケージ (HiQPdf、HiQPdf.Free、HiQPdf.NetCore、HiQPdf.NetCore.x64、HiQPdf.Client) により、依存関係の管理が複雑になります。
5.複雑な API:流暢で直感的な方法ではなく、 Document 、 Header 、 Footerプロパティ チェーンを介した冗長な構成が必要です。
- JavaScript サポートの制限: WebKit エンジンでは、最新の JavaScript フレームワークや複雑な動的レイアウトによって生成されたコンテンツをレンダリングするのが困難です。
HiQPdfとIronPdfの比較
| アスペクト | HiQPdf | IronPDF |
|---|---|---|
| レンダリングエンジン | WebKitベース(古い) | モダンChromium |
| 無料レベル | 3ページ以内+透かし | 30日間フルトライアル |
| モダンJSサポート | 制限的 | フル(React、Angular、Vue) |
| .NET Core/5+サポート | 複数のパッケージが必要 | 統一パッケージ |
| APIデザイン | 複雑なプロパティチェーン | クリーンで流暢なAPI |
| CSS3 サポート | 部分的 | フルサポート |
| ドキュメンテーション | 断片化 | 包括的 |
| NuGetパッケージ | 複数のバリエーション | 単一パッケージ |
2025年、2026年まで.NET 10とC# 14の採用を計画しているチームにとって、IronPDFは最新の.NETバージョンと最新のChromiumレンダリングエンジンに対する文書化されたサポートで、将来を見据えた基盤を提供します。
マイグレーションの複雑さの評価
機能別の見積もり作業
| フィーチャー | 移行の複雑さ | ノート |
|---|---|---|
| HTMLからPDFへ | 低レベル | メソッドの直接置換 |
| URLからPDFへ | 低レベル | メソッドの直接置換 |
| PDFのマージ | 低レベル | 異なるマージアプローチ |
| ヘッダー/フッター | 中規模 | プレースホルダーの構文変更 |
| ページサイズ/余白 | 低レベル | 同じ単位(mm) |
| トリガーモード/遅延 | 低レベル | プロパティのマッピング |
パラダイムシフト
このHiQPdf移行における基本的な変更は、プロパティ チェーン構成からFluent レンダリング オプションへの変更です。
HiQPdf: converter.Document.Header.Height = 50;
converter.Document.Header.Add(新しいHtmlToPdfVariableElement(...));
IronPdf: renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { ... };始める前に
前提条件
- .NETバージョン: IronPDFは.NET Framework 4.6.2以降および.NET Core 3.1以降 / .NET 5/6/7/8/9以降をサポートしています。 2.ライセンスキー: ironpdf.comからIronPDFライセンスキーを取得します。
- HiQPdf の削除:すべてのHiQPdfNuGet パッケージのバリアントを削除する計画
すべてのHiQPdfの使用法を特定する
# FindHiQPdfnamespace usage
grep -r "using HiQPdf\|HtmlToPdf\|PdfDocument" --include="*.cs" .
# Find header/footer usage
grep -r "\.Header\.\|\.Footer\.\|HtmlToPdfVariableElement" --include="*.cs" .
# Find placeholder syntax
grep -r "CrtPage\|PageCount" --include="*.cs" .
# Find NuGet references
grep -r "HiQPdf" --include="*.csproj" .# FindHiQPdfnamespace usage
grep -r "using HiQPdf\|HtmlToPdf\|PdfDocument" --include="*.cs" .
# Find header/footer usage
grep -r "\.Header\.\|\.Footer\.\|HtmlToPdfVariableElement" --include="*.cs" .
# Find placeholder syntax
grep -r "CrtPage\|PageCount" --include="*.cs" .
# Find NuGet references
grep -r "HiQPdf" --include="*.csproj" .NuGetパッケージの変更
# Remove allHiQPdfvariants
dotnet remove package HiQPdf
dotnet remove package HiQPdf.Free
dotnet remove package HiQPdf.NetCore
dotnet remove package HiQPdf.NetCore.x64
dotnet remove package HiQPdf.Client
# InstallIronPDF(single package for all platforms)
dotnet add package IronPdf# Remove allHiQPdfvariants
dotnet remove package HiQPdf
dotnet remove package HiQPdf.Free
dotnet remove package HiQPdf.NetCore
dotnet remove package HiQPdf.NetCore.x64
dotnet remove package HiQPdf.Client
# InstallIronPDF(single package for all platforms)
dotnet add package IronPdfクイック スタート マイグレーション
ステップ 1: ライセンス構成の更新
翻訳前 (HiQPdf):
HtmlToPdf converter = new HtmlToPdf();
converter.SerialNumber = "HIQPDF-SERIAL-NUMBER";HtmlToPdf converter = new HtmlToPdf();
converter.SerialNumber = "HIQPDF-SERIAL-NUMBER";翻訳後(IronPDF):。
// Set globally at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";// Set globally at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";ステップ 2: 名前空間インポートを更新する
// Before (HiQPdf)
using HiQPdf;
// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;// Before (HiQPdf)
using HiQPdf;
// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;完全な API リファレンス
メインクラスのマッピング
| HiQPdfクラス | IronPDF クラス | ノート |
|---|---|---|
| <コード>HtmlToPdf</コード | <コード>ChromePdfRenderer</コード | メインコンバータクラス |
| <コード>PdfDocument</コード | <コード>PdfDocument</コード | 同じ名前、異なる名前空間 |
| <コード>HtmlToPdfVariableElement</コード | TextHeaderFooterまたはHtmlHeaderFooter。 | ヘッダー/フッターコンテンツ |
変換メソッドマッピング
| HiQPdfメソッド | IronPDF メソッド | ノート |
|---|---|---|
ConvertHtmlToMemory(html、baseUrl)。 | RenderHtmlAsPdf(html)を使用してください。 | PdfDocument<//code> を返します。 |
ConvertUrlToMemory(url)を使用してください。 | RenderUrlAsPdf(url)を使用してください。 | PdfDocument<//code> を返します。 |
File.WriteAllBytes(path, bytes). | pdf.SaveAs(path)のようにします。 | 直接保存方式 |
PDFドキュメントメソッドマッピング
| HiQPdfメソッド | IronPDF メソッド | ノート |
|---|---|---|
PdfDocument.FromFile(パス)。 | PdfDocument.FromFile(パス)。 | 同じメソッド名 |
document1.AddDocument(document2)のようにします。 | PdfDocument.Merge(pdf1, pdf2). | 静的マージ方式 |
document.WriteToFile(パス)。 | pdf.SaveAs(path)のようにします。 | 異なるメソッド名 |
ヘッダー/フッター プレースホルダーのマッピング
| HiQPdfプレースホルダ | IronPDF プレースホルダー | 翻訳内容 |
|---|---|---|
{CrtPage}<//code> | <コード>{ページ}</コード | 現在のページ番号 |
| <コード>{ページ数}</コード | <コード>{総ページ数}</コード | 総ページ数 |
コード移行の例
例1: HTMLからPDFへの変換
翻訳前 (HiQPdf):
// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;
class Program
{
static void Main()
{
HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
byte[] pdfBuffer = htmlToPdfConverter.ConvertUrlToMemory("https://example.com");
System.IO.File.WriteAllBytes("output.pdf", pdfBuffer);
// Convert HTML string
string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
byte[] pdfFromHtml = htmlToPdfConverter.ConvertHtmlToMemory(html, "");
System.IO.File.WriteAllBytes("fromhtml.pdf", pdfFromHtml);
}
}// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;
class Program
{
static void Main()
{
HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
byte[] pdfBuffer = htmlToPdfConverter.ConvertUrlToMemory("https://example.com");
System.IO.File.WriteAllBytes("output.pdf", pdfBuffer);
// Convert HTML string
string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
byte[] pdfFromHtml = htmlToPdfConverter.ConvertHtmlToMemory(html, "");
System.IO.File.WriteAllBytes("fromhtml.pdf", pdfFromHtml);
}
}翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
// Convert HTML string
string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
var pdfFromHtml = renderer.RenderHtmlAsPdf(html);
pdfFromHtml.SaveAs("fromhtml.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
// Convert HTML string
string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
var pdfFromHtml = renderer.RenderHtmlAsPdf(html);
pdfFromHtml.SaveAs("fromhtml.pdf");
}
}HiQPdfのアプローチでは、HtmlToPdfインスタンスを作成し、ConvertUrlToMemory()またはConvertHtmlToMemory()を呼び出してバイト配列を取得し、手動でバイトをファイルに書き込む必要があります。IronPDFのChromePdfRendererは直接SaveAs()メソッドでPdfDocumentオブジェクトを返すので、手動でファイルを書き込むステップがなくなります。また、最新のChromiumエンジンは、複雑なHTML/CSS/JavaScriptコンテンツのレンダリングを改善します。 その他のレンダリングオプションについては、HTML to PDF documentationを参照してください。
例2: 複数のPDFをマージする
翻訳前 (HiQPdf):
// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;
class Program
{
static void Main()
{
// Create first PDF
HtmlToPdf converter1 = new HtmlToPdf();
byte[] pdf1 = converter1.ConvertHtmlToMemory("<h1>First Document</h1>", "");
System.IO.File.WriteAllBytes("doc1.pdf", pdf1);
// Create second PDF
HtmlToPdf converter2 = new HtmlToPdf();
byte[] pdf2 = converter2.ConvertHtmlToMemory("<h1>Second Document</h1>", "");
System.IO.File.WriteAllBytes("doc2.pdf", pdf2);
// Merge PDFs
PdfDocument document1 = PdfDocument.FromFile("doc1.pdf");
PdfDocument document2 = PdfDocument.FromFile("doc2.pdf");
document1.AddDocument(document2);
document1.WriteToFile("merged.pdf");
}
}// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;
class Program
{
static void Main()
{
// Create first PDF
HtmlToPdf converter1 = new HtmlToPdf();
byte[] pdf1 = converter1.ConvertHtmlToMemory("<h1>First Document</h1>", "");
System.IO.File.WriteAllBytes("doc1.pdf", pdf1);
// Create second PDF
HtmlToPdf converter2 = new HtmlToPdf();
byte[] pdf2 = converter2.ConvertHtmlToMemory("<h1>Second Document</h1>", "");
System.IO.File.WriteAllBytes("doc2.pdf", pdf2);
// Merge PDFs
PdfDocument document1 = PdfDocument.FromFile("doc1.pdf");
PdfDocument document2 = PdfDocument.FromFile("doc2.pdf");
document1.AddDocument(document2);
document1.WriteToFile("merged.pdf");
}
}翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
// Create first PDF
var pdf1 = renderer.RenderHtmlAsPdf("<h1>First Document</h1>");
pdf1.SaveAs("doc1.pdf");
// Create second PDF
var pdf2 = renderer.RenderHtmlAsPdf("<h1>Second Document</h1>");
pdf2.SaveAs("doc2.pdf");
// Merge PDFs
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
// Create first PDF
var pdf1 = renderer.RenderHtmlAsPdf("<h1>First Document</h1>");
pdf1.SaveAs("doc1.pdf");
// Create second PDF
var pdf2 = renderer.RenderHtmlAsPdf("<h1>Second Document</h1>");
pdf2.SaveAs("doc2.pdf");
// Merge PDFs
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}HiQPdfのアプローチでは、PdfDocument.FromFile()を使ってファイルからドキュメントを読み込み、最初のドキュメントでAddDocument()を呼び出して2番目のドキュメントを追加し、WriteToFile()を使って保存します。 IronPDFは複数のPdfDocumentオブジェクトを直接受け入れる、よりクリーンな静的PdfDocument.Merge()メソッドを提供します。 PDFのマージと分割については、こちらをご覧ください。
例3: ページ番号を含むPDFのヘッダーとフッター
翻訳前 (HiQPdf):
// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;
class Program
{
static void Main()
{
HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
// Add header
htmlToPdfConverter.Document.Header.Height = 50;
HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page Header</div>", "");
htmlToPdfConverter.Document.Header.Add(headerHtml);
// Add footer with page number
htmlToPdfConverter.Document.Footer.Height = 50;
HtmlToPdfVariableElement footerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page {CrtPage} of {PageCount}</div>", "");
htmlToPdfConverter.Document.Footer.Add(footerHtml);
byte[] pdfBuffer = htmlToPdfConverter.ConvertHtmlToMemory("<h1>Document with Headers and Footers</h1>", "");
System.IO.File.WriteAllBytes("header-footer.pdf", pdfBuffer);
}
}// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;
class Program
{
static void Main()
{
HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
// Add header
htmlToPdfConverter.Document.Header.Height = 50;
HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page Header</div>", "");
htmlToPdfConverter.Document.Header.Add(headerHtml);
// Add footer with page number
htmlToPdfConverter.Document.Footer.Height = 50;
HtmlToPdfVariableElement footerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page {CrtPage} of {PageCount}</div>", "");
htmlToPdfConverter.Document.Footer.Add(footerHtml);
byte[] pdfBuffer = htmlToPdfConverter.ConvertHtmlToMemory("<h1>Document with Headers and Footers</h1>", "");
System.IO.File.WriteAllBytes("header-footer.pdf", pdfBuffer);
}
}翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
// Configure header and footer
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Page Header",
FontSize = 12
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page} of {total-pages}",
FontSize = 10
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Document with Headers and Footers</h1>");
pdf.SaveAs("header-footer.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
// Configure header and footer
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Page Header",
FontSize = 12
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page} of {total-pages}",
FontSize = 10
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Document with Headers and Footers</h1>");
pdf.SaveAs("header-footer.pdf");
}
}HiQPdfのアプローチでは、Document.Header.Heightを設定し、HtmlToPdfVariableElementオブジェクトを作成し、ヘッダー/フッターセクションでAdd()を呼び出す必要があります。 ページ番号のプレースホルダには、{CrtPage}<//code>と{PageCount}<//code>の構文を使用します。 IronPDFはCenterTextプロパティと異なるプレースホルダー構文で、よりクリーンなTextHeaderFooter設定を提供します:{page}と{total-pages}です。 HTMLベースのヘッダーを含むその他のオプションについては、headers and footers documentationを参照してください。
重要な移行に関する注意事項
プレースホルダーの構文の変更
ページ番号のある文書で最も重要な変更は、プレースホルダーの構文です:
//HiQPdfplaceholders
"Page {CrtPage} of {PageCount}"
//IronPDFplaceholders
"Page {page} of {total-pages}"//HiQPdfplaceholders
"Page {CrtPage} of {PageCount}"
//IronPDFplaceholders
"Page {page} of {total-pages}"完全なプレースホルダ・マッピング:。
{CrtPage}<//code> →{page}<//code{PageCount}<//code> → <code>{total-pages}。
マージ メソッドの違い
HiQPdfは、最初のドキュメントを所定の位置に修正します:
// HiQPdf: Modifies document1
document1.AddDocument(document2);
document1.WriteToFile("merged.pdf");// HiQPdf: Modifies document1
document1.AddDocument(document2);
document1.WriteToFile("merged.pdf");IronPDFは新しいマージされたドキュメントを返します:
// IronPDF: Returns new document
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");// IronPDF: Returns new document
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");3ページの制限はありません。
HiQPdfの無料版では、透かし入りの出力は3ページまでです。 IronPdfは試用期間中、人工的な制限なしに完全なドキュメントを生成します。
ChromePdfRendererを再利用してください。
変換のたびに新しいHtmlToPdfインスタンスを作成するHiQPdfとは異なり、IronPDFのChromePdfRendererは再利用されるべきです:
// IronPDF: Create once, reuse
var renderer = new ChromePdfRenderer();
var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);// IronPDF: Create once, reuse
var renderer = new ChromePdfRenderer();
var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);トラブルシューティング
問題1: HtmlToPdfが見つかりません
問題:IronPDFにHtmlToPdfクラスが存在しません。
解決策: ChromePdfRendererに置き換えます:
// HiQPdf
HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
// IronPDF
var renderer = new ChromePdfRenderer();// HiQPdf
HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
// IronPDF
var renderer = new ChromePdfRenderer();問題 2: ConvertHtmlToMemory が見つかりません。
問題: ConvertHtmlToMemory()メソッドが存在しません。
解決策: RenderHtmlAsPdf()を使用します。
// HiQPdf
byte[] pdfBytes = converter.ConvertHtmlToMemory(html, "");
// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] pdfBytes = pdf.BinaryData;// HiQPdf
byte[] pdfBytes = converter.ConvertHtmlToMemory(html, "");
// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] pdfBytes = pdf.BinaryData;問題3: ページ番号のプレースホルダーが機能しない
問題: {CrtPage}と{PageCount}が出力に文字通り表示されます。
解決策:IronPDFプレースホルダー構文を更新します。
//HiQPdfsyntax (won't work)
"Page {CrtPage} of {PageCount}"
//IronPDFsyntax
"Page {page} of {total-pages}"//HiQPdfsyntax (won't work)
"Page {CrtPage} of {PageCount}"
//IronPDFsyntax
"Page {page} of {total-pages}"問題 4: HtmlToPdfVariableElement が見つかりません。
問題: HtmlToPdfVariableElementクラスが存在しません。
解決策: TextHeaderFooterまたはHtmlHeaderFooterを使用します。
// HiQPdf
HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div>Header</div>", "");
converter.Document.Header.Add(headerHtml);
// IronPDF
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Header",
FontSize = 12
};// HiQPdf
HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div>Header</div>", "");
converter.Document.Header.Add(headerHtml);
// IronPDF
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Header",
FontSize = 12
};移行チェックリスト
移行前
- コードベース内のすべてのHiQPdf API呼び出しをインベントリする
- 現在のページサイズ、余白、設定を文書化する
- ヘッダー/フッターの構成とプレースホルダーを識別する
- IronPDFライセンスキーを取得する
- 開発環境でIronPDFをテストする
コードの移行
- すべてのHiQPdf NuGetパッケージ(すべてのバリアント)を削除します
- IronPdf NuGet パッケージをインストールします:
dotnet add package IronPdf - 名前空間のインポートを更新する -<コード>HtmlToPdf</コード
ChromePdfRendererに置き換える ConvertHtmlToMemory()をRenderHtmlAsPdf()に変換するConvertUrlToMemory()をRenderUrlAsPdf()に変換する- ヘッダー/フッターのプレースホルダーを更新します(
{CrtPage}<//code>→<コード>{ページ}</コード、<コード>{ページ数}</コード→<コード>{総ページ数}</コード) -<コード>HtmlToPdfVariableElement</コードTextHeaderFooterに置き換えます - マージ操作を更新します (
AddDocument→PdfDocument.Merge) - 起動時にライセンスキーの初期化を追加
テスティング
- HTMLからPDFへの変換テスト
- URLからPDFへの変換テスト
- ヘッダー/フッターのレンダリングを確認する
- ページ番号のプレースホルダーを確認する
- PDF結合のテスト
- JavaScript を多用したページをテストする (Chromium でサポートされるようになりました)
移行後
- 設定からHiQPdfのシリアル番号を削除する
- ドキュメントの更新
- レンダリングの違いを監視する






