IRONSOFTWAREHOME
ビデオ

How to Merge or Split PDF Files in C#

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

Apryse (2023年2月8日に PDFTron からリブランド) は、包括的なドキュメント処理機能で知られるエンタープライズ PDF SDK です。 NuGetパッケージと.NET名前空間は、リブランド後も歴史的なPDFTron.* / pdftron.* IDのまま出荷され続けます。 Apryse はセールス主導の価格設定を使用しており、公的な価格ポイントは apryse.com に掲載されていませんが、第三者市場 (Vendr、G2) では約$1,500/開発者/年からの初期価格が報告されています。 モジュールパスのセットアップと C++ 由来の API と組み合わさり、シンプルな PDF 機能を求めるチームにとって障壁を生む可能性があります。 このガイドは、Apryse からIronPDFへのステップバイステップの移行パスを提供し、これはネイティブ .NET PDF ライブラリであり、最新の C# 規約、単純な統合、および一回限りの永続ライセンスを提供します。

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

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

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

Apryse は、大規模プロジェクトには手頃な価格であるが、中小規模のプロジェクトには手が届きにくいかもしれないセールス主導の価格設定でエンタープライズ顧客をターゲットにしています。 公的な価格ポイントは apryse.com に掲載されていません; 以下の数値は第三者から得られたものであり (Vendr, G2)、Apryse の営業部門と確認するべきです:

アスペクトApryse (PDFTron)IronPDF
エントリーレベル~$1,500/開発者/年 (Vendr 報告)1回749ドル(Lite)
通常の範囲~$9,275–$35,816/年 (Vendr マーケットプレースデータによる)段階的 Lite/Plus/Professional
ライセンスモデル年間サブスクリプション、セールス主導の見積もり永久ライセンス
ビューアライセンスWebViewer/PDFViewCtrl は別料金該当なし(標準ビューアを使用)
サーバーライセンス要エンタープライズ価格ライセンス階層に含まれるもの

統合の複雑さ

Apryse の C++ の伝統が .NET の表面に影響を与え、管理用パッケージのみに比べてセットアップ手順が追加されることがあります:

フィーチャーApryse PDFIronPDF
セットアップモジュールパス、外部バイナリ単一の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/6/7/8/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" .
SHELL

予想される画期的な変更

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

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

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

Apryseは、ターゲットフレームワークとアーキテクチャに応じて、いくつかのPDFTron.*パッケージIDの下で.NET SDKを公開しています(ブランドは2023年に変更されましたが、パッケージIDは変更されませんでした)。 一般的なもの:

  • PDFTron.NET.x64 — プライマリ.NET / .NET Core x64パッケージ(現在11.x)
  • PDFTron.NetFramework.x64 — .NET Framework 4.5.1+ x64 only
  • PDFTron.NETCore.Windows.x64 — Windows x64上 for .NET Core
  • PDFNet — レガシーのWindows .NET Framework 32/64ビット統合パッケージ
# Remove whichever Apryse/PDFTron package(s) you have installed
dotnet remove package PDFTron.NET.x64
dotnet remove package PDFTron.NetFramework.x64
dotnet remove package PDFTron.NETCore.Windows.x64
dotnet remove package PDFNet

# Install IronPDF
dotnet add package IronPdf
SHELL

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

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

ステップ 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;

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

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

ApryseのPDF実装:

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

IronPDFの実装:

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

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

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

コア クラス マッピング

Apryse PDFクラスIronPDF 同等物
PDFDocPdfDocument
HTML2PDFChromePdfRenderer
TextExtractorPdfDocument.ExtractAllText()
StamperPdfDocument.ApplyWatermark()
PDFDrawPdfDocument.ToBitmap()
SecurityHandlerPdfDocument.SecuritySettings
PDFNetIronPdf.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();
    }
}

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");
    }
}

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();

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");
    }
}

複数の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();

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");
    }
}

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();

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}");

透かしの追加

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();

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");

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();

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");

ヘッダーとフッター

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");

IronPDFは、ダイナミックなページ番号付けのために{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.BinaryData, "application/pdf", "report.pdf");
    }
}

依存性注入の構成

// 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);
}

パフォーマンス比較

メトリックApryse PDFIronPDF
コールドスタート高速(ネイティブコード)~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");
}

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

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

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

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

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

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

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

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

// Use this (optional for development)
IronPdf.License.LicenseKey = "YOUR-KEY";

課題PDFViewCtrl の置き換え

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

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

移行後のチェックリスト

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

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

その他のリソース


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

ご注意: Apryseは、その所有者の登録商標です。 このサイトは、ApryseまたはPDFTronと提携しておらず、支持やスポンサーも受けていません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。
Curtis Chau
テクニカルライター

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

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。