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

C#でApryse PDFからIronPDFへ移行する方法

Full Comparison

Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against Apryse PDF on pricing, HTML support, and licensing.

View Full Comparison

Apryse PDF(旧PDFTron)は、包括的な文書処理機能で知られるプレミアムエンタープライズPDF SDKです。 しかし、プレミアム価格モデル(開発者1人あたり年間1,500ドル以上)、複雑な統合要件、C++の遺産は、わかりやすいPDF機能を求める開発チームにとって障壁となります。 この包括的なガイドは、Apryse PDFからIronPDFへのステップバイステップの移行経路を提供します。IronPDFは、最新のC#規約、よりシンプルな統合、1回限りの永久ライセンスを持つ.NETネイティブPDFライブラリです。

なぜApryse PDFから移行するのですか?

Apryse PDFは堅牢な機能を提供しますが、開発チームがPDF生成のニーズに対して代替手段を求めるようになるには、いくつかの要因があります。

プレミアム価格とサブスクリプションモデル

Apryse PDFは企業顧客をターゲットにしており、中小規模のプロジェクトでは法外な価格設定になる可能性があります:

アスペクト Apryse PDF (PDFTron) IronPDF
開始価格 1,500ドル以上/開発者/年(報告済み) 1回749ドル(Lite)
ライセンスモデル 年間サブスクリプション 永久ライセンス
ビューアライセンス 別途追加費用 該当なし(標準ビューアを使用)
サーバーライセンス 要エンタープライズ価格 ライセンス階層に含まれるもの
3年間の総費用 開発者1人あたり4,500ドル以上 749ドル

統合の複雑さ

Apryse PDFのC#の伝統は、開発速度に影響を与える複雑さをもたらします:

フィーチャー Apryse PDF IronPDF
セットアップ モジュールパス、外部バイナリ 単一のNuGetパッケージ
初期化 PDFNet.Initialize() ライセンス付き 簡単なプロパティの割り当て
HTMLレンダリング 外部html2pdfモジュールが必要です。 内蔵Chromiumエンジン
APIスタイル C#の遺産、複雑な 最新のC#規約
依存関係について 複数のDLL、プラットフォーム固有 自己完結型パッケージ

いつ移行を考慮すべきか

以下の場合はIronPDFに移行してください:

  • 主にHTML/URLからPDFへの変換が必要です。
  • 定型文の少ないシンプルなAPIを希望
  • プレミアム価格は、お客様のユースケースに適していません。
  • PDFViewCtrlビューアコントロールは必要ありません。
  • あなたはサブスクリプションよりも一回限りのライセンスを好む

次のような場合は、Apryse PDFをご利用ください。

  • ネイティブビューアコントロール(PDFViewCtrl)が必要です。
  • XODまたは独自のフォーマットを多用している。
  • 特定のエンタープライズ機能(高度な再編集など)が必要です。
  • すでにエンタープライズライセンスを所有している

移行前の準備

前提条件

あなたの環境がこれらの要件を満たしていることを確認してください:

  • .NET Framework 4.6.2+または.NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+またはC#拡張機能付きVS Code
  • NuGetパッケージマネージャへのアクセス
  • IronPDFライセンスキー (ironpdf.com にて無料トライアル可能)

AuditのApryse PDFの使用方法

ソリューションディレクトリでこれらのコマンドを実行し、すべてのApryse参照を特定します:

# Find all pdftron using statements
grep -r "using pdftron" --include="*.cs" .

# Find PDFNet initialization
grep -r "PDFNet.Initialize\|PDFNet.SetResourcesPath" --include="*.cs" .

# Find PDFDoc usage
grep -r "new PDFDoc\|PDFDoc\." --include="*.cs" .

# Find HTML2PDF usage
grep -r "HTML2PDF\|InsertFromURL\|InsertFromHtmlString" --include="*.cs" .

# Find ElementReader/Writer usage
grep -r "ElementReader\|ElementWriter\|ElementBuilder" --include="*.cs" .
# Find all pdftron using statements
grep -r "using pdftron" --include="*.cs" .

# Find PDFNet initialization
grep -r "PDFNet.Initialize\|PDFNet.SetResourcesPath" --include="*.cs" .

# Find PDFDoc usage
grep -r "new PDFDoc\|PDFDoc\." --include="*.cs" .

# Find HTML2PDF usage
grep -r "HTML2PDF\|InsertFromURL\|InsertFromHtmlString" --include="*.cs" .

# Find ElementReader/Writer usage
grep -r "ElementReader\|ElementWriter\|ElementBuilder" --include="*.cs" .
SHELL

予想される画期的な変更

Apryse PDFパターン 必要な変更
PDFNet.Initialize() IronPdf.License.LicenseKey に置き換えます
HTML2PDF モジュール 組み込み ChromePdfRenderer
ElementWriter IronPDFは内部でコンテンツを処理します。
SDFDoc.SaveOptions シンプルなSaveAs()メソッド
PDFViewCtrl 外部PDFビューアの使用
XODフォーマット PDFまたは画像に変換
モジュールパスの構成 不要

ステップごとの移行プロセス

ステップ 1: NuGet パッケージを更新する

Apryse/PDFTronパッケージを削除し、IronPDFをインストールしてください:

# Remove Apryse/PDFTron packages
dotnet remove package PDFTron.NET.x64
dotnet remove package PDFTron.NET.x86
dotnet remove package pdftron

# Install IronPDF
dotnet add package IronPdf
# Remove Apryse/PDFTron packages
dotnet remove package PDFTron.NET.x64
dotnet remove package PDFTron.NET.x86
dotnet remove package pdftron

# Install IronPDF
dotnet add package IronPdf
SHELL

またはパッケージマネージャーコンソールから:

Uninstall-Package PDFTron.NET.x64
Install-Package IronPdf

ステップ 2: 名前空間参照の更新

Apryseの名前空間をIronPDFに置き換えてください:

// Remove these
using pdftron;
using pdftron.PDF;
using pdftron.PDF.Convert;
using pdftron.SDF;
using pdftron.Filters;

// Add these
using IronPdf;
using IronPdf.Rendering;
// Remove these
using pdftron;
using pdftron.PDF;
using pdftron.PDF.Convert;
using pdftron.SDF;
using pdftron.Filters;

// Add these
using IronPdf;
using IronPdf.Rendering;
Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

ステップ 3: 初期化ボイラープレートの削除

Apryse PDFは複雑な初期化を必要とします。 IronPDFはこのような問題を完全に解決します。

ApryseのPDF実装:

// Complex initialization
PDFNet.Initialize("YOUR_LICENSE_KEY");
PDFNet.SetResourcesPath("path/to/resources");
// Plus module path for HTML2PDF...
// Complex initialization
PDFNet.Initialize("YOUR_LICENSE_KEY");
PDFNet.SetResourcesPath("path/to/resources");
// Plus module path for HTML2PDF...
' Complex initialization
PDFNet.Initialize("YOUR_LICENSE_KEY")
PDFNet.SetResourcesPath("path/to/resources")
' Plus module path for HTML2PDF...
$vbLabelText   $csharpLabel

IronPDFの実装:

// Simple license assignment (optional for development)
IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";
// Simple license assignment (optional for development)
IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";
' Simple license assignment (optional for development)
IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY"
$vbLabelText   $csharpLabel

IronPDFでは PDFNet.Terminate() 呼び出しは必要ありません。リソースは自動的に管理されます。

完全な API 移行のリファレンス

コア クラス マッピング

Apryse PDFクラス IronPDF 同等物
PDFDoc PdfDocument
HTML2PDF ChromePdfRenderer
TextExtractor PdfDocument.ExtractAllText()
Stamper PdfDocument.ApplyWatermark()
PDFDraw PdfDocument.ToBitmap()
SecurityHandler PdfDocument.SecuritySettings
PDFNet IronPdf.License

ドキュメント操作

ApryseのPDFメソッド IronPDF メソッド
new PDFDoc() new PdfDocument()
new PDFDoc(path) PdfDocument.FromFile(path)
new PDFDoc(buffer) PdfDocument.FromBinaryData(bytes)
doc.Save(path, options) pdf.SaveAs(path)
doc.Save(buffer) pdf.BinaryData
doc.Close() pdf.Dispose()
doc.GetPageCount() pdf.PageCount
doc.AppendPages(doc2, start, end) PdfDocument.Merge(pdfs)

HTMLからPDFへの変換

ApryseのPDFメソッド IronPDF メソッド
HTML2PDF.Convert(doc) renderer.RenderHtmlAsPdf(html)
converter.InsertFromURL(url) renderer.RenderUrlAsPdf(url)
converter.InsertFromHtmlString(html) renderer.RenderHtmlAsPdf(html)
converter.SetModulePath(path) 不要
converter.SetPaperSize(width, height) RenderingOptions.PaperSize
converter.SetLandscape(true) RenderingOptions.PaperOrientation

コード移行の例

HTML文字列をPDFに変換

最も一般的な作業は、定型的なコードを劇的に削減することを実証しています。

ApryseのPDF実装:

using pdftron;
using pdftron.PDF;

class Program
{
    static void Main()
    {
        PDFNet.Initialize("YOUR_LICENSE_KEY");
        PDFNet.SetResourcesPath("path/to/resources");

        string html = "<html><body><h1>Hello World</h1><p>Content here</p></body></html>";

        using (PDFDoc doc = new PDFDoc())
        {
            HTML2PDF converter = new HTML2PDF();
            converter.SetModulePath("path/to/html2pdf");
            converter.InsertFromHtmlString(html);

            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);

            if (converter.Convert(doc))
            {
                doc.Save("output.pdf", SDFDoc.SaveOptions.e_linearized);
                Console.WriteLine("PDF created successfully");
            }
            else
            {
                Console.WriteLine($"Conversion failed: {converter.GetLog()}");
            }
        }

        PDFNet.Terminate();
    }
}
using pdftron;
using pdftron.PDF;

class Program
{
    static void Main()
    {
        PDFNet.Initialize("YOUR_LICENSE_KEY");
        PDFNet.SetResourcesPath("path/to/resources");

        string html = "<html><body><h1>Hello World</h1><p>Content here</p></body></html>";

        using (PDFDoc doc = new PDFDoc())
        {
            HTML2PDF converter = new HTML2PDF();
            converter.SetModulePath("path/to/html2pdf");
            converter.InsertFromHtmlString(html);

            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);

            if (converter.Convert(doc))
            {
                doc.Save("output.pdf", SDFDoc.SaveOptions.e_linearized);
                Console.WriteLine("PDF created successfully");
            }
            else
            {
                Console.WriteLine($"Conversion failed: {converter.GetLog()}");
            }
        }

        PDFNet.Terminate();
    }
}
Imports pdftron
Imports pdftron.PDF

Class Program
    Shared Sub Main()
        PDFNet.Initialize("YOUR_LICENSE_KEY")
        PDFNet.SetResourcesPath("path/to/resources")

        Dim html As String = "<html><body><h1>Hello World</h1><p>Content here</p></body></html>"

        Using doc As New PDFDoc()
            Dim converter As New HTML2PDF()
            converter.SetModulePath("path/to/html2pdf")
            converter.InsertFromHtmlString(html)

            Dim settings As New HTML2PDF.WebPageSettings()
            settings.SetPrintBackground(True)
            settings.SetLoadImages(True)

            If converter.Convert(doc) Then
                doc.Save("output.pdf", SDFDoc.SaveOptions.e_linearized)
                Console.WriteLine("PDF created successfully")
            Else
                Console.WriteLine($"Conversion failed: {converter.GetLog()}")
            End If
        End Using

        PDFNet.Terminate()
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDFの実装:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(html)

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

IronPdfは初期化、モジュールパス、クリーンアップコードを排除し、35行以上を5行に削減します。

URLからPDFへの変換

ApryseのPDF実装:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc())
{
    HTML2PDF converter = new HTML2PDF();
    converter.SetModulePath("path/to/html2pdf");

    HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
    settings.SetLoadImages(true);
    settings.SetAllowJavaScript(true);
    settings.SetPrintBackground(true);

    converter.InsertFromURL("https://example.com", settings);

    if (converter.Convert(doc))
    {
        doc.Save("webpage.pdf", SDFDoc.SaveOptions.e_linearized);
    }
}

PDFNet.Terminate();
using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc())
{
    HTML2PDF converter = new HTML2PDF();
    converter.SetModulePath("path/to/html2pdf");

    HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
    settings.SetLoadImages(true);
    settings.SetAllowJavaScript(true);
    settings.SetPrintBackground(true);

    converter.InsertFromURL("https://example.com", settings);

    if (converter.Convert(doc))
    {
        doc.Save("webpage.pdf", SDFDoc.SaveOptions.e_linearized);
    }
}

PDFNet.Terminate();
Imports pdftron
Imports pdftron.PDF

PDFNet.Initialize("YOUR_LICENSE_KEY")

Using doc As New PDFDoc()
    Dim converter As New HTML2PDF()
    converter.SetModulePath("path/to/html2pdf")

    Dim settings As New HTML2PDF.WebPageSettings()
    settings.SetLoadImages(True)
    settings.SetAllowJavaScript(True)
    settings.SetPrintBackground(True)

    converter.InsertFromURL("https://example.com", settings)

    If converter.Convert(doc) Then
        doc.Save("webpage.pdf", SDFDoc.SaveOptions.e_linearized)
    End If
End Using

PDFNet.Terminate()
$vbLabelText   $csharpLabel

IronPDFの実装:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string url = "https://www.example.com";
        var pdf = renderer.RenderUrlAsPdf(url);

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string url = "https://www.example.com";
        var pdf = renderer.RenderUrlAsPdf(url);

        pdf.SaveAs("webpage.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim url As String = "https://www.example.com"
        Dim pdf = renderer.RenderUrlAsPdf(url)

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

複数のPDFをマージする

ApryseのPDF実装:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc mainDoc = new PDFDoc())
{
    string[] files = { "doc1.pdf", "doc2.pdf", "doc3.pdf" };

    foreach (string file in files)
    {
        using (PDFDoc doc = new PDFDoc(file))
        {
            mainDoc.AppendPages(doc, 1, doc.GetPageCount());
        }
    }

    mainDoc.Save("merged.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();
using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc mainDoc = new PDFDoc())
{
    string[] files = { "doc1.pdf", "doc2.pdf", "doc3.pdf" };

    foreach (string file in files)
    {
        using (PDFDoc doc = new PDFDoc(file))
        {
            mainDoc.AppendPages(doc, 1, doc.GetPageCount());
        }
    }

    mainDoc.Save("merged.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();
Imports pdftron
Imports pdftron.PDF

PDFNet.Initialize("YOUR_LICENSE_KEY")

Using mainDoc As New PDFDoc()
    Dim files As String() = {"doc1.pdf", "doc2.pdf", "doc3.pdf"}

    For Each file As String In files
        Using doc As New PDFDoc(file)
            mainDoc.AppendPages(doc, 1, doc.GetPageCount())
        End Using
    Next

    mainDoc.Save("merged.pdf", SDFDoc.SaveOptions.e_linearized)
End Using

PDFNet.Terminate()
$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(new List<PdfDocument> { 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(new List<PdfDocument> { 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(New List(Of PdfDocument) From {pdf1, pdf2})

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

IronPDF の静的 Merge メソッドは複数のドキュメントを直接受け入れ、ページの反復パターンを排除します。

テキスト抽出

ApryseのPDF実装:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    TextExtractor extractor = new TextExtractor();

    for (int i = 1; i <= doc.GetPageCount(); i++)
    {
        Page page = doc.GetPage(i);
        extractor.Begin(page);

        string pageText = extractor.GetAsText();
        Console.WriteLine($"Page {i}:");
        Console.WriteLine(pageText);
    }
}

PDFNet.Terminate();
using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    TextExtractor extractor = new TextExtractor();

    for (int i = 1; i <= doc.GetPageCount(); i++)
    {
        Page page = doc.GetPage(i);
        extractor.Begin(page);

        string pageText = extractor.GetAsText();
        Console.WriteLine($"Page {i}:");
        Console.WriteLine(pageText);
    }
}

PDFNet.Terminate();
Imports pdftron
Imports pdftron.PDF

PDFNet.Initialize("YOUR_LICENSE_KEY")

Using doc As New PDFDoc("document.pdf")
    Dim extractor As New TextExtractor()

    For i As Integer = 1 To doc.GetPageCount()
        Dim page As Page = doc.GetPage(i)
        extractor.Begin(page)

        Dim pageText As String = extractor.GetAsText()
        Console.WriteLine($"Page {i}:")
        Console.WriteLine(pageText)
    Next
End Using

PDFNet.Terminate()
$vbLabelText   $csharpLabel

IronPDFの実装:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Extract all text at once
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);

// Extract from specific page
string page1Text = pdf.ExtractTextFromPage(0); // 0-indexed
Console.WriteLine($"Page 1: {page1Text}");
using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Extract all text at once
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);

// Extract from specific page
string page1Text = pdf.ExtractTextFromPage(0); // 0-indexed
Console.WriteLine($"Page 1: {page1Text}");
Imports IronPdf

Dim pdf = PdfDocument.FromFile("document.pdf")

' Extract all text at once
Dim allText As String = pdf.ExtractAllText()
Console.WriteLine(allText)

' Extract from specific page
Dim page1Text As String = pdf.ExtractTextFromPage(0) ' 0-indexed
Console.WriteLine($"Page 1: {page1Text}")
$vbLabelText   $csharpLabel

透かしの追加

ApryseのPDF実装:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    Stamper stamper = new Stamper(Stamper.SizeType.e_relative_scale, 0.5, 0.5);
    stamper.SetAlignment(Stamper.HorizontalAlignment.e_horizontal_center,
                         Stamper.VerticalAlignment.e_vertical_center);
    stamper.SetOpacity(0.3);
    stamper.SetRotation(45);
    stamper.SetFontColor(new ColorPt(1, 0, 0));
    stamper.SetTextAlignment(Stamper.TextAlignment.e_align_center);

    stamper.StampText(doc, "CONFIDENTIAL",
        new PageSet(1, doc.GetPageCount()));

    doc.Save("watermarked.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();
using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    Stamper stamper = new Stamper(Stamper.SizeType.e_relative_scale, 0.5, 0.5);
    stamper.SetAlignment(Stamper.HorizontalAlignment.e_horizontal_center,
                         Stamper.VerticalAlignment.e_vertical_center);
    stamper.SetOpacity(0.3);
    stamper.SetRotation(45);
    stamper.SetFontColor(new ColorPt(1, 0, 0));
    stamper.SetTextAlignment(Stamper.TextAlignment.e_align_center);

    stamper.StampText(doc, "CONFIDENTIAL",
        new PageSet(1, doc.GetPageCount()));

    doc.Save("watermarked.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();
Imports pdftron
Imports pdftron.PDF

PDFNet.Initialize("YOUR_LICENSE_KEY")

Using doc As New PDFDoc("document.pdf")
    Dim stamper As New Stamper(Stamper.SizeType.e_relative_scale, 0.5, 0.5)
    stamper.SetAlignment(Stamper.HorizontalAlignment.e_horizontal_center, Stamper.VerticalAlignment.e_vertical_center)
    stamper.SetOpacity(0.3)
    stamper.SetRotation(45)
    stamper.SetFontColor(New ColorPt(1, 0, 0))
    stamper.SetTextAlignment(Stamper.TextAlignment.e_align_center)

    stamper.StampText(doc, "CONFIDENTIAL", New PageSet(1, doc.GetPageCount()))

    doc.Save("watermarked.pdf", SDFDoc.SaveOptions.e_linearized)
End Using

PDFNet.Terminate()
$vbLabelText   $csharpLabel

IronPDFの実装:

using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("document.pdf");

// HTML-based watermark with full styling control
string watermarkHtml = @"
<div style='
    color: red;
    opacity: 0.3;
    font-size: 72px;
    font-weight: bold;
    text-align: center;
'>CONFIDENTIAL</div>";

pdf.ApplyWatermark(watermarkHtml,
    rotation: 45,
    verticalAlignment: VerticalAlignment.Middle,
    horizontalAlignment: HorizontalAlignment.Center);

pdf.SaveAs("watermarked.pdf");
using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("document.pdf");

// HTML-based watermark with full styling control
string watermarkHtml = @"
<div style='
    color: red;
    opacity: 0.3;
    font-size: 72px;
    font-weight: bold;
    text-align: center;
'>CONFIDENTIAL</div>";

pdf.ApplyWatermark(watermarkHtml,
    rotation: 45,
    verticalAlignment: VerticalAlignment.Middle,
    horizontalAlignment: HorizontalAlignment.Center);

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

Dim pdf = PdfDocument.FromFile("document.pdf")

' HTML-based watermark with full styling control
Dim watermarkHtml As String = "
<div style='
    color: red;
    opacity: 0.3;
    font-size: 72px;
    font-weight: bold;
    text-align: center;
'>CONFIDENTIAL</div>"

pdf.ApplyWatermark(watermarkHtml,
    rotation:=45,
    verticalAlignment:=VerticalAlignment.Middle,
    horizontalAlignment:=HorizontalAlignment.Center)

pdf.SaveAs("watermarked.pdf")
$vbLabelText   $csharpLabel

IronPDF はHTML/CSS ベースの透かしを使用しており、使い慣れた Web テクノロジーを通じて完全なスタイル制御を提供します。

パスワード保護

ApryseのPDF実装:

using pdftron;
using pdftron.PDF;
using pdftron.SDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    SecurityHandler handler = new SecurityHandler();
    handler.ChangeUserPassword("user123");
    handler.ChangeMasterPassword("owner456");

    handler.SetPermission(SecurityHandler.Permission.e_print, false);
    handler.SetPermission(SecurityHandler.Permission.e_extract_content, false);

    doc.SetSecurityHandler(handler);
    doc.Save("protected.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();
using pdftron;
using pdftron.PDF;
using pdftron.SDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    SecurityHandler handler = new SecurityHandler();
    handler.ChangeUserPassword("user123");
    handler.ChangeMasterPassword("owner456");

    handler.SetPermission(SecurityHandler.Permission.e_print, false);
    handler.SetPermission(SecurityHandler.Permission.e_extract_content, false);

    doc.SetSecurityHandler(handler);
    doc.Save("protected.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();
Imports pdftron
Imports pdftron.PDF
Imports pdftron.SDF

PDFNet.Initialize("YOUR_LICENSE_KEY")

Using doc As New PDFDoc("document.pdf")
    Dim handler As New SecurityHandler()
    handler.ChangeUserPassword("user123")
    handler.ChangeMasterPassword("owner456")

    handler.SetPermission(SecurityHandler.Permission.e_print, False)
    handler.SetPermission(SecurityHandler.Permission.e_extract_content, False)

    doc.SetSecurityHandler(handler)
    doc.Save("protected.pdf", SDFDoc.SaveOptions.e_linearized)
End Using

PDFNet.Terminate()
$vbLabelText   $csharpLabel

IronPDFの実装:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Set passwords
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";

// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");
using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Set passwords
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";

// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");
Imports IronPdf

Dim pdf = PdfDocument.FromFile("document.pdf")

' Set passwords
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"

' Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit

pdf.SaveAs("protected.pdf")
$vbLabelText   $csharpLabel

ヘッダーとフッター

IronPDFの実装:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:12px;'>Company Header</div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:12px;'>Company Header</div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .HtmlFragment = "<div style='text-align:center; font-size:12px;'>Company Header</div>",
    .DrawDividerLine = True,
    .MaxHeight = 30
}

renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
    .DrawDividerLine = True,
    .MaxHeight = 25
}

Dim pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>")
pdf.SaveAs("with_headers.pdf")
$vbLabelText   $csharpLabel

IronPDF は、動的なページ番号付けのために、{page}{total-pages} などのプレースホルダー トークンをサポートしています。 その他のオプションについては、headers and footers documentationを参照してください。

.NETコアの統合

Apryse PDFの初期化要件は、Webアプリケーションの統合を複雑にします。 IronPDFはこのパターンを簡素化します。

IronPDFパターン:

[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.Stream, "application/pdf", "report.pdf");
    }
}
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.Stream, "application/pdf", "report.pdf");
    }
}
Imports Microsoft.AspNetCore.Mvc

<ApiController>
<Route("[controller]")>
Public Class PdfController
    Inherits ControllerBase

    <HttpGet("generate")>
    Public Function GeneratePdf() As IActionResult
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>")

        Return File(pdf.BinaryData, "application/pdf", "report.pdf")
    End Function

    <HttpGet("generate-async")>
    Public Async Function GeneratePdfAsync() As Task(Of IActionResult)
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>")

        Return File(pdf.Stream, "application/pdf", "report.pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

依存性注入の構成

// Program.cs
public void ConfigureServices(IServiceCollection services)
{
    // Set license once
    IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];

    // Register renderer as scoped service
    services.AddScoped<ChromePdfRenderer>();

    // Or create a wrapper service
    services.AddScoped<IPdfService, IronPdfService>();
}

// IronPdfService.cs
public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        _renderer.RenderingOptions.PrintHtmlBackgrounds = true;
    }

    public PdfDocument GenerateFromHtml(string html) =>
        _renderer.RenderHtmlAsPdf(html);

    public Task<PdfDocument> GenerateFromHtmlAsync(string html) =>
        _renderer.RenderHtmlAsPdfAsync(html);
}
// Program.cs
public void ConfigureServices(IServiceCollection services)
{
    // Set license once
    IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];

    // Register renderer as scoped service
    services.AddScoped<ChromePdfRenderer>();

    // Or create a wrapper service
    services.AddScoped<IPdfService, IronPdfService>();
}

// IronPdfService.cs
public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        _renderer.RenderingOptions.PrintHtmlBackgrounds = true;
    }

    public PdfDocument GenerateFromHtml(string html) =>
        _renderer.RenderHtmlAsPdf(html);

    public Task<PdfDocument> GenerateFromHtmlAsync(string html) =>
        _renderer.RenderHtmlAsPdfAsync(html);
}
' Program.vb
Public Sub ConfigureServices(services As IServiceCollection)
    ' Set license once
    IronPdf.License.LicenseKey = Configuration("IronPdf:LicenseKey")

    ' Register renderer as scoped service
    services.AddScoped(Of ChromePdfRenderer)()

    ' Or create a wrapper service
    services.AddScoped(Of IPdfService, IronPdfService)()
End Sub

' IronPdfService.vb
Public Class IronPdfService
    Implements IPdfService

    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer()
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
        _renderer.RenderingOptions.PrintHtmlBackgrounds = True
    End Sub

    Public Function GenerateFromHtml(html As String) As PdfDocument Implements IPdfService.GenerateFromHtml
        Return _renderer.RenderHtmlAsPdf(html)
    End Function

    Public Function GenerateFromHtmlAsync(html As String) As Task(Of PdfDocument) Implements IPdfService.GenerateFromHtmlAsync
        Return _renderer.RenderHtmlAsPdfAsync(html)
    End Function
End Class
$vbLabelText   $csharpLabel

パフォーマンス比較

メトリック Apryse PDF IronPDF
コールドスタート 高速(ネイティブコード) ~2s (Chromium init)
後続のレンダリング 高速 高速
複雑なHTML 変数(html2pdfモジュール) エクセレント(Chromium)
CSSのサポート 制限的 完全なCSS3
JavaScript(JavaScript 制限的 サポート対象

パフォーマンス最適化のヒント

// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();

// 2. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0);   // No delay
renderer.RenderingOptions.Timeout = 30000;          // 30s max

// 3. Proper disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
    pdf.SaveAs("output.pdf");
}
// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();

// 2. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0);   // No delay
renderer.RenderingOptions.Timeout = 30000;          // 30s max

// 3. Proper disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
    pdf.SaveAs("output.pdf");
}
' 1. Reuse renderer instance
Private Shared ReadOnly SharedRenderer As New ChromePdfRenderer()

' 2. Disable unnecessary features for speed
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = False ' If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0)   ' No delay
renderer.RenderingOptions.Timeout = 30000          ' 30s max

' 3. Proper disposal
Using pdf = renderer.RenderHtmlAsPdf(html)
    pdf.SaveAs("output.pdf")
End Using
$vbLabelText   $csharpLabel

よくある移行の問題のトラブルシューティング

問題モジュールパスのエラー

IronPDFのChromiumエンジンが組み込まれています:

// Remove this
converter.SetModulePath("path/to/html2pdf");

// Just use the renderer
var renderer = new ChromePdfRenderer();
// Remove this
converter.SetModulePath("path/to/html2pdf");

// Just use the renderer
var renderer = new ChromePdfRenderer();
$vbLabelText   $csharpLabel

問題:PDFNet.Initialize() が見つかりません

IronPDFのライセンスセットアップと置き換えてください:

// Remove this
PDFNet.Initialize("KEY");
PDFNet.SetResourcesPath("path");

// Use this (optional for development)
IronPdf.License.LicenseKey = "YOUR-KEY";
// Remove this
PDFNet.Initialize("KEY");
PDFNet.SetResourcesPath("path");

// Use this (optional for development)
IronPdf.License.LicenseKey = "YOUR-KEY";
' Remove this
PDFNet.Initialize("KEY")
PDFNet.SetResourcesPath("path")

' Use this (optional for development)
IronPdf.License.LicenseKey = "YOUR-KEY"
$vbLabelText   $csharpLabel

課題PDFViewCtrl の置き換え

IronPDFにはビューアーコントロールは含まれていません。 オプション

  • PDF.jsをWebビューアに使用する
  • システムPDFビューアの使用
  • サードパーティのビューアコンポーネントを検討する

移行後のチェックリスト

コードの移行が完了したら、以下を確認してください:

  • PDF出力の品質が期待値に合っていることを確認
  • すべてのエッジケースをテストする(大きなドキュメント、複雑なCSS)
  • パフォーマンス指標を比較する
  • 該当する場合はDocker構成を更新します
  • Apryseライセンスと関連設定を削除します
  • IronPDF固有の設定を文書化する
  • 新しい API パターンについてチームをトレーニングする
  • 必要に応じてCI/CDパイプラインを更新する

PDFインフラストラクチャの将来性を確保する

.NET 10が目前に迫り、C# 14が新しい言語機能を導入する中、最新の規約を持つネイティブ for .NET PDFライブラリを選択することで、進化するランタイム機能との互換性を確保できます。 IronPDFは最新 for .NETバージョンをサポートすることに専念しており、プロジェクトが2025年、2026年まで継続しても、年間サブスクリプションの更新なしで、移行への投資は報われます。

その他のリソース


Apryse PDFからIronPDFへの移行は、あなたのPDFコードベースを複雑なC++パターンからイディオムなC#に変換します。 初期化の定型文、モジュールパスの構成、サブスクリプションベースのライセンスを排除することで、長期的なコストを削減しながら、生産性を即座に向上させます。

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

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

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

アイアンサポートチーム

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