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

C#でNutrient.ioからIronPDFに移行する方法

Nutrient.io(旧PSPDFKit)からIronPDFへの移行は、非同期ファーストのパターンを持つ複雑なドキュメントインテリジェンスプラットフォームから、簡単な同期APIを持つPDFライブラリへ移行することで、.NET PDFワークフローを簡素化します。このガイドでは、すべての重要なPDF機能を維持しながらプラットフォームのオーバーヘッドを排除する、包括的でステップバイステップの移行パスを提供します。

Nutrient.ioからIronPDFに移行する理由

プラットフォームの複雑性の問題

Nutrient.io(旧PSPDFKit)は、PDF SDKから包括的な "ドキュメントインテリジェンスプラットフォーム "へと進化しました。この変革は、機能の幅を広げる一方で、単に信頼性の高いPDF操作が必要なチームにとっては大きな課題をもたらします:

1.プラットフォームの過剰エンジニアリング:かつては PDF SDK だったものが、今では AI 機能とドキュメント ワークフロー機能を備えた完全なドキュメント インテリジェンス プラットフォームになっていますが、単純な PDF タスクには不要な場合があります。

2.エンタープライズ価格設定: Nutrient.io は、価格設定が不透明で営業担当者への問い合わせが必要な大規模組織向けに位置付けられています。 そのため、小規模から中規模のチームにとっては障壁となり、予算計画も難しくなります。

3.ブランド変更に伴う混乱: PSPDFKit から Nutrient への移行により、両方の名称を参照するドキュメントに問題が発生しています。パッケージ名には引き続き PSPDFKit が使用される可能性があり、移行中の移行パスは依然として不明確です。

4.非同期優先の複雑さ: Nutrient.io のすべてには async/await パターンが必要です。 単純な操作でも、初期化には PdfProcessor.CreateAsync() が必要で、基本タスクには非同期メソッドが必要であり、同期ワークフローにオーバーヘッドが追加されます。

5.依存関係が重い:完全なプラットフォームでは、パッケージのフットプリントが大きくなり、初期化に時間がかかり、構成も追加されるため、より多くのリソースが必要になります。

Nutrient.ioとIronPDFの比較

アスペクト Nutrient.io (PSPDFKit) IronPDF
フォーカス ドキュメントインテリジェンスプラットフォーム PDFライブラリ
価格 エンタープライズ(営業担当) 透明性のある出版物
アーキテクチャ 複雑なプラットフォーム シンプルなライブラリ
APIスタイル 非同期ファースト 非同期オプション付き同期
依存関係 重い 軽量
構成 複雑な設定オブジェクト わかりやすいプロパティ
学習曲線 Steep(プラットフォーム) ジェントル(ライブラリ)
対象ユーザー エンタープライズ すべてのチームサイズ

2025年、2026年まで.NET 10とC# 14の導入を計画しているチームにとって、IronPDFは完全なドキュメントインテリジェンスプラットフォームのオーバーヘッドなしにきれいに統合する、よりシンプルな基盤を提供します。


始める前に

前提条件

  1. .NET環境: .NET Framework 4.6.2+ または.NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGetアクセス: NuGetパッケージをインストールする機能
  3. IronPDFライセンス: IronPDFからライセンスキーを取得します。

NuGetパッケージの変更

# Remove Nutrient/PSPDFKit packages
dotnet remove package PSPDFKit.NET
dotnet remove package PSPDFKit.PDF
dotnet remove package Nutrient
dotnet remove package Nutrient.PDF

# Install IronPDF
dotnet add package IronPdf
# Remove Nutrient/PSPDFKit packages
dotnet remove package PSPDFKit.NET
dotnet remove package PSPDFKit.PDF
dotnet remove package Nutrient
dotnet remove package Nutrient.PDF

# Install IronPDF
dotnet add package IronPdf
SHELL

ライセンス構成

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Nutrient.ioの使用方法を確認する

# Find all Nutrient/PSPDFKit references
grep -r "PSPDFKit\|Nutrient\|PdfProcessor\|PdfConfiguration" --include="*.cs" .
# Find all Nutrient/PSPDFKit references
grep -r "PSPDFKit\|Nutrient\|PdfProcessor\|PdfConfiguration" --include="*.cs" .
SHELL

完全な API リファレンス

初期化マッピング

Nutrient.io (PSPDFKit) IronPDF
await PdfProcessor.CreateAsync() new ChromePdfRenderer()
processor.Dispose() (自動または手動)
new PdfConfiguration { ... } renderer.RenderingOptions

ドキュメント読み込みマッピング

Nutrient.io (PSPDFKit) IronPDF
await processor.OpenAsync(path) PdfDocument.FromFile(path)
Document.LoadFromStream(stream) PdfDocument.FromStream(stream)
Document.LoadFromBytes(bytes) new PdfDocument(bytes)

PDF生成マッピング

Nutrient.io (PSPDFKit) IronPDF
await processor.GeneratePdfFromHtmlStringAsync(html) renderer.RenderHtmlAsPdf(html)
await processor.GeneratePdfFromUrlAsync(url) renderer.RenderUrlAsPdf(url)
await processor.GeneratePdfFromFileAsync(path) renderer.RenderHtmlFileAsPdf(path)

ドキュメント操作マッピング

Nutrient.io (PSPDFKit) IronPDF
await processor.MergeAsync(docs) PdfDocument.Merge(pdfs)
document.PageCount pdf.PageCount
await document.SaveAsync(path) pdf.SaveAs(path)
document.ToBytes() pdf.BinaryData

注釈と透かしのマッピング

Nutrient.io (PSPDFKit) IronPDF
await document.AddAnnotationAsync(index, annotation) pdf.ApplyWatermark(html)
new TextAnnotation("text") 透かしのHTML
annotation.Opacity = 0.5 CSS opacity: 0.5
annotation.FontSize = 48 CSS font-size: 48px

コード移行の例

例1: HTMLからPDFへの変換

翻訳前 (Nutrient.io):

// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        using var processor = await PdfProcessor.CreateAsync();
        var document = await processor.GeneratePdfFromHtmlStringAsync(htmlContent);
        await document.SaveAsync("output.pdf");
    }
}
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        using var processor = await PdfProcessor.CreateAsync();
        var document = await processor.GeneratePdfFromHtmlStringAsync(htmlContent);
        await document.SaveAsync("output.pdf");
    }
}
Imports PSPDFKit.Pdf
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"

        Using processor = Await PdfProcessor.CreateAsync()
            Dim document = Await processor.GeneratePdfFromHtmlStringAsync(htmlContent)
            Await document.SaveAsync("output.pdf")
        End Using
    End Function
End Module
$vbLabelText   $csharpLabel

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"

        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Nutrient.io のアプローチには、いくつかの非同期ステップが必要です: await PdfProcessor.CreateAsync() を使用して PdfProcessor を作成し、次に await processor.GeneratePdfFromHtmlStringAsync() を呼び出し、最後に await document.SaveAsync() を呼び出します。 メソッド全体には async Task のマークを付ける必要があり、プロセッサには適切な処理のために using ステートメントが必要です。

IronPDFはこれを劇的に簡素化します。 ChromePdfRenderer を作成し、RenderHtmlAsPdf() を呼び出し、SaveAs() で保存します。 async/await は必要なく、プロセッサのライフサイクルを管理する必要もなく、単純な操作には using ブロックも必要ありません。 このパターンは、PDFワークフローに非同期パターンを必要としない開発者にとっては、より直感的です。 その他のレンダリングオプションについては、HTML to PDF documentationを参照してください。

例2: 複数のPDFをマージする

翻訳前 (Nutrient.io):

// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;
using System.Collections.Generic;

class Program
{
    static async Task Main()
    {
        using var processor = await PdfProcessor.CreateAsync();

        var document1 = await processor.OpenAsync("document1.pdf");
        var document2 = await processor.OpenAsync("document2.pdf");

        var mergedDocument = await processor.MergeAsync(new List<PdfDocument> { document1, document2 });
        await mergedDocument.SaveAsync("merged.pdf");
    }
}
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;
using System.Collections.Generic;

class Program
{
    static async Task Main()
    {
        using var processor = await PdfProcessor.CreateAsync();

        var document1 = await processor.OpenAsync("document1.pdf");
        var document2 = await processor.OpenAsync("document2.pdf");

        var mergedDocument = await processor.MergeAsync(new List<PdfDocument> { document1, document2 });
        await mergedDocument.SaveAsync("merged.pdf");
    }
}
Imports PSPDFKit.Pdf
Imports System.Threading.Tasks
Imports System.Collections.Generic

Class Program
    Shared Async Function Main() As Task
        Using processor = Await PdfProcessor.CreateAsync()

            Dim document1 = Await processor.OpenAsync("document1.pdf")
            Dim document2 = Await processor.OpenAsync("document2.pdf")

            Dim mergedDocument = Await processor.MergeAsync(New List(Of PdfDocument) From {document1, document2})
            Await mergedDocument.SaveAsync("merged.pdf")
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

翻訳後(IronPDF):

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

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
Imports IronPdf
Imports System.Collections.Generic

Class Program
    Shared Sub Main()
        Dim pdf1 = PdfDocument.FromFile("document1.pdf")
        Dim pdf2 = PdfDocument.FromFile("document2.pdf")

        Dim merged = PdfDocument.Merge(pdf1, pdf2)
        merged.SaveAs("merged.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Nutrient.io のマージ操作では、await PdfProcessor.CreateAsync() を使用してプロセッサを作成し、各ドキュメントを個別の await processor.OpenAsync() 呼び出しで開き、List<PdfDocument> を作成し、そのリストを使用して await processor.MergeAsync() を呼び出し、最後に await mergedDocument.SaveAsync() を実行する必要があります。 これは、基本的なマージのための5つの非同期操作です。

IronPDF はこれを 4 つの同期行に削減します。各 PDF を PdfDocument.FromFile() で読み込み、静的な PdfDocument.Merge() メソッドでマージし、保存します。 プロセッサのライフサイクルがなく、リスト作成が不要で(ドキュメントを直接渡すことができます)、非同期のオーバーヘッドがありません。 PDFのマージと分割については、こちらをご覧ください。

例3: 透かしを追加する

翻訳前 (Nutrient.io):

// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using PSPDFKit.Pdf.Annotation;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var processor = await PdfProcessor.CreateAsync();
        var document = await processor.OpenAsync("document.pdf");

        for (int i = 0; i < document.PageCount; i++)
        {
            var watermark = new TextAnnotation("CONFIDENTIAL")
            {
                Opacity = 0.5,
                FontSize = 48
            };
            await document.AddAnnotationAsync(i, watermark);
        }

        await document.SaveAsync("watermarked.pdf");
    }
}
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using PSPDFKit.Pdf.Annotation;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var processor = await PdfProcessor.CreateAsync();
        var document = await processor.OpenAsync("document.pdf");

        for (int i = 0; i < document.PageCount; i++)
        {
            var watermark = new TextAnnotation("CONFIDENTIAL")
            {
                Opacity = 0.5,
                FontSize = 48
            };
            await document.AddAnnotationAsync(i, watermark);
        }

        await document.SaveAsync("watermarked.pdf");
    }
}
Imports PSPDFKit.Pdf
Imports PSPDFKit.Pdf.Annotation
Imports System.Threading.Tasks

Class Program
    Shared Async Function Main() As Task
        Using processor = Await PdfProcessor.CreateAsync()
            Dim document = Await processor.OpenAsync("document.pdf")

            For i As Integer = 0 To document.PageCount - 1
                Dim watermark = New TextAnnotation("CONFIDENTIAL") With {
                    .Opacity = 0.5,
                    .FontSize = 48
                }
                Await document.AddAnnotationAsync(i, watermark)
            Next

            Await document.SaveAsync("watermarked.pdf")
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");

        pdf.ApplyWatermark("<h1 style='color:gray;opacity:0.5;'>CONFIDENTIAL</h1>",
            50,
            VerticalAlignment.Middle,
            HorizontalAlignment.Center);

        pdf.SaveAs("watermarked.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");

        pdf.ApplyWatermark("<h1 style='color:gray;opacity:0.5;'>CONFIDENTIAL</h1>",
            50,
            VerticalAlignment.Middle,
            HorizontalAlignment.Center);

        pdf.SaveAs("watermarked.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Editing

Class Program
    Shared Sub Main()
        Dim pdf = PdfDocument.FromFile("document.pdf")

        pdf.ApplyWatermark("<h1 style='color:gray;opacity:0.5;'>CONFIDENTIAL</h1>", 
                           50, 
                           VerticalAlignment.Middle, 
                           HorizontalAlignment.Center)

        pdf.SaveAs("watermarked.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

この例では、基本的なアーキテクチャの違いが浮き彫りになっています。 Nutrient.io は注釈ベースのアプローチを使用します。つまり、OpacityFontSize などのプロパティを持つ TextAnnotation オブジェクトを作成し、各ページに対して await document.AddAnnotationAsync(i, watermark) を呼び出してすべてのページをループします。 そのためには、注釈システムを理解し、自らループを管理する必要があります。

IronPDF はHTML ベースのアプローチを使用します。 ApplyWatermark() メソッドは CSS スタイル付きの HTML 文字列を受け入れます。 透かしは、1回の呼び出しですべてのページに自動的に適用されます。 外観は、注釈固有のオブジェクト プロパティではなく、使い慣れた CSS プロパティ (font-size) を通じて制御します。 グラデーション、画像、複雑なレイアウトなど、あらゆるHTML/CSSを使用できます。 高度な例については、透かしのドキュメントを参照してください。


重要な移行に関する注意事項

非同期から同期への変換

最も大きな変更点は、不要なasync/awaitパターンを削除したことです:

// Nutrient.io: Async-first
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.GeneratePdfFromHtmlStringAsync(html);
await document.SaveAsync("output.pdf");

// IronPDF: Sync by default (async available when needed)
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Nutrient.io: Async-first
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.GeneratePdfFromHtmlStringAsync(html);
await document.SaveAsync("output.pdf");

// IronPDF: Sync by default (async available when needed)
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Imports System
Imports System.Threading.Tasks

' Nutrient.io: Async-first
Using processor = Await PdfProcessor.CreateAsync()
    Dim document = Await processor.GeneratePdfFromHtmlStringAsync(html)
    Await document.SaveAsync("output.pdf")
End Using

' IronPDF: Sync by default (async available when needed)
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

非同期操作が必要な場合、IronPDFはRenderHtmlAsPdfAsync() のような非同期バリアントを提供します。

プロセッサ ライフサイクルの排除

Nutrient.ioは、プロセッサの作成と廃棄が必要です:

// Nutrient.io: Processor lifecycle management
using var processor = await PdfProcessor.CreateAsync();
// ... use processor ...
// Processor disposed at end of using block

// IronPDF: No processor lifecycle
var renderer = new ChromePdfRenderer();
// Reuse renderer, no complex lifecycle management
// Nutrient.io: Processor lifecycle management
using var processor = await PdfProcessor.CreateAsync();
// ... use processor ...
// Processor disposed at end of using block

// IronPDF: No processor lifecycle
var renderer = new ChromePdfRenderer();
// Reuse renderer, no complex lifecycle management
Imports IronPdf

' Nutrient.io: Processor lifecycle management
Using processor = Await PdfProcessor.CreateAsync()
    ' ... use processor ...
    ' Processor disposed at end of using block
End Using

' IronPDF: No processor lifecycle
Dim renderer As New ChromePdfRenderer()
' Reuse renderer, no complex lifecycle management
$vbLabelText   $csharpLabel

構成パターンの変更

Nutrient.ioは設定オブジェクトを使用します; IronPDFはプロパティを使用します:

// Nutrient.io: Config object
var config = new PdfConfiguration
{
    PageSize = PageSize.A4,
    Margins = new Margins(20, 20, 20, 20)
};
var doc = await processor.GeneratePdfFromHtmlStringAsync(html, config);

// IronPDF: Properties on RenderingOptions
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
var pdf = renderer.RenderHtmlAsPdf(html);
// Nutrient.io: Config object
var config = new PdfConfiguration
{
    PageSize = PageSize.A4,
    Margins = new Margins(20, 20, 20, 20)
};
var doc = await processor.GeneratePdfFromHtmlStringAsync(html, config);

// IronPDF: Properties on RenderingOptions
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
var pdf = renderer.RenderHtmlAsPdf(html);
Imports System.Threading.Tasks

' Nutrient.io: Config object
Dim config As New PdfConfiguration With {
    .PageSize = PageSize.A4,
    .Margins = New Margins(20, 20, 20, 20)
}
Dim doc = Await processor.GeneratePdfFromHtmlStringAsync(html, config)

' IronPDF: Properties on RenderingOptions
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

HTML透かしへの注釈

注釈オブジェクトをHTML文字列に置き換える:

// Nutrient.io: Annotation object with properties
new TextAnnotation("CONFIDENTIAL") { Opacity = 0.5f, FontSize = 48 }

// IronPDF: HTML with CSS
"<h1 style='opacity:0.5; font-size:48px;'>CONFIDENTIAL</h1>"
// Nutrient.io: Annotation object with properties
new TextAnnotation("CONFIDENTIAL") { Opacity = 0.5f, FontSize = 48 }

// IronPDF: HTML with CSS
"<h1 style='opacity:0.5; font-size:48px;'>CONFIDENTIAL</h1>"
' Nutrient.io: Annotation object with properties
New TextAnnotation("CONFIDENTIAL") With {.Opacity = 0.5F, .FontSize = 48}

' IronPDF: HTML with CSS
"<h1 style='opacity:0.5; font-size:48px;'>CONFIDENTIAL</h1>"
$vbLabelText   $csharpLabel

ページ番号の取り扱い

Nutrient.ioでは、手動によるページカウントが必要です; IronPDFにはプレースホルダーが組み込まれています:

// Nutrient.io: Manual loop and page counting
for (int i = 0; i < doc.PageCount; i++)
{
    var footer = new TextAnnotation($"Page {i + 1} of {doc.PageCount}");
    await doc.AddAnnotationAsync(i, footer);
}

// IronPDF: Built-in placeholders
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "Page {page} of {total-pages}"
};
// Nutrient.io: Manual loop and page counting
for (int i = 0; i < doc.PageCount; i++)
{
    var footer = new TextAnnotation($"Page {i + 1} of {doc.PageCount}");
    await doc.AddAnnotationAsync(i, footer);
}

// IronPDF: Built-in placeholders
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "Page {page} of {total-pages}"
};
' Nutrient.io: Manual loop and page counting
For i As Integer = 0 To doc.PageCount - 1
    Dim footer = New TextAnnotation($"Page {i + 1} of {doc.PageCount}")
    Await doc.AddAnnotationAsync(i, footer)
Next

' IronPDF: Built-in placeholders
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .HtmlFragment = "Page {page} of {total-pages}"
}
$vbLabelText   $csharpLabel

トラブルシューティング

問題 1: PdfProcessor が見つかりません

問題: PdfProcessor クラスがIronPDFに存在しません。

解決策: ChromePdfRenderer を使用します。

// Nutrient.io
using var processor = await PdfProcessor.CreateAsync();

// IronPDF
var renderer = new ChromePdfRenderer();
// Nutrient.io
using var processor = await PdfProcessor.CreateAsync();

// IronPDF
var renderer = new ChromePdfRenderer();
' Nutrient.io
Using processor = Await PdfProcessor.CreateAsync()

' IronPDF
Dim renderer = New ChromePdfRenderer()
$vbLabelText   $csharpLabel

問題 2: GeneratePdfFromHtmlStringAsync が見つかりません

問題:非同期 HTML メソッドが存在しません。

解決策: RenderHtmlAsPdf() を使用します。

// Nutrient.io
var document = await processor.GeneratePdfFromHtmlStringAsync(html);

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
// Nutrient.io
var document = await processor.GeneratePdfFromHtmlStringAsync(html);

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
' Nutrient.io
Dim document = Await processor.GeneratePdfFromHtmlStringAsync(html)

' IronPDF
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

課題3: テキストアノテーションが見つかりません

問題: IronPDFに注釈クラスが存在しません。

解決策: HTML ベースの透かしを使用する:

// Nutrient.io
var watermark = new TextAnnotation("DRAFT") { Opacity = 0.5 };
await document.AddAnnotationAsync(0, watermark);

// IronPDF
pdf.ApplyWatermark("<div style='opacity:0.5;'>DRAFT</div>");
// Nutrient.io
var watermark = new TextAnnotation("DRAFT") { Opacity = 0.5 };
await document.AddAnnotationAsync(0, watermark);

// IronPDF
pdf.ApplyWatermark("<div style='opacity:0.5;'>DRAFT</div>");
Imports System.Threading.Tasks

' Nutrient.io
Dim watermark As New TextAnnotation("DRAFT") With {.Opacity = 0.5}
Await document.AddAnnotationAsync(0, watermark)

' IronPDF
pdf.ApplyWatermark("<div style='opacity:0.5;'>DRAFT</div>")
$vbLabelText   $csharpLabel

問題 4: MergeAsync が見つかりません

問題:非同期マージ メソッドが存在しません。

解決策:静的 PdfDocument.Merge() を使用します:

// Nutrient.io
var mergedDocument = await processor.MergeAsync(documentList);

// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);
// Nutrient.io
var mergedDocument = await processor.MergeAsync(documentList);

// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);
Imports System.Threading.Tasks

' Nutrient.io
Dim mergedDocument = Await processor.MergeAsync(documentList)

' IronPDF
Dim merged = PdfDocument.Merge(pdf1, pdf2)
$vbLabelText   $csharpLabel

移行チェックリスト

移行前

  • コードベース内のすべてのPSPDFKit/Nutrientの使用状況を一覧表示する
  • 調整が必要な可能性のある非同期パターンを文書化する
  • すべての構成オブジェクトとそのプロパティを一覧表示する
  • 注釈ベースの機能(透かし、ヘッダー)を識別する
  • フォーム処理要件を確認する
  • IronPDFライセンスキーを取得する

パッケージの変更

  • PSPDFKit.NET NuGetパッケージを削除します
  • Nutrient NuGetパッケージを削除します
  • IronPdf NuGetパッケージをインストールします: dotnet add package IronPdf
  • 名前空間のインポートを更新する

コードの変更

  • 起動時にライセンスキー設定を追加する
  • PdfProcessor.CreateAsync()new ChromePdfRenderer() に置き換えます
  • processor.GeneratePdfFromHtmlStringAsync()renderer.RenderHtmlAsPdf() に置き換えます
  • processor.MergeAsync()PdfDocument.Merge() に置き換えます
  • TextAnnotation 透かしを HTML 透かしに変換します
  • 構成オブジェクトを RenderingOptions プロパティに置き換えます
  • プレースホルダー付きの HtmlHeaderFooter を使用するようにヘッダー/フッターを更新します
  • 不要な async/await パターンを削除する

移行後

  • 不要になった async/await を削除します
  • PDF出力を比較する回帰テストを実行する
  • ページ番号付きのヘッダー/フッターを検証する
  • 透かしのレンダリングをテストする
  • CI/CDパイプラインの更新

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

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

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

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね