ASP.NET Core MVC で IronPDF を使用して CSHTML を PDF に変換する
PDFView4NET からIronPDFへの移行により、PDF ワークフローが WinForms/WPF ビューコンポーネントから、ヘッドレスな PDF 生成および操作ライブラリに移行します。 このガイドは、PDFView4NET のビュー/レンダー/印刷スコープを超えて、サーバーサイド処理、Web アプリケーションサポート、広範な PDF ライフサイクル管理を可能にするステップバイステップの移行パスを提供します。
なぜPDFView4NETからIronPDFへ移行するのか
PDFView4NETを理解する
PDFView4NET (O2 Solutions, o2sol.com) は、WinForms およびWPFアプリケーション用のビューア / レンダー / 印刷ツールキットです。 それは2つのNuGetパッケージ—O2S.Components.PDFView4NET.WPFとして提供され、自身のPDFレンダリングエンジンを含んでいます。O2 Solutionsは別のライブラリPDF4NETを販売しており、プログラムによる作成/操作が可能です。 このガイドはPDFView4NETのみを扱います。
PDF 生成、HTML to PDF レンダリング、またはサーバーサイドワークフローが必要なチームは、PDFView4NET を別のライブラリと組み合わせるか、あるいは作成と操作のみならず、ヘッドレスデプロイメントシナリオもカバーするツールキットであるIronPDFへの全面的な移行を行うことがしばしばあります。
ビュー/レンダー/印刷スコープ
PDFView4NET は PDF の表示、レンダリング、印刷、加えて注釈の追加とフォーム入力用に作られています。 移行理由 (一般的な理由):
-
ビュー/レンダー/印刷重視:PDFView4NETは既存の PDF を表示、印刷、またはイメージレンダリングのためにロードします。 HTMLまたはURLからPDFを生成しません。
-
UI フレームワーク依存:WinFormsおよびWPFエディションで配布されています; 両者は Windows デスクトップをターゲットとしており、コンソールワーカーやサーバーサイドホストでの使用を制限します。
-
HTMLからPDFへの変換はありません:
O2S.Components.PDFView4NETにはHTMLレンダリングAPIがありません。 -
制限された操作: 操作はコンテンツの著作よりも注釈やフォームフィールドを中心にしています。
-
Linux /Docker/ サーバーパスがない: このツールキットは WinForms/WPF を介して Windows のみ可能であり、Linux やコンテナ環境での ASP.NET ホストには設計されていません。
- アクティブだが限定的: O2 Solutions はリリースを出荷し続けています; 製品は保守されていますが、そのスコープは意図的に狭いです。
PDFView4NETとIronPDFの比較
| フィーチャー | PDFView4NET | IronPDF |
|---|---|---|
| 主な焦点 | PDF閲覧 | 完全なPDFソリューション(作成、表示、編集) |
| UIフレームワークが必要です。 | WinForms、WPF | None |
| PDFの作成。 | なし | はい |
| PDF操作 | 限定(注釈) | はい |
| サーバーサイド | サポート対象外 | フルサポート |
| ウェブアプリケーション。 | なし | はい |
| コンソールアプリ | 制限的 | フルサポート |
| Azure/Docker(アジュール/Docker)。 | なし | はい |
| HTMLからPDFへ | なし | はい |
| クロスプラットフォームのコンテキスト | なし | はい |
| 統合のしやすさ | 中規模 | 高い |
IronPDF は、PDFView4NET のビュー/レンダー/印刷スコープを超えて、閲覧に隣接するワークフローの上に PDF の作成、操作、レンダリングをカバーし、利用ケースに対応します。
IronPDF はコンテキストに依存しないので、Windows、Linux、macOS、Docker、Azure での Web アプリケーション、サービス、およびコンソールアプリケーションで動作し、クロスプラットフォームサポートやサーバーサイドホスティングが必要なプロジェクトにとって重要です。
始める前に
前提条件
- .NET環境: .NET Framework 4.6.2+ または.NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGetアクセス: NuGetパッケージをインストールする機能
- IronPDFライセンス: IronPDFからライセンスキーを取得します。
NuGetパッケージの変更
<PackageReference Include="O2S.Components.PDFView4NET.Win" Version="*" Remove />
<PackageReference Include="IronPdf" Version="*" />
<PackageReference Include="O2S.Components.PDFView4NET.Win" Version="*" Remove />
<PackageReference Include="IronPdf" Version="*" />
CLI経由でも可:
dotnet remove package O2S.Components.PDFView4NET.Win
# (use O2S.Components.PDFView4NET.WPF for theWPFedition)
dotnet add package IronPdf
dotnet remove package O2S.Components.PDFView4NET.Win
# (use O2S.Components.PDFView4NET.WPF for theWPFedition)
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"
完全な API リファレンス
名前空間の変更
// Before: PDFView4NET
using O2S.Components.PDFView4NET;
// After: IronPDF
using IronPdf;
// Before: PDFView4NET
using O2S.Components.PDFView4NET;
// After: IronPDF
using IronPdf;
Imports IronPdf
コア API マッピング
| PDFView4NET | IronPDF |
|---|---|
new PDFDocument(); doc.Load(path) |
PdfDocument.FromFile(path) |
new PDFDocument(); doc.Load(stream) |
PdfDocument.FromStream(stream) |
document.Pages[index] |
pdf.Pages[index] |
document.PageCount |
pdf.PageCount |
document.Print(...) |
pdf.Print() |
document.Close() |
pdf.Dispose() |
| PDFView4NETには N/A | ChromePdfRenderer (HTML to PDF) |
| PDFView4NETには N/A | PdfDocument.Merge() |
| PDFView4NETには N/A | pdf.ApplyWatermark() |
document.SecurityManager |
pdf.SecuritySettings |
コード移行の例
例1: URLからPDFへの変換
翻訳前 (PDFView4NET):
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
class Program
{
static void Main()
{
//PDFView4NETcannot fetch a URL and emit a PDF; it can only consume one.
PDFDocument document = new PDFDocument();
document.Load("input.pdf");
Console.WriteLine($"Loaded {document.PageCount} page(s) for view/print.");
document.Close();
}
}
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
class Program
{
static void Main()
{
//PDFView4NETcannot fetch a URL and emit a PDF; it can only consume one.
PDFDocument document = new PDFDocument();
document.Load("input.pdf");
Console.WriteLine($"Loaded {document.PageCount} page(s) for view/print.");
document.Close();
}
}
Imports O2S.Components.PDFView4NET
Imports System
Class Program
Shared Sub Main()
' PDFView4NET cannot fetch a URL and emit a PDF; it can only consume one.
Dim document As New PDFDocument()
document.Load("input.pdf")
Console.WriteLine($"Loaded {document.PageCount} page(s) for view/print.")
document.Close()
End Sub
End Class
翻訳後(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");
}
}
// 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");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.SaveAs("output.pdf")
End Sub
End Class
PDFView4NETにはHTML/URLレンダリングサーフェスがありません — O2S.Components.PDFView4NETにないため、URLは最初に別のツールでPDFにレンダリングされてから表示/印刷のために読み込む必要があります。 IronPDFはSaveAs()で保存します。 包括的な例については、HTML to PDF documentationを参照してください。
例2: HTML文字列からPDFへの変換
翻訳前 (PDFView4NET):
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
class Program
{
static void Main()
{
// The HTML string cannot be rendered by PDFView4NET. Assume an upstream
// tool produced "document.pdf";PDFView4NETcan then display or print it.
PDFDocument document = new PDFDocument();
document.Load("document.pdf");
Console.WriteLine($"Document ready for viewing — {document.PageCount} page(s).");
document.Close();
}
}
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
class Program
{
static void Main()
{
// The HTML string cannot be rendered by PDFView4NET. Assume an upstream
// tool produced "document.pdf";PDFView4NETcan then display or print it.
PDFDocument document = new PDFDocument();
document.Load("document.pdf");
Console.WriteLine($"Document ready for viewing — {document.PageCount} page(s).");
document.Close();
}
}
Imports O2S.Components.PDFView4NET
Imports System
Class Program
Shared Sub Main()
' The HTML string cannot be rendered by PDFView4NET. Assume an upstream
' tool produced "document.pdf"; PDFView4NET can then display or print it.
Dim document As New PDFDocument()
document.Load("document.pdf")
Console.WriteLine($"Document ready for viewing — {document.PageCount} page(s).")
document.Close()
End Sub
End Class
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("document.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("document.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim htmlContent As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("document.pdf")
End Sub
End Class
O2S.Components.PDFView4NETには存在しないため、HTML文字列は別の場所でPDFとして作成され、その後ビューアに読み込まれる必要があります。 IronPDFはPdfDocumentを返します。 詳しくは、チュートリアルをご覧ください。
例3: PDFからのテキスト抽出
翻訳前 (PDFView4NET):
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
using System.IO;
class Program
{
static void Main()
{
using (FileStream fs = File.OpenRead("document.pdf"))
{
PDFDocument document = new PDFDocument();
document.Load(fs);
string text = "";
for (int i = 0; i < document.PageCount; i++)
{
text += document.Pages[i].ExtractText();
}
Console.WriteLine(text);
document.Close();
}
}
}
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
using System.IO;
class Program
{
static void Main()
{
using (FileStream fs = File.OpenRead("document.pdf"))
{
PDFDocument document = new PDFDocument();
document.Load(fs);
string text = "";
for (int i = 0; i < document.PageCount; i++)
{
text += document.Pages[i].ExtractText();
}
Console.WriteLine(text);
document.Close();
}
}
}
Imports O2S.Components.PDFView4NET
Imports System
Imports System.IO
Class Program
Shared Sub Main()
Using fs As FileStream = File.OpenRead("document.pdf")
Dim document As New PDFDocument()
document.Load(fs)
Dim text As String = ""
For i As Integer = 0 To document.PageCount - 1
text &= document.Pages(i).ExtractText()
Next
Console.WriteLine(text)
document.Close()
End Using
End Sub
End Class
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim text As String = pdf.ExtractAllText()
Console.WriteLine(text)
End Sub
End Class
この例では、重要なAPIの違いを強調しています。 PDFView4NETはPages[i].ExtractText()を連結することを要求します。
IronPDFはこれを劇的に簡素化します: ExtractAllText()は単一のメソッド呼び出しですべてのページからのテキストを抽出します。 手動のストリーム管理も、ループも、文字列の連結もありません。
重要な移行に関する注意事項
HTML レンダリングサーフェス
PDFView4NET には HTML-to-PDF API がありません。 IronPDFはHTML/URL入力のためにChromePdfRendererを導入します:
// IronPDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// or: renderer.RenderUrlAsPdf(url);
pdf.SaveAs("output.pdf");
// IronPDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// or: renderer.RenderUrlAsPdf(url);
pdf.SaveAs("output.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
' or: renderer.RenderUrlAsPdf(url)
pdf.SaveAs("output.pdf")
ドキュメントの読み込みの変更
// PDFView4NET: instantiate then Load(path) or Load(stream)
PDFDocument document = new PDFDocument();
document.Load("document.pdf");
// IronPDF: Direct file path
var pdf = PdfDocument.FromFile("document.pdf");
// PDFView4NET: instantiate then Load(path) or Load(stream)
PDFDocument document = new PDFDocument();
document.Load("document.pdf");
// IronPDF: Direct file path
var pdf = PdfDocument.FromFile("document.pdf");
' PDFView4NET: instantiate then Load(path) or Load(stream)
Dim document As New PDFDocument()
document.Load("document.pdf")
' IronPDF: Direct file path
Dim pdf = PdfDocument.FromFile("document.pdf")
ページのアクセス変更
// PDFView4NET: document.PageCount and document.Pages[i]
for (int i = 0; i < document.PageCount; i++)
{
document.Pages[i].ExtractText();
}
// IronPDF: pdf.PageCount and Pages[i] or ExtractAllText()
string text = pdf.ExtractAllText();
// Or per-page: pdf.ExtractTextFromPage(0);
// PDFView4NET: document.PageCount and document.Pages[i]
for (int i = 0; i < document.PageCount; i++)
{
document.Pages[i].ExtractText();
}
// IronPDF: pdf.PageCount and Pages[i] or ExtractAllText()
string text = pdf.ExtractAllText();
// Or per-page: pdf.ExtractTextFromPage(0);
Imports PDFView4NET
Imports IronPDF
' PDFView4NET: document.PageCount and document.Pages(i)
For i As Integer = 0 To document.PageCount - 1
document.Pages(i).ExtractText()
Next
' IronPDF: pdf.PageCount and Pages(i) or ExtractAllText()
Dim text As String = pdf.ExtractAllText()
' Or per-page: pdf.ExtractTextFromPage(0)
保存メソッドの変更
//PDFView4NEThas no save-from-HTML path; saving applies after edits on a loaded document.
// IronPDF: SaveAs()
pdf.SaveAs("output.pdf");
//PDFView4NEThas no save-from-HTML path; saving applies after edits on a loaded document.
// IronPDF: SaveAs()
pdf.SaveAs("output.pdf");
'PDFView4NEThas no save-from-HTML path; saving applies after edits on a loaded document.
' IronPDF: SaveAs()
pdf.SaveAs("output.pdf")
移行後の新機能
IronPDFに移行すると、PDFView4NETでは提供できない機能が得られます:
PDFマージ
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");
Dim pdf1 = PdfDocument.FromFile("chapter1.pdf")
Dim pdf2 = PdfDocument.FromFile("chapter2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("complete_book.pdf")
HTMLによるウォーターマーク
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark(@"
<div style='
font-size: 72pt;
color: rgba(255, 0, 0, 0.2);
transform: rotate(-45deg);
'>
CONFIDENTIAL
</div>");
pdf.SaveAs("watermarked.pdf");
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark(@"
<div style='
font-size: 72pt;
color: rgba(255, 0, 0, 0.2);
transform: rotate(-45deg);
'>
CONFIDENTIAL
</div>");
pdf.SaveAs("watermarked.pdf");
Dim pdf = PdfDocument.FromFile("document.pdf")
pdf.ApplyWatermark("
<div style='
font-size: 72pt;
color: rgba(255, 0, 0, 0.2);
transform: rotate(-45deg);
'>
CONFIDENTIAL
</div>")
pdf.SaveAs("watermarked.pdf")
パスワード保護
var pdf = PdfDocument.FromFile("document.pdf");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("protected.pdf");
var pdf = PdfDocument.FromFile("document.pdf");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("protected.pdf");
Dim pdf = PdfDocument.FromFile("document.pdf")
pdf.SecuritySettings.OwnerPassword = "owner123"
pdf.SecuritySettings.UserPassword = "user456"
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SaveAs("protected.pdf")
フォーム入力
var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.FindFormField("FirstName").Value = "John";
pdf.Form.FindFormField("LastName").Value = "Doe";
pdf.SaveAs("filled_form.pdf");
var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.FindFormField("FirstName").Value = "John";
pdf.Form.FindFormField("LastName").Value = "Doe";
pdf.SaveAs("filled_form.pdf");
Dim pdf = PdfDocument.FromFile("form.pdf")
pdf.Form.FindFormField("FirstName").Value = "John"
pdf.Form.FindFormField("LastName").Value = "Doe"
pdf.SaveAs("filled_form.pdf")
サーバーサイド処理
PDFView4NETはサーバー環境では動作しません。 IronPDFはこの点で優れています:
// ASP.NET Core
[HttpGet]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(GetReportHtml());
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
// ASP.NET Core
[HttpGet]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(GetReportHtml());
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
<HttpGet>
Public Function GeneratePdf() As IActionResult
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(GetReportHtml())
Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Function
機能比較の概要
| フィーチャー | PDFView4NET | IronPDF |
|---|---|---|
| PDFを見る | はい(UI) | いいえ(ビューアを使用) |
| PDFを読み込む | はい | はい |
| PDF保存 | 制限的 | はい |
| HTMLからPDFへ | なし | はい |
| URLからPDFへ | なし | はい |
| PDFのマージ | なし | はい |
| PDFの分割 | 制限的 | はい |
| 透かし | なし | はい |
| ヘッダー/フッター | なし | はい |
| パスワード保護 | なし | はい |
| デジタル署名 | なし | はい |
| テキスト抽出 | 制限的 | はい |
| フォームの入力 | 制限的 | はい |
| WinForms | はい | はい |
| WPF | はい | はい |
| コンソール | 制限的 | はい |
| ASP.NET | なし | はい |
| アジュール | なし | はい |
| Docker | なし | はい |
移行チェックリスト
移行前
- 表示要件を特定する(IronPDF の機能が UI ベースの PDF 表示を置き換えることができるかどうかを判断する)
- ドキュメント印刷ワークフロー
- PDF操作のニーズをリストする
- 必要に応じてビューアの置き換えを計画する(IronPDF は生成/操作に重点を置いています)
- IronPDFからIronPDFライセンスキーを取得します
パッケージの変更
O2S.Components.PDFView4NET.Win(または.WPF) NuGetパッケージを削除するIronPdfNuGetパッケージをインストールする:dotnet add package IronPdf
コードの変更
- 名前空間インポートを更新する (
using O2S.Components.PDFView4NET;→using IronPdf;) - HTMLまたはURL入力のために
ChromePdfRendererを導入する (PDFView4NETの同等物はありません) new PDFDocument(); document.Load(path)withPdfDocument.FromFile(path)new PDFDocument(); document.Load(stream)withPdfDocument.FromStream(stream)- 手動
for (int i = 0; i < document.PageCount; i++)(orpdf.ExtractTextFromPage(i)) pdf.Dispose()(またはusingブロック) に置き換える- アプリケーションの起動時にライセンスの初期化を追加
移行後
- PDFの読み込みと保存をテストする
- テキスト抽出機能の検証
- HTMLからPDFへの変換テスト
- サーバーの展開が機能していることを確認する(新機能)
- 必要に応じてクロスプラットフォームをテストする(新機能)
- サーバーのみの場合はUI固有のPDFコードを削除します

