How to Convert QR Code to PDF in C# | IronPDF
Full Comparison
Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against QuestPDF on pricing, HTML support, and licensing.
QuestPDF からIronPDFへの移行は、C#の流暢なレイアウトAPIから、より広範なPDF操作機能を持つ標準のHTML/CSSベースのアプローチにワークフローを移行させます。 このガイドは、既存のウェブスキルを活用し、HTMLテンプレートを再利用し、QuestPDFのコアライブラリに含まれていない機能を取り入れるステップバイステップの移行パスを提供します。
QuestPDFからIronPDFに移行する理由
QuestPDFを理解する
QuestPDFは、C#でプログラム的にPDFを生成するために特別に作成された、現代的で流暢なAPIです。 包括的なHTMLからPDFへの変換を提供するライブラリとは異なり、QuestPDFのコアライブラリはプログラム的なレイアウトAPIに限定されています。 QuestPDFは、開発者がHTMLに頼ることなく、C#コードを使用してゼロからドキュメントを生成する必要があるシナリオで優れています。
コミュニティ層は、個人、非営利、FOSSプロジェクト、年間総収益が100万米ドル未満の組織に対してMIT条件で無料です。 それを超える場合、QuestPDFは999ドルから始まるProfessionalライセンス(永久、最大10人の開発者)と2999ドルのEnterpriseライセンス(永久、組織全体)を提供しており、長期的な計画に考慮する必要があります。
コア問題:コアライブラリにHTMLエンジンがない
QuestPDFはHTMLからPDFへの変換に推奨されることがありますが、コアライブラリはHTMLをレンダリングしません。 コミュニティが維持管理しているQuestPDF.HTMLエクステンションは、限定されたサブセットのHTML/CSSをカバーしていますが、コアエンジンはプログラムによるものであり、実際のブラウザエンジンを実行しません。すでにHTML/CSSテンプレートを持っているチームは、通常、これらをコーディング主体のAPIで再構築する必要があります。
| フィーチャー | QuestPDF | IronPDF |
|---|---|---|
| HTMLからPDF(コア) | サポートされていません(流暢なAPIのみ) | フルサポート |
| HTMLからPDF(拡張) | 部分的にQuestPDF.HTML (限定的なサブセット) |
フルサポート |
| CSSスタイリング。 | 拡張による限定的 | 完全なCSS3 |
| 既存のテンプレート | ゼロからの再構築が必要 | HTML/CSSアセットの再利用 |
| デザインツールの互換性 | None | あらゆるウェブデザインツール |
| ラーニングカーブ | 新しい流暢なC# API | ウェブスキルの移転 |
| レイアウトプレビュー | コンパニオンアプリ | どのブラウザでもプレビュー |
| PDF操作 | マージ/抽出/オーバーレイ/暗号化(ドキュメント操作API、2024.12.0以上) | マージ、分割、編集、署名 |
IronPDFは、QuestPDFのコアが含まないネイティブなHTMLからPDFへのレンダリングを提供し、C#コードで手動でドキュメントを再構築する必要を排除します。 また、マージ、分割、編集、セキュリティの確保、デジタル署名などのPDF操作機能もカバーしています。QuestPDFのドキュメント操作API(2024.12.0以上)は、マージ、ページ抽出、オーバーレイ/アンダーレイ、添付ファイル、暗号化をカバーしていますが、既存のページコンテンツの編集、OCR、またはデジタル署名はカバーしていません。
QuestPDFのライセンスモデルについて
QuestPDFのコミュニティライセンス(MIT条項)は、個人、非営利、FOSSプロジェクト、年間総収益が100万USD未満の組織に対して無料です。 それを超える場合、999ドルのProfessionalライセンス(永久、最大10名の開発者用)または2999ドルのEnterprise(永久、組織全体)が必要です。 収益トリガーが組織の収益であり、席数ではないため、これは下流のクライアントとの会話や自身のライセンスにも影響を与える可能性があります。
IronPDFは開発者ごとの商用ライセンスを提供しており、収益監査やクライアントのライセンス要件なく、予測可能なコストで使用できます。
最新 for .NETバージョンを採用しているチームにとって、IronPDFは収益に基づくトリガーのない開発者別のライセンスを提供し、既存のウェブ開発スキルを活用する標準のHTML/CSSアプローチを提供します。
始める前に
前提条件
- .NET環境: .NET Framework 4.6.2+ または.NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGetアクセス: NuGetパッケージをインストールする機能
- IronPDFライセンス: IronPDFからライセンスキーを取得します。
NuGetパッケージの変更
# Remove QuestPDF
dotnet remove package QuestPDF
# Add IronPDF
dotnet add package IronPdf
# Remove QuestPDF
dotnet remove package QuestPDF
# Add IronPDF
dotnet add package IronPdf
ライセンス構成
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
QuestPDFの使い方を探す
# Find all QuestPDF usages in your codebase
grep -r "QuestPDF\|Document.Create\|\.GeneratePdf" --include="*.cs" .
# Find all QuestPDF usages in your codebase
grep -r "QuestPDF\|Document.Create\|\.GeneratePdf" --include="*.cs" .
完全な API リファレンス
名前空間の変更
// Before: QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
// After: IronPDF
using IronPdf;
// Before: QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
// After: IronPDF
using IronPdf;
Imports IronPdf
コア API マッピング
| QuestPDFのコンセプト | IronPDF 同等物 |
|---|---|
Document.Create() |
new ChromePdfRenderer() |
.Page() |
RenderHtmlAsPdf() |
.Text() |
HTML <p>, <h1>, <span> |
.Bold() |
CSS font-weight: bold |
.FontSize(24) |
CSS font-size: 24px |
.Image() |
HTML <img src="..."> |
.Table() |
HTML <table> |
.Column() |
CSS display: flex; フレックス方向:列。 |
.Row() |
CSS display: flex; フレックス方向: row |
PageSizes.A4 |
RenderingOptions.PaperSize |
.Margin() |
RenderingOptions.Margin* |
.GeneratePdf() |
pdf.SaveAs() |
| 該当なし | PdfDocument.Merge() |
| 該当なし | PdfDocument.FromFile() |
| 該当なし | pdf.SecuritySettings |
コード移行の例
例 1: 基本的なドキュメントの作成 (HTML-to-PDF)
翻訳前 (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("Hello World").FontSize(20).Bold();
column.Item().Text("This is a paragraph of text.");
});
});
}).GeneratePdf("output.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("Hello World").FontSize(20).Bold();
column.Item().Text("This is a paragraph of text.");
});
});
}).GeneratePdf("output.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Content().Column(Sub(column)
column.Item().Text("Hello World").FontSize(20).Bold()
column.Item().Text("This is a paragraph of text.")
End Sub)
End Sub)
End Sub).GeneratePdf("output.pdf")
End Sub
End Module
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>")
pdf.SaveAs("output.pdf")
End Sub
End Class
この例はパラダイムの違いを示しています。 QuestPDFでは、その流暢なAPIであるDocument.Create(), container.Page(), page.Content().Column(), .FontSize(20).Bold()のようにメソッドチェーンを利用します。 また、QuestPDF.Settings.License = LicenseType.Communityでライセンスタイプを設定する必要があります。
IronPDFは、すべてのウェブ開発者が知っている標準的なHTMLを使用します。見出しには<p>を使用します。新しいレイアウトDSLを学ぶ必要はありません。 IronPDFのアプローチは、よりクリーンな構文を提供し、最新 for .NETウェブスタックの残りと統合されます。 包括的な例については、HTML to PDF documentationを参照してください。
例2: 請求書の作成
翻訳前 (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("INVOICE").FontSize(24).Bold();
column.Item().Text("Invoice #: 12345").FontSize(12);
column.Item().PaddingTop(20);
column.Item().Text("Customer: John Doe");
column.Item().Text("Total: $100.00").Bold();
});
});
}).GeneratePdf("invoice.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("INVOICE").FontSize(24).Bold();
column.Item().Text("Invoice #: 12345").FontSize(12);
column.Item().PaddingTop(20);
column.Item().Text("Customer: John Doe");
column.Item().Text("Total: $100.00").Bold();
});
});
}).GeneratePdf("invoice.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Content().Column(Sub(column)
column.Item().Text("INVOICE").FontSize(24).Bold()
column.Item().Text("Invoice #: 12345").FontSize(12)
column.Item().PaddingTop(20)
column.Item().Text("Customer: John Doe")
column.Item().Text("Total: $100.00").Bold()
End Sub)
End Sub)
End Sub).GeneratePdf("invoice.pdf")
End Sub
End Module
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = @"
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("invoice.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = @"
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("invoice.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim htmlContent As String = "
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("invoice.pdf")
End Sub
End Class
QuestPDFはレイアウトに.PaddingTop(20)を使用します。 IronPDFは標準的なHTMLを使用します。タイトルには<strong>を使用します。
本当の利点: IronPDFを使えば、デザイナーは独立してHTMLテンプレートを作成、修正することができます。 QuestPDFでは、設計変更のたびにC#開発者がコードを修正する必要があります。 詳しくは、チュートリアルをご覧ください。
例3:ページ番号を含むヘッダーとフッター
翻訳前 (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Header().Text("Document Header").FontSize(14).Bold();
page.Content().Text("Main content of the document.");
page.Footer().AlignCenter().Text(text =>
{
text.Span("Page ");
text.CurrentPageNumber();
});
});
}).GeneratePdf("document.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Header().Text("Document Header").FontSize(14).Bold();
page.Content().Text("Main content of the document.");
page.Footer().AlignCenter().Text(text =>
{
text.Span("Page ");
text.CurrentPageNumber();
});
});
}).GeneratePdf("document.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Header().Text("Document Header").FontSize(14).Bold()
page.Content().Text("Main content of the document.")
page.Footer().AlignCenter().Text(Sub(text)
text.Span("Page ")
text.CurrentPageNumber()
End Sub)
End Sub)
End Sub).GeneratePdf("document.pdf")
End Sub
End Module
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<p>Main content of the document.</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.Header = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 14
};
pdf.Footer = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
pdf.SaveAs("document.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<p>Main content of the document.</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.Header = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 14
};
pdf.Footer = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
pdf.SaveAs("document.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim htmlContent As String = "<p>Main content of the document.</p>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.Header = New TextHeaderFooter() With {
.CenterText = "Document Header",
.FontSize = 14
}
pdf.Footer = New TextHeaderFooter() With {
.CenterText = "Page {page}"
}
pdf.SaveAs("document.pdf")
End Sub
End Class
QuestPDFは.CurrentPageNumber()のような流暢なメソッドを取り入れます。 IronPDFはFontSizeのようなプロパティを持っています。 {page}プレースホルダーは、自動的に現在のページ番号を挿入します。
重要な移行に関する注意事項
パラダイムシフトについて
主な変更点はカスタムC#流暢なレイアウトAPIから標準的なHTML/CSSに移行することです:
// QuestPDF: Fluent C# layout API
container.Page(page =>
{
page.Content().Column(column =>
{
column.Item().Text("Invoice").Bold().FontSize(24);
column.Item().Row(row =>
{
row.RelativeItem().Text("Customer:");
row.RelativeItem().Text("Acme Corp");
});
});
});
// IronPDF: Standard HTML/CSS
var html = @"
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// QuestPDF: Fluent C# layout API
container.Page(page =>
{
page.Content().Column(column =>
{
column.Item().Text("Invoice").Bold().FontSize(24);
column.Item().Row(row =>
{
row.RelativeItem().Text("Customer:");
row.RelativeItem().Text("Acme Corp");
});
});
});
// IronPDF: Standard HTML/CSS
var html = @"
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
' QuestPDF: Fluent VB.NET layout API
container.Page(Sub(page)
page.Content().Column(Sub(column)
column.Item().Text("Invoice").Bold().FontSize(24)
column.Item().Row(Sub(row)
row.RelativeItem().Text("Customer:")
row.RelativeItem().Text("Acme Corp")
End Sub)
End Sub)
End Sub)
' IronPDF: Standard HTML/CSS
Dim html As String = "
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
レイアウト パターンの変換
| QuestPDFパターン | HTML/CSS相当 |
|---|---|
.Column() |
表示: flex; フレックス方向:列。 |
.Row() |
表示: flex; フレックス方向: row |
.RelativeItem() |
flex: 1 |
.Table() |
<table>要素 |
.PaddingTop(20) |
<br/> |
.AlignCenter() |
text-align: center |
.FontSize(24) |
font-size: 24px |
.Bold() |
<strong> |
ページ設定の変換
// QuestPDF
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
// IronPDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20; // mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
// QuestPDF
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
// IronPDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20; // mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
' QuestPDF
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
' IronPDF
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20 ' mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
移行後の新機能
IronPDFに移行した後は、QuestPDFでは提供できない機能を得ることができます:
PDFマージ
var cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>");
var content = renderer.RenderHtmlAsPdf(reportHtml);
var existing = PdfDocument.FromFile("appendix.pdf");
var merged = PdfDocument.Merge(cover, content, existing);
merged.SaveAs("complete.pdf");
var cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>");
var content = renderer.RenderHtmlAsPdf(reportHtml);
var existing = PdfDocument.FromFile("appendix.pdf");
var merged = PdfDocument.Merge(cover, content, existing);
merged.SaveAs("complete.pdf");
Dim cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>")
Dim content = renderer.RenderHtmlAsPdf(reportHtml)
Dim existing = PdfDocument.FromFile("appendix.pdf")
Dim merged = PdfDocument.Merge(cover, content, existing)
merged.SaveAs("complete.pdf")
PDFのセキュリティ
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "reader";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "reader";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SecuritySettings.OwnerPassword = "admin"
pdf.SecuritySettings.UserPassword = "reader"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
pdf.SaveAs("protected.pdf")
URLをPDFに
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderUrlAsPdf("https://example.com/report");
pdf.SaveAs("webpage.pdf");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderUrlAsPdf("https://example.com/report");
pdf.SaveAs("webpage.pdf");
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
Dim pdf = renderer.RenderUrlAsPdf("https://example.com/report")
pdf.SaveAs("webpage.pdf")
既存のPDFを読み込んで編集する
var pdf = PdfDocument.FromFile("existing.pdf");
// Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf");
var pdf = PdfDocument.FromFile("existing.pdf");
// Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf");
Dim pdf = PdfDocument.FromFile("existing.pdf")
' Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf")
機能比較の概要
| フィーチャー | QuestPDF | IronPDF |
|---|---|---|
| HTMLからPDFへ。 | Core: サポートなし (QuestPDF.HTMLエクステンションを通じて限定的) |
主な機能 |
| ラーニングカーブ | 流暢なC# API | 標準的なウェブスキル |
| テンプレートプレビュー | コンパニオンアプリ | ブラウザ |
| デザインコラボレーション | 開発者のみ | デザイナー + 開発者 |
| 既存の資産 | 再構築必須 | HTML/CSSの再利用 |
| PDF操作 | マージ/抽出/オーバーレイ(ドキュメント操作API、2024.12.0+) | サポート対象 |
| セキュリティ/署名 | 暗号化 + 許可(デジタル署名なし) | 暗号化 + デジタル署名 |
| ライセンスモデル | 収益基準 ($1M のしきい値) | 開発者ごと |
| クライアントへの影響 | 収益が 1M USD を超える場合には、ライセンスが必要になる可能性があります | None |
| Bootstrap/Tailwind(ブートストラップ/テイルウィンド | サポートされていません | サポート対象 |
| URLからPDFへ。 | サポートされていません | サポート対象 |
移行チェックリスト
移行前
- すべてのQuestPDFドキュメントテンプレートを識別する (
QuestPDF.HTML,.GeneratePdf) - 使用されているDSLパターンを文書化する (
.Column(),.Row(),.Table(),.Text()) - スタイリング方法を CSS の同等物にマッピングする
- IronPDFからIronPDFライセンスキーを取得します
パッケージの変更
QuestPDFNuGetパッケージを削除IronPdfNuGetパッケージをインストールする:dotnet add package IronPdf
コードの変更
- 名前空間のインポートを更新する
QuestPDF.Settings.License = LicenseType.Communityを削除するChromePdfRenderer+ HTMLに変換する.Column()/.Row()をCSS Flexboxに置き換える.Table()をHTML<table>要素に置き換える<h1 style='...'>に変換するpage.Header()/TextHeaderFooterで置き換える{page}プレースホルダーに置き換えるpdf.SaveAs()に変換する- アプリケーションの起動時にライセンスの初期化を追加
移行後
- PDF出力の視覚的な比較
- 複数ページのドキュメントで正しいページ区切りをテストする
- 必要に応じて新しい機能(セキュリティ、結合、URLからPDFへの変換)を追加します

