フッターコンテンツにスキップ
製品比較

CompdfkitとIronPDFの比較

PDFは、Portable Document Formatの略で、Adobeが文書共有の均一性を保証するために作成したファイル形式です。 この形式は、レイアウト、テキスト、画像をさまざまなデバイスやオペレーティングシステムで一貫して保つことができます。 PDFはセキュリティ、インタラクティブ機能、コンパクトなサイズで知られ、元のコンテンツを変更せずに文書を配布するのに最適です。

C#を使用する開発者にとって、PDFライブラリはPDFファイル操作のためのPDFソリューションを提供します。 これらのライブラリを使用すると、文書の作成、コンテンツの修正、テキストや画像の抽出が可能になります。 また、フォーム処理、デジタル署名、異なるプラットフォーム間の互換性などの機能もサポートしています。 最適なパフォーマンスを追求して設計されているこれらのライブラリは、効率的なPDF処理を実現します。

In this article, we will compare two C# PDF libraries: IronPDF and ComPDFKit. この比較では、機能、機能性、コード例、およびライセンスについて取り上げています。 これらの側面を検討することで、プロジェクトに最適なライブラリを選択することができます。

1. ComPDFKit SDK

ComPDFKit & IronPDFの比較:図1 - ComPDFKIT SDKホームページ

ComPDFKit PDF SDKは、開発者がアプリケーションに包括的なPDF機能を統合できる頑強なC# PDF SDKです。 このライブラリは、PDF文書のプログラムによる操作に必要な幅広いPDF機能をサポートしています。 ウェブ、デスクトップ、モバイルプラットフォームなど、さまざまな環境での使用を想定して設計されており、クロスプラットフォームのプロジェクトに取り組む開発者にとって汎用的なツールです。 この例のソリューションには複数の機能があります。 試してみたい関連ComPDFKit PDF SDK機能を選択できます。

1.1 ComPDFKitの主な機能

  1. PDFビューイング:ComPDFKitは高品質でPDF文書を表示できる強力なPDFビューアを提供しています。 ビューアはスムーズなスクロール、ズーム、ナビゲーションをサポートし、シームレスなユーザー体験を提供します。
  2. 注釈:ライブラリにはスムーズにPDF注釈を統合するためのツールが含まれています。 ユーザーはテキストをハイライトしたり、コメントを追加したり、さまざまなタイプの注釈を作成でき、共同作業が必要なワークフローに不可欠です。
  3. フォーム処理:ライブラリはインタラクティブなフォームサポートに非常に優れています。 開発者はPDFフォームを作成、記入、データ抽出できるため、フォーム処理が必要なアプリケーションに理想的です。
  4. PDF編集:ComPDFKitはPDFファイル内のテキスト、画像、その他のコンテンツを修正する機能を提供しています。 この機能は既存のPDF文書を更新したりカスタマイズしたりする必要があるアプリケーションに有用です。
  5. 変換:ライブラリはPDFファイルをWord、Excel、PowerPoint、画像などのさまざまな形式に変換することをサポートしています。 この柔軟性は、PDFコンテンツをさまざまな用途に変換する必要があるアプリケーションにとって重要です。
  6. セキュリティ:ComPDFKitは暗号化や権限管理などの強力なセキュリティ機能を備えています。 開発者はPDF文書を保護し、無許可のアクセスから機密情報を守ることができます。
  7. 光学文字認識 (OCR):ライブラリにはスキャンした文書を編集可能で検索可能なPDFに変換するためのOCR機能が含まれています。 この機能は紙の文書をデジタル化し、電子的にアクセス可能にするために不可欠です。

ComPDFKitはこれらの機能をさまざまなアプリケーションに統合するための包括的なAPIセットを提供しています。 広範なドキュメントとサポートにより、プロジェクトに高度なPDF機能を組み込みたい開発者にとって優れた選択肢となっています。

2. IronPDFライブラリ

ComPDFKit & IronPDFの比較:図2 - IronPDFホームページ

IronPDFは、多用途の.NET用PDFライブラリで、C#を使用してPDF文書を作成、編集、管理することができます。 全体的なPDF機能を提供しています。 HTML、CSS、JavaScript、さまざまな画像形式からPDFをレンダリングして生成することで、PDF生成を簡素化するよう設計されています。 これは.NETアプリケーションに堅牢なPDF機能を統合したい開発者にとって理想的なツールです。

IronPDFの主な機能

  1. HTMLからPDFへの変換:IronPDFは、HTML、CSS、JavaScriptコンテンツを高品質のPDF文書に変換するのに優れています。 この機能はHTML文字列からPDF、URL、ASPXウェブフォーム、およびMVCビューをサポートしており、さまざまなウェブベースのコンテンツに柔軟なソリューションを提供します。
  2. PDF編集:このライブラリは、ページの追加、コピー、削除、PDFの結合、分割、テキストや画像の操作など幅広い編集機能を提供します。 開発者はPDF文書にヘッダー、フッター、ウォーターマーク、デジタル署名を追加することもできます。
  3. フォーム処理:IronPDFは、シンプルフォームの作成およびプログラムによるPDFフォームの記入をサポートしています。 この機能は、動的なフォーム生成やユーザー提出フォームからのデータ抽出が必要なアプリケーションに不可欠です。
  4. セキュリティ機能:IronPDFは、パスワードと権限の設定、文書の暗号化、デジタル署名の追加などの強力なセキュリティオプションを提供します。 これらの機能により、PDF文書内の機密情報は無許可のアクセスから保護されます。
  5. OCRとデータ抽出:ライブラリには光学文字認識(OCR)機能が含まれており、スキャンされた文書を編集可能で検索可能なPDFに変換できます。 さらに、IronPDFは既存のPDFからテキスト、画像、その他のデータを抽出でき、コンテンツの再利用や分析が可能です。
  6. 画像変換:IronPDFは、JPG、PNG、GIF、BMP、SVGなどのさまざまな画像形式をPDF文書に変換することをサポートしています。 また、PDFページを画像としてレンダリングする機能を提供しており、PDFコンテンツのビジュアルプレビューが必要なアプリケーションに役立ちます。
  7. クロスプラットフォーム互換性:IronPDFは、.NET Core、.NET Framework、.NET Standardなど、複数の.NETプラットフォームと互換性があります。 Windows、Linux、macOS、およびAzureへのデプロイをサポートしており、さまざまな環境で作業する開発者にとって汎用的な選択肢です。
  8. パフォーマンスの最適化:このライブラリは、高いパフォーマンスを実現するために設計されており、マルチスレッドと非同期操作をサポートしています。 これにより、負荷の高いアプリケーションでもPDF処理タスクが効率的に実行されます。
  9. 包括的なドキュメントとサポート:IronPDFは、詳細なドキュメントと多数のコード例を提供しており、開発者が簡単に始めてその機能を実装できるようにしています。 さらに、開発中に生じる可能性のある問題を支援するための技術サポートも提供しています。

3. 新しいVisual Studioプロジェクトの作成

コーディング例に入る前に、新しいVisual Studioプロジェクトを作成してみましょう。 ここでは、Visual StudioでC#コンソールアプリケーションを設定するためのステップバイステップガイドを紹介します。

ステップ1: Visual Studioをインストール(まだインストールしていない場合)

Visual Studioは、C#プロジェクトに最適なIDEです。 まだダウンロードおよびインストールしていない場合は、このVisual Studioダウンロードページからダウンロードしてください。

ステップ2: Visual Studioを開く

Visual Studioをインストールした後、開きます。 Visual Studio Communityをお使いの場合、サインインするか、サインインせずに続行することができます。

ステップ3: 新しいプロジェクトの作成

  1. 「新しいプロジェクトの作成」をクリックするか、ファイル > 新規作成 > プロジェクトに移動します。

    ComPDFKit & IronPDFの比較:図3 - IronPDF & DinkToPdfの比較:図1

  2. 検索バーでコンソールアプリを検索し、検索結果からコンソールアプリケーションを選択します。

    ComPDFKit & IronPDFの比較:図4 - IronPDF & DinkToPdfの比較:図2 - 新しいプロジェクトの作成ダイアログにてC#コンソールアプリケーションを選択し、次へをクリックします。

  3. ニーズに最適なプロジェクトテンプレートを選択します。 基本的なコンソールアプリケーションの場合、「コンソールアプリ(.NET Framework)」を選択できます。
  4. プロジェクトの名前と保存場所を指定します。 ソリューション名を設定することもできます。
  5. 適切なターゲットフレームワークを選択し、「作成」をクリックしてプロジェクトを生成します。

4. IronPDFのインストール

プロジェクトへのIronPDFの統合は、シームレスなセットアップ体験を提供するさまざまな方法で行うことができます。

  1. Visual StudioのNuGetパッケージマネージャを使用するには、ソリューション内の「依存関係」を右クリックし、「NuGetパッケージの管理」を選択して開始します。「参照」タブで「IronPDF」を検索し、プロジェクトに最新バージョンをインストールします。

    ComPDFKit & IronPDFの比較:図5 - NuGetパッケージマネージャでIronPDFを検索する

  2. または、NuGetパッケージマネージャコンソールを使用することもできます。 Visual Studioでツール > NuGetパッケージマネージャ > パッケージマネージャコンソールに移動し、コンソールを開きます。 コンソールが開いたら、次のコマンドを実行します:

    Install-Package IronPdf

    この方法は、シンプルなコマンドラインを使用してライブラリを迅速にインストールする方法を提供します。

    ComPDFKit & IronPDFの比較:図6 - コマンドラインを使用して上記のコマンドを入力する

  3. NuGetウェブサイトから直接ダウンロードを希望する方は、IronPDF NuGetパッケージページにアクセスします。 そこから、パッケージファイルをダウンロードできます。ダウンロード後、ファイルをダブルクリックしてプロジェクトに追加し、ソリューションをリロードして統合を完了します。
  4. もう1つの方法は、IronPDFの最新バージョンを直接ダウンロードすることです。 これにより、最新のパッケージを入手できます。 ウェブサイトに記載されている手順に従って、IronPDFをVisual Studioプロジェクトに手動で統合してください。

これらの方法のいずれかに従うことで、IronPDFを.NETプロジェクトに効率的に統合できます。

5. ComPDFKit C#のインストール

プロジェクトにComPDFKitを追加するには、NuGetパッケージマネージャまたはローカルパッケージを使用する2つの主要な方法があります。

5.1 NuGetパッケージマネージャを使用する

  1. NuGetパッケージマネージャを開く:ソリューションエクスプローラーで「参照」を右クリックし、「NuGetパッケージの管理」を選択します。
  2. 検索とインストール:「ComPDFKit」をNuGetパッケージマネージャで検索します。 適切なパッケージ(例:ComPDFKit.NetFrameworkまたはComPDFKit.Conversion.NetFramework)を選択し、「インストール」をクリックします。

ComPDFKit & IronPDFの比較:図7 - NuGetパッケージマネージャでComPDFKitを検索する

  1. インストール確認:パッケージがソリューションエクスプローラーの「参照」に表示されていることを確認します。

5.2 ローカルパッケージを使用する

  1. パッケージをダウンロードする:公式のComPDFKitウェブサイトからComPDFKit.NetFramework.nupkgファイルを取得します。
  2. NuGet ソースの設定:プロジェクトディレクトリにnuget.configファイルを作成または編集し、ローカルパッケージのパスを含めます。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <packageSources>
            <add key="ComPDFKitSource" value="path\to\directoryContainingNupkg" />
        </packageSources>
    </configuration>
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <packageSources>
            <add key="ComPDFKitSource" value="path\to\directoryContainingNupkg" />
        </packageSources>
    </configuration>
    XML
  3. ローカルパッケージをインストールする:Visual Studioでソリューションを再度開き、「NuGetパッケージの管理」に移動し、ローカルパッケージソースを選択します。 ローカルソースからComPDFKitパッケージをインストールします。

5.3 ライセンスキーの適用

  1. ライセンスを取得する:ComPDFKitチームに連絡して、試用版または完全版のライセンスを取得します。
  2. コード内でライセンスを適用する

    bool LicenseVerify()
    {
        if (!CPDFSDKVerifier.LoadNativeLibrary())
            return false;
        LicenseErrorCode verifyResult = CPDFSDKVerifier.LicenseVerify("input your license here");
        return (verifyResult == LicenseErrorCode.E_LICENSE_SUCCESS);
    }
    bool LicenseVerify()
    {
        if (!CPDFSDKVerifier.LoadNativeLibrary())
            return false;
        LicenseErrorCode verifyResult = CPDFSDKVerifier.LicenseVerify("input your license here");
        return (verifyResult == LicenseErrorCode.E_LICENSE_SUCCESS);
    }
    IRON VB CONVERTER ERROR developers@ironsoftware.com
    $vbLabelText   $csharpLabel

    ライセンスを検証するには、このメソッドをメインアプリケーションファイルに追加します。

これらの手順に従うことで、C#プロジェクトにComPDFKitを成功裏に統合することができます。

6. HTMLからPDFへ

HTMLをPDFに変換することは、レポートや請求書、文書を動的にウェブコンテンツから生成するなど、多くのアプリケーションで一般的な要求です。 IronPDFとComPDFKitの両方がこの作業に堅牢なソリューションを提供しますが、そのアプローチと能力は大きく異なります。

プロセスは通常、静的または動的に生成されたHTMLコンテンツをキャプチャすることから始まります。 キャプチャされたHTMLには関連するスタイルシート(CSS)やスクリプト(JavaScript)が適用され、その結果、最終的なPDFが元のウェブページの外観や動作を反映します。

6.1 IronPDFを使用してHTMLをPDFに変換

IronPDFは、C#でHTMLをPDFに変換するための多用途のライブラリです。 高品質の出力を確保するために、Chromeベースのレンダリングエンジンを使用します。 このプロセスには、HTML、CSS、JavaScriptコンテンツを正確にPDF形式にレンダリングすることが含まれます。 IronPDFを使用してHTML文字列をPDFファイルに変換するための基本的な例を次に示します:

using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Define your HTML string
        string htmlString = @"
            <h1>Hello, IronPDF!</h1>
            <p>This is a simple PDF created from an HTML string.</p>";

        var renderer = new ChromePdfRenderer();
        // Convert the HTML string to a PDF document
        PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlString);
        // Save the PDF document to a file
        string outputPath = "sample.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF created successfully and saved to {outputPath}");
    }
}
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Define your HTML string
        string htmlString = @"
            <h1>Hello, IronPDF!</h1>
            <p>This is a simple PDF created from an HTML string.</p>";

        var renderer = new ChromePdfRenderer();
        // Convert the HTML string to a PDF document
        PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlString);
        // Save the PDF document to a file
        string outputPath = "sample.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF created successfully and saved to {outputPath}");
    }
}
Imports IronPdf
Imports System

Friend Class Program
	Shared Sub Main()
		' Define your HTML string
		Dim htmlString As String = "
            <h1>Hello, IronPDF!</h1>
            <p>This is a simple PDF created from an HTML string.</p>"

		Dim renderer = New ChromePdfRenderer()
		' Convert the HTML string to a PDF document
		Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlString)
		' Save the PDF document to a file
		Dim outputPath As String = "sample.pdf"
		pdf.SaveAs(outputPath)
		Console.WriteLine($"PDF created successfully and saved to {outputPath}")
	End Sub
End Class
$vbLabelText   $csharpLabel

ComPDFKit & IronPDFの比較:図8 - 上記のコードからの例出力

同様に、HTMLファイルからPDFを作成することもできます。HTML文字列が大きすぎる場合や、それにCSSを追加する必要がある場合に非常に役立ちます。 IronPDFは、HTMLファイルとそれに関連するCSSおよびJSファイルを直接PDF文書に変換するための方法を提供しています。

using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        // Convert the HTML file to a PDF document
        PdfDocument pdf = renderer.RenderHtmlFileAsPdf("index.html");
        // Save the PDF document to a file
        string outputPath = "HTML File.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF created successfully and saved to {outputPath}");
    }
}
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        // Convert the HTML file to a PDF document
        PdfDocument pdf = renderer.RenderHtmlFileAsPdf("index.html");
        // Save the PDF document to a file
        string outputPath = "HTML File.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF created successfully and saved to {outputPath}");
    }
}
Imports IronPdf
Imports System

Friend Class Program
	Shared Sub Main()
		Dim renderer = New ChromePdfRenderer()
		' Convert the HTML file to a PDF document
		Dim pdf As PdfDocument = renderer.RenderHtmlFileAsPdf("index.html")
		' Save the PDF document to a file
		Dim outputPath As String = "HTML File.pdf"
		pdf.SaveAs(outputPath)
		Console.WriteLine($"PDF created successfully and saved to {outputPath}")
	End Sub
End Class
$vbLabelText   $csharpLabel

ComPDFKit & IronPDFの比較:図9 - IronPDFを使用してHTMLをPDFとしてレンダリングするための上記のコードからの例出力

IronPDFは、URLからPDFおよびHTMLファイルからPDFをサポートしています。 これらの機能は、文書管理が重要なソフトウェアで非常に役立ちます。 IronPDFは、PDFの作成と操作のための広範な機能を提供しており、開発者にとって強力なツールです。

6.2 ComPDFKit C#を使用してHTMLをPDFに変換

ComPDFKitは、C# SDK内でのHTMLからPDFへの変換を直接サポートしていません。 代わりに、この目的専用のAPIを提供しています。 このAPIを使用すると、サービスにHTTPリクエストを送信してHTMLからPDFへの変換を実行できます。

ComPDFKit HTML to PDF APIを使用するためには、通常以下の手順に従います:

  1. HTMLコンテンツを送信する:HTMLコンテンツと共にHTTP POSTリクエストをComPDFKit APIエンドポイントに送信します。
  2. PDF出力を受け取る:APIはHTMLコンテンツを処理し、生成されたPDFファイルを返します。

このようなリクエストをC#で構成する方法の一例を次に示します:

using System;
using System.Net.Http;
using System.Threading.Tasks;

public class HtmlToPdfExample
{
    public static async Task ConvertHtmlToPdfAsync()
    {
        using (var client = new HttpClient())
        {
            var content = new StringContent("<h1>Hello World</h1>");
            var response = await client.PostAsync("https://api.compdfkit.com/html-to-pdf", content);
            var pdfBytes = await response.Content.ReadAsByteArrayAsync();
            System.IO.File.WriteAllBytes("output.pdf", pdfBytes);
        }
    }
}
using System;
using System.Net.Http;
using System.Threading.Tasks;

public class HtmlToPdfExample
{
    public static async Task ConvertHtmlToPdfAsync()
    {
        using (var client = new HttpClient())
        {
            var content = new StringContent("<h1>Hello World</h1>");
            var response = await client.PostAsync("https://api.compdfkit.com/html-to-pdf", content);
            var pdfBytes = await response.Content.ReadAsByteArrayAsync();
            System.IO.File.WriteAllBytes("output.pdf", pdfBytes);
        }
    }
}
Imports System
Imports System.Net.Http
Imports System.Threading.Tasks

Public Class HtmlToPdfExample
	Public Shared Async Function ConvertHtmlToPdfAsync() As Task
		Using client = New HttpClient()
			Dim content = New StringContent("<h1>Hello World</h1>")
			Dim response = Await client.PostAsync("https://api.compdfkit.com/html-to-pdf", content)
			Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
			System.IO.File.WriteAllBytes("output.pdf", pdfBytes)
		End Using
	End Function
End Class
$vbLabelText   $csharpLabel

C#プログラムでこのようなAPIを使用できることを示すためのデモンストレーションです。 ComPDFKitのドキュメンテーションには、C#での特定の使用方法は記載されていません。

ブートストラップCSSフレームワークに対するPDF生成のサポート

近代のeコマースおよびビジネスアプリケーションは、UIデザインの一貫性を保つために、Bootstrapを広く使用しています。 PDFとして請求書、領収書、レポートを生成する際には、Bootstrapのスタイリングを維持することがブランドの一貫性において重要です。 IronPDFのクロムエンジンは完全なBootstrapサポートを提供し、一方でComPDFKitのAPIベースアプローチは、複雑なCSSフレームワークに制限があります。

IronPDF: ネイティブなクロムによるBootstrapレンダリング

IronPDFは、クロムのレンダリングエンジンの全力を活用し、すべてのバージョン(Bootstrap 5, 4, 3)にわたるピクセルパーフェクトなBootstrapサポートを提供します。 ライブラリは、Flexboxレイアウト、CSSグリッド、レスポンシブユーティリティ、カスタムコンポーネントをシームレスに処理します。

using IronPdf;

// Set license
IronPdf.License.LicenseKey = "License-Key";

var renderer = new ChromePdfRenderer();

// Bootstrap 5 e-commerce invoice example
string bootstrapInvoice = @"
<!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='utf-8'>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        @page { margin: 20mm; }
        .invoice-header { border-bottom: 3px solid #0d6efd; }
        .product-row { border-bottom: 1px solid #dee2e6; }
        .total-section { background-color: #f8f9fa; }
    </style>
</head>
<body>
    <div class='container-fluid p-4'>
        <!-- Invoice Header -->
        <div class='row invoice-header pb-4 mb-4'>
            <div class='col-8'>
                <h1 class='display-4 text-primary'>INVOICE</h1>
                <p class='text-muted mb-0'>TechStore Inc.</p>
                <p class='text-muted mb-0'>123 Commerce Street, Tech City, TC 12345</p>
                <p class='text-muted'>Email: sales@techstore.com | Phone: (555) 123-4567</p>
            </div>
            <div class='col-4 text-end'>
                <p class='mb-1'><strong>Invoice #:</strong> INV-2024-1089</p>
                <p class='mb-1'><strong>Date:</strong> October 27, 2024</p>
                <p class='mb-1'><strong>Due Date:</strong> November 27, 2024</p>
                <span class='badge bg-success'>PAID</span>
            </div>
        </div>

        <!-- Bill To Section -->
        <div class='row mb-4'>
            <div class='col-6'>
                <h5 class='text-primary'>Bill To:</h5>
                <p class='mb-1'><strong>Acme Corporation</strong></p>
                <p class='mb-1'>456 Business Ave</p>
                <p class='mb-1'>Enterprise City, EC 67890</p>
                <p class='mb-0'>contact@acmecorp.com</p>
            </div>
            <div class='col-6 text-end'>
                <h5 class='text-primary'>Payment Method:</h5>
                <p class='mb-1'>Credit Card ending in 4242</p>
                <p class='mb-0'>Transaction ID: TXN-9876543210</p>
            </div>
        </div>

        <!-- Products Table -->
        <div class='row mb-4'>
            <div class='col-12'>
                <table class='table'>
                    <thead class='table-primary'>
                        <tr>
                            <th scope='col'>#</th>
                            <th scope='col'>Product</th>
                            <th scope='col'>Description</th>
                            <th scope='col' class='text-center'>Qty</th>
                            <th scope='col' class='text-end'>Unit Price</th>
                            <th scope='col' class='text-end'>Amount</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr class='product-row'>
                            <td>1</td>
                            <td><strong>IronPDF Pro License</strong></td>
                            <td>Professional developer license with 1 year support</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$2,999.00</td>
                            <td class='text-end'><strong>$2,999.00</strong></td>
                        </tr>
                        <tr class='product-row'>
                            <td>2</td>
                            <td><strong>Priority Support</strong></td>
                            <td>24/7 priority technical support package</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$999.00</td>
                            <td class='text-end'><strong>$999.00</strong></td>
                        </tr>
                        <tr class='product-row'>
                            <td>3</td>
                            <td><strong>Training Package</strong></td>
                            <td>On-site developer training (2 days)</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$1,500.00</td>
                            <td class='text-end'><strong>$1,500.00</strong></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>

        <!-- Totals Section -->
        <div class='row justify-content-end mb-4'>
            <div class='col-md-6'>
                <div class='card total-section'>
                    <div class='card-body'>
                        <div class='row mb-2'>
                            <div class='col-6'><strong>Subtotal:</strong></div>
                            <div class='col-6 text-end'>$5,498.00</div>
                        </div>
                        <div class='row mb-2'>
                            <div class='col-6'><strong>Tax (8.5%):</strong></div>
                            <div class='col-6 text-end'>$467.33</div>
                        </div>
                        <div class='row mb-2'>
                            <div class='col-6 text-success'><strong>Discount (10%):</strong></div>
                            <div class='col-6 text-end text-success'>-$549.80</div>
                        </div>
                        <hr>
                        <div class='row'>
                            <div class='col-6'><h4 class='text-primary'>Total:</h4></div>
                            <div class='col-6 text-end'><h4 class='text-primary'>$5,415.53</h4></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Payment Terms -->
        <div class='row mb-4'>
            <div class='col-12'>
                <div class='alert alert-info' role='alert'>
                    <h6 class='alert-heading'>Payment Terms</h6>
                    <p class='mb-0'>Payment is due within 30 days. Late payments may incur a 1.5% monthly interest charge. Thank you for your business!</p>
                </div>
            </div>
        </div>

        <!-- Footer -->
        <div class='row border-top pt-3'>
            <div class='col-12 text-center text-muted'>
                <small>TechStore Inc. | Tax ID: 12-3456789 | All prices in USD</small>
            </div>
        </div>
    </div>
</body>
</html>";

// Render PDF with optimized settings
var pdf = renderer.RenderHtmlAsPdf(bootstrapInvoice);

// Add metadata for document management
pdf.MetaData.Title = "Invoice INV-2024-1089";
pdf.MetaData.Author = "TechStore Inc.";
pdf.MetaData.Subject = "Sales Invoice";
pdf.MetaData.Keywords = "invoice, payment, e-commerce";

// Save the invoice
pdf.SaveAs("invoice-with-bootstrap.pdf");
using IronPdf;

// Set license
IronPdf.License.LicenseKey = "License-Key";

var renderer = new ChromePdfRenderer();

// Bootstrap 5 e-commerce invoice example
string bootstrapInvoice = @"
<!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='utf-8'>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        @page { margin: 20mm; }
        .invoice-header { border-bottom: 3px solid #0d6efd; }
        .product-row { border-bottom: 1px solid #dee2e6; }
        .total-section { background-color: #f8f9fa; }
    </style>
</head>
<body>
    <div class='container-fluid p-4'>
        <!-- Invoice Header -->
        <div class='row invoice-header pb-4 mb-4'>
            <div class='col-8'>
                <h1 class='display-4 text-primary'>INVOICE</h1>
                <p class='text-muted mb-0'>TechStore Inc.</p>
                <p class='text-muted mb-0'>123 Commerce Street, Tech City, TC 12345</p>
                <p class='text-muted'>Email: sales@techstore.com | Phone: (555) 123-4567</p>
            </div>
            <div class='col-4 text-end'>
                <p class='mb-1'><strong>Invoice #:</strong> INV-2024-1089</p>
                <p class='mb-1'><strong>Date:</strong> October 27, 2024</p>
                <p class='mb-1'><strong>Due Date:</strong> November 27, 2024</p>
                <span class='badge bg-success'>PAID</span>
            </div>
        </div>

        <!-- Bill To Section -->
        <div class='row mb-4'>
            <div class='col-6'>
                <h5 class='text-primary'>Bill To:</h5>
                <p class='mb-1'><strong>Acme Corporation</strong></p>
                <p class='mb-1'>456 Business Ave</p>
                <p class='mb-1'>Enterprise City, EC 67890</p>
                <p class='mb-0'>contact@acmecorp.com</p>
            </div>
            <div class='col-6 text-end'>
                <h5 class='text-primary'>Payment Method:</h5>
                <p class='mb-1'>Credit Card ending in 4242</p>
                <p class='mb-0'>Transaction ID: TXN-9876543210</p>
            </div>
        </div>

        <!-- Products Table -->
        <div class='row mb-4'>
            <div class='col-12'>
                <table class='table'>
                    <thead class='table-primary'>
                        <tr>
                            <th scope='col'>#</th>
                            <th scope='col'>Product</th>
                            <th scope='col'>Description</th>
                            <th scope='col' class='text-center'>Qty</th>
                            <th scope='col' class='text-end'>Unit Price</th>
                            <th scope='col' class='text-end'>Amount</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr class='product-row'>
                            <td>1</td>
                            <td><strong>IronPDF Pro License</strong></td>
                            <td>Professional developer license with 1 year support</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$2,999.00</td>
                            <td class='text-end'><strong>$2,999.00</strong></td>
                        </tr>
                        <tr class='product-row'>
                            <td>2</td>
                            <td><strong>Priority Support</strong></td>
                            <td>24/7 priority technical support package</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$999.00</td>
                            <td class='text-end'><strong>$999.00</strong></td>
                        </tr>
                        <tr class='product-row'>
                            <td>3</td>
                            <td><strong>Training Package</strong></td>
                            <td>On-site developer training (2 days)</td>
                            <td class='text-center'>1</td>
                            <td class='text-end'>$1,500.00</td>
                            <td class='text-end'><strong>$1,500.00</strong></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>

        <!-- Totals Section -->
        <div class='row justify-content-end mb-4'>
            <div class='col-md-6'>
                <div class='card total-section'>
                    <div class='card-body'>
                        <div class='row mb-2'>
                            <div class='col-6'><strong>Subtotal:</strong></div>
                            <div class='col-6 text-end'>$5,498.00</div>
                        </div>
                        <div class='row mb-2'>
                            <div class='col-6'><strong>Tax (8.5%):</strong></div>
                            <div class='col-6 text-end'>$467.33</div>
                        </div>
                        <div class='row mb-2'>
                            <div class='col-6 text-success'><strong>Discount (10%):</strong></div>
                            <div class='col-6 text-end text-success'>-$549.80</div>
                        </div>
                        <hr>
                        <div class='row'>
                            <div class='col-6'><h4 class='text-primary'>Total:</h4></div>
                            <div class='col-6 text-end'><h4 class='text-primary'>$5,415.53</h4></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Payment Terms -->
        <div class='row mb-4'>
            <div class='col-12'>
                <div class='alert alert-info' role='alert'>
                    <h6 class='alert-heading'>Payment Terms</h6>
                    <p class='mb-0'>Payment is due within 30 days. Late payments may incur a 1.5% monthly interest charge. Thank you for your business!</p>
                </div>
            </div>
        </div>

        <!-- Footer -->
        <div class='row border-top pt-3'>
            <div class='col-12 text-center text-muted'>
                <small>TechStore Inc. | Tax ID: 12-3456789 | All prices in USD</small>
            </div>
        </div>
    </div>
</body>
</html>";

// Render PDF with optimized settings
var pdf = renderer.RenderHtmlAsPdf(bootstrapInvoice);

// Add metadata for document management
pdf.MetaData.Title = "Invoice INV-2024-1089";
pdf.MetaData.Author = "TechStore Inc.";
pdf.MetaData.Subject = "Sales Invoice";
pdf.MetaData.Keywords = "invoice, payment, e-commerce";

// Save the invoice
pdf.SaveAs("invoice-with-bootstrap.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

デモンストレーションされた主なBootstrap機能:

  • グリッドシステムrowおよびcol-*クラスによるレスポンシブなレイアウト構造
  • タイポグラフィdisplay-4text-mutedh5による階層的なテキストスタイリング
  • テーブルtabletable-primarytable-hoverによる構造化されたデータ表示
  • カード:バックグラウンドスタイリング付きでトータルセクションのためのcardおよびcard-body
  • バッジ:支払い状況指標のためのbadge bg-success
  • アラート:支払い条件通知のためのalert alert-info
  • ユーティリティtext-endtext-centermb-*pb-*スペーシングユーティリティ
  • カスタムスタイリング:請求書固有のデザインのためにBootstrapクラスと組み合わせて使用する

IronPDFのクロムエンジンは、PDF文書とウェブ文書間でブランド性を一貫性に保ちながら、Bootstrapコンポーネントの完璧なレンダリングを保証します。

PDF生成でのBootstrapレイアウト(Flexboxやレスポンシブデザインの問題を含む)の包括的なトラブルシューティングに関しては、次を参照してください:Bootstrap FlexとCSSの問題のトラブルシューティング

ComPDFKit: APIベースのHTML処理の制限

ComPDFKitのHTMLからPDFへの変換は、埋め込みレンダリングではなく外部APIコールに依存しています。 このアプローチは基本的なBootstrapスタイリングを処理できますが、いくつかの制限があります:

  • ネットワーク依存性:外部サービスへのHTTPリクエストを必要とする
  • CSSフレームワークサポート:複雑なFlexboxやCSSグリッドレイアウトを完全にサポートできない可能性がある
  • レンダリングの一貫性:結果はAPIサービスの実装に基づいて変わる可能性がある
  • カスタムスタイリング:Bootstrapコンポーネントのレンダリングに対する制御が制限される
  • パフォーマンス:ネットワーク遅延が文書生成にオーバーヘッドを追加する

信頼できるBootstrapレンダリングが必要で、スタイリングとレイアウトを完全にコントロールできるアプリケーションには、ネイティブのクロムレンダリングが優れた結果を提供します。

7. PDFへのウォーターマーク

PDFへのウォーターマークは、多くの理由で重要な慣行です。 それは文書の整合性を保護し、所有権を主張し、セキュリティレイヤーを追加するのに役立ちます。 ウォーターマークは、テキスト、ロゴ、または画像であり、文書の背景または前景に表示されます。 これは、無許可の使用、コピー、およびコンテンツの配布を抑止します。 さらに、ウォーターマークは、「機密事項」、「草案」、「承認済み」など、文書のステータスや作成者の身元などの重要な情報を伝えることができます。

7.1 IronPDFを使用したウォーターマーク

IronPDFは、PDF文書にプログラムでウォーターマークを追加する簡単な方法を提供しています。 この機能はライブラリに統合されており、開発者はC#コードを使用してウォーターマークを適用できます。

using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        License.LicenseKey = "License-Code";

        string watermarkHtml = @"
            <img style='width: 500px;' src='C:\Users\Tayyab Ali\Desktop\watermark.png'>
            <h1>IronPDF Watermark</h1>";

        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>It's a PDF with a watermark</h1>");
        // Apply watermark with 30 degrees rotation and 50% opacity
        pdf.ApplyWatermark(watermarkHtml, rotation: 30, opacity: 50);
        pdf.SaveAs("Confidential.pdf");
    }
}
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        License.LicenseKey = "License-Code";

        string watermarkHtml = @"
            <img style='width: 500px;' src='C:\Users\Tayyab Ali\Desktop\watermark.png'>
            <h1>IronPDF Watermark</h1>";

        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>It's a PDF with a watermark</h1>");
        // Apply watermark with 30 degrees rotation and 50% opacity
        pdf.ApplyWatermark(watermarkHtml, rotation: 30, opacity: 50);
        pdf.SaveAs("Confidential.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Editing

Friend Class Program
	Shared Sub Main()
		License.LicenseKey = "License-Code"

		Dim watermarkHtml As String = "
            <img style='width: 500px;' src='C:\Users\Tayyab Ali\Desktop\watermark.png'>
            <h1>IronPDF Watermark</h1>"

		Dim renderer As New ChromePdfRenderer()
		Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>It's a PDF with a watermark</h1>")
		' Apply watermark with 30 degrees rotation and 50% opacity
		pdf.ApplyWatermark(watermarkHtml, rotation:= 30, opacity:= 50)
		pdf.SaveAs("Confidential.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

ComPDFKit & IronPDFの比較:図10 - IronPDFを使用してウォーターマークを追加したコード出力からの例出力

この例では、ChromePdfRendererクラスを使用してHTML文字列からPDFを作成します。 ApplyWatermarkメソッドは、ウォーターマークを適用するために使用されます。 ウォーターマークは画像と見出しで構成されており、両方ともwatermarkHtml文字列で定義されています。 rotationパラメーターは30度に設定され、opacityは50%に設定されているため、ウォーターマークが目に見えますが、主要コンテンツを圧倒しないようになっています。 生成されたPDFは指定されたパスに保存されます。

7.2 ComPDFKitを使用したウォーターマーク

ComPDFKitは、PDF文書に直接C#内でウォーターマークを追加するための包括的な機能を提供しています。 これは、ComPDFKitライブラリのメソッドを使用してプログラムで行うことができます。 ComPDFKitを使用してテキストウォーターマークを追加する方法の例を次に示します:

static private bool AddTextWatermark(CPDFDocument document)
{
    CPDFWatermark watermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_TEXT);
    watermark.SetText("test");
    watermark.SetFontName("Helvetica"); 
    watermark.SetPages("0-3");
    byte[] color = { 255, 0, 0 };
    watermark.SetTextRGBColor(color);
    watermark.SetScale(2);
    watermark.SetRotation(0);
    watermark.SetOpacity(120);
    watermark.SetVertalign(C_Watermark_Vertalign.WATERMARK_VERTALIGN_CENTER);
    watermark.SetHorizalign(C_Watermark_Horizalign.WATERMARK_HORIZALIGN_CENTER);
    watermark.SetVertOffset(0);
    watermark.SetHorizOffset(0);
    watermark.SetFront(true);
    watermark.SetFullScreen(true);
    watermark.SetVerticalSpacing(10);
    watermark.SetHorizontalSpacing(10);
    watermark.CreateWatermark();
    string path = "AddTextWatermarkTest.pdf";
    if (!document.WriteToFilePath(path))
    {
        return false;
    }
    Console.WriteLine("Browse the changed file in " + path);
    return true;
}

CPDFDocument document = CPDFDocument.InitWithFilePath("SamplePDF.pdf");
if (AddTextWatermark(document))
{
    Console.WriteLine("Add text watermark done.");
}
else
{
    Console.WriteLine("Add text watermark failed.");
}
static private bool AddTextWatermark(CPDFDocument document)
{
    CPDFWatermark watermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_TEXT);
    watermark.SetText("test");
    watermark.SetFontName("Helvetica"); 
    watermark.SetPages("0-3");
    byte[] color = { 255, 0, 0 };
    watermark.SetTextRGBColor(color);
    watermark.SetScale(2);
    watermark.SetRotation(0);
    watermark.SetOpacity(120);
    watermark.SetVertalign(C_Watermark_Vertalign.WATERMARK_VERTALIGN_CENTER);
    watermark.SetHorizalign(C_Watermark_Horizalign.WATERMARK_HORIZALIGN_CENTER);
    watermark.SetVertOffset(0);
    watermark.SetHorizOffset(0);
    watermark.SetFront(true);
    watermark.SetFullScreen(true);
    watermark.SetVerticalSpacing(10);
    watermark.SetHorizontalSpacing(10);
    watermark.CreateWatermark();
    string path = "AddTextWatermarkTest.pdf";
    if (!document.WriteToFilePath(path))
    {
        return false;
    }
    Console.WriteLine("Browse the changed file in " + path);
    return true;
}

CPDFDocument document = CPDFDocument.InitWithFilePath("SamplePDF.pdf");
if (AddTextWatermark(document))
{
    Console.WriteLine("Add text watermark done.");
}
else
{
    Console.WriteLine("Add text watermark failed.");
}
Private Shared Function AddTextWatermark(ByVal document As CPDFDocument) As Boolean
	Dim watermark As CPDFWatermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_TEXT)
	watermark.SetText("test")
	watermark.SetFontName("Helvetica")
	watermark.SetPages("0-3")
	Dim color() As Byte = { 255, 0, 0 }
	watermark.SetTextRGBColor(color)
	watermark.SetScale(2)
	watermark.SetRotation(0)
	watermark.SetOpacity(120)
	watermark.SetVertalign(C_Watermark_Vertalign.WATERMARK_VERTALIGN_CENTER)
	watermark.SetHorizalign(C_Watermark_Horizalign.WATERMARK_HORIZALIGN_CENTER)
	watermark.SetVertOffset(0)
	watermark.SetHorizOffset(0)
	watermark.SetFront(True)
	watermark.SetFullScreen(True)
	watermark.SetVerticalSpacing(10)
	watermark.SetHorizontalSpacing(10)
	watermark.CreateWatermark()
	Dim path As String = "AddTextWatermarkTest.pdf"
	If Not document.WriteToFilePath(path) Then
		Return False
	End If
	Console.WriteLine("Browse the changed file in " & path)
	Return True
End Function

Private document As CPDFDocument = CPDFDocument.InitWithFilePath("SamplePDF.pdf")
If AddTextWatermark(document) Then
	Console.WriteLine("Add text watermark done.")
Else
	Console.WriteLine("Add text watermark failed.")
End If
$vbLabelText   $csharpLabel

ComPDFKit & IronPDFの比較:図11 - ComPDFKitを使用してウォーターマークを追加したコード出力からの例出力

この例では、CPDFDocumentクラスを使用して既存のPDF文書を開きます。 AddTextWatermarkメソッドは、InitWatermarkメソッドを使用してテキストウォーターマークを初期化します。 ウォーターマークのさまざまなプロパティ、例えばテキストコンテンツ、フォント、色、スケール、回転、不透明度、配置、間隔などが設定されます。 ウォーターマークは作成され、PDF文書の指定されたページに適用されます。 最後に、修正されたPDFが指定されたパスに保存されます。 画像ウォーターマークを統合するためには、異なるメソッドが必要です。

8. PDFA

PDF/Aは、電子文書の長期的なデジタル保存のために設計されたPDFの標準化バージョンです。 文書がPDF/Aに準拠していることを保証することで、将来確実に閲覧され再現できるようになります。 このセクションでは、人気のある2つのライブラリ、IronPDFとComPDFKitを使用して、PDF/A準拠の文書を作成する方法を探ります。

8.1 IronPDFを使用してPDFAを作成

IronPDFは標準のPDF文書をPDF/A準拠のものに変換するプロセスを簡素化しています。 IronPDFを使用すると、既存のPDFを簡単にロードして、PDF/A準拠の形式で保存できます。

using IronPdf;
using System;

class Program
{
    static void Main()
    {
        License.LicenseKey = "License-Key";
        PdfDocument pdf = PdfDocument.FromFile("Source.pdf");
        pdf.SaveAsPdfA("pdfa-compliant.pdf", PdfAVersions.PdfA3);
    }
}
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        License.LicenseKey = "License-Key";
        PdfDocument pdf = PdfDocument.FromFile("Source.pdf");
        pdf.SaveAsPdfA("pdfa-compliant.pdf", PdfAVersions.PdfA3);
    }
}
Imports IronPdf
Imports System

Friend Class Program
	Shared Sub Main()
		License.LicenseKey = "License-Key"
		Dim pdf As PdfDocument = PdfDocument.FromFile("Source.pdf")
		pdf.SaveAsPdfA("pdfa-compliant.pdf", PdfAVersions.PdfA3)
	End Sub
End Class
$vbLabelText   $csharpLabel

プロセスの簡単な概要は次のとおりです:

  1. IronPDFを初期化する:IronPDFライブラリをインポートし、ライセンスキーを設定して開始します。
  2. PDFをロードするPdfDocument.FromFileを使用して、ソースPDFファイルをロードします。
  3. 変換と保存:変換を行い、PDF/Aのバージョンを指定して結果の文書を保存します。

この簡単なアプローチにより、IronPDFはPDF/A変換を扱うための便利な選択肢となります。

8.2 ComPDFKitを使用してPDFAを作成

ComPDFKitは、PDFをPDF/A形式に変換するための堅牢なソリューションを提供しています。 プロセスには、PDF文書の初期化、出力パスの定義、および変換メソッドの呼び出しが含まれます。

static public bool CovertToPDFA1a(CPDFDocument document)
{
    string convertToPDFA1aPath = "ConvertToPDFA1aTest.pdf";
    if (!document.WritePDFAToFilePath(CPDFType.CPDFTypePDFA1a, convertToPDFA1aPath))
    {
        return false;
    }
    Console.WriteLine("Browse the changed file in " + convertToPDFA1aPath);
    return true;
}

CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");
if (CovertToPDFA1a(document))
{
    Console.WriteLine("Convert to PDF/A-1a done.");
}
else
{
    Console.WriteLine("Convert to PDF/A-1a failed.");
}
static public bool CovertToPDFA1a(CPDFDocument document)
{
    string convertToPDFA1aPath = "ConvertToPDFA1aTest.pdf";
    if (!document.WritePDFAToFilePath(CPDFType.CPDFTypePDFA1a, convertToPDFA1aPath))
    {
        return false;
    }
    Console.WriteLine("Browse the changed file in " + convertToPDFA1aPath);
    return true;
}

CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");
if (CovertToPDFA1a(document))
{
    Console.WriteLine("Convert to PDF/A-1a done.");
}
else
{
    Console.WriteLine("Convert to PDF/A-1a failed.");
}
Public Shared Function CovertToPDFA1a(ByVal document As CPDFDocument) As Boolean
	Dim convertToPDFA1aPath As String = "ConvertToPDFA1aTest.pdf"
	If Not document.WritePDFAToFilePath(CPDFType.CPDFTypePDFA1a, convertToPDFA1aPath) Then
		Return False
	End If
	Console.WriteLine("Browse the changed file in " & convertToPDFA1aPath)
	Return True
End Function

Private document As CPDFDocument = CPDFDocument.InitWithFilePath("CommonFivePage.pdf")
If CovertToPDFA1a(document) Then
	Console.WriteLine("Convert to PDF/A-1a done.")
Else
	Console.WriteLine("Convert to PDF/A-1a failed.")
End If
$vbLabelText   $csharpLabel

ステップの要約は次のとおりです:

  1. 文書を初期化するCPDFDocument.InitWithFilePathを使用して、PDF文書をロードします。
  2. 出力ディレクトリを設定する:出力ディレクトリが存在することを確認するか、必要に応じて作成します。
  3. PDF/Aに変換する:指定されたPDF/AタイプでWritePDFAToFilePathを使用して変換を実行し、ファイルを保存します。

9. デジタル署名

デジタル署名は、文書の真正性と整合性を確認するために不可欠です。 このセクションでは、IronPDFとComPDFKitを使用してPDFにデジタル署名を追加する方法を示します。

9.1 IronPDFによるデジタル署名

IronPDFは、PDF文書にデジタル署名を適用するための簡単で効果的な方法を提供しています。

using IronPdf;
using IronPdf.Signing;

class Program
{
    static void Main(string[] args)
    {
        var simpleSignature = new PdfSignature("MyCert.p12", "newpassword");
        simpleSignature.SignPdfFile("sample.pdf");
    }
}
using IronPdf;
using IronPdf.Signing;

class Program
{
    static void Main(string[] args)
    {
        var simpleSignature = new PdfSignature("MyCert.p12", "newpassword");
        simpleSignature.SignPdfFile("sample.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Signing

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim simpleSignature = New PdfSignature("MyCert.p12", "newpassword")
		simpleSignature.SignPdfFile("sample.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

プロセスには以下が含まれます:

  1. IronPDFを初期化する:必要なIronPDFライブラリをインポートします。
  2. 署名を作成する:証明書ファイルとパスワードを使用してPdfSignatureオブジェクトを初期化します。
  3. PDFに署名するSignPdfFileを使用してPDFに署名を適用します。

この方法により、PDF文書が確実に署名され、その信頼性と安全性が向上します。

9.2 CompDFKitによるデジタル署名

ComPDFKitは、広範なカスタマイズオプションを備えたデジタル署名を作成するための包括的なソリューションを提供しています。

private static void CreateDigitalSignature(CPDFDocument document, string certificatePath, string password)
{
    Console.WriteLine("--------------------");
    Console.WriteLine("Create digital signature.");
    CPDFSignatureCertificate certificate = CPDFPKCS12CertHelper.GetCertificateWithPKCS12Path("Certificate.pfx", "ComPDFKit");
    CPDFPage page = document.PageAtIndex(0);
    CPDFSignatureWidget signatureField = page.CreateWidget(C_WIDGET_TYPE.WIDGET_SIGNATUREFIELDS) as CPDFSignatureWidget;
    signatureField.SetRect(new CRect(28, 420, 150, 370));
    signatureField.SetWidgetBorderRGBColor(new byte[] { 0, 0, 0 });
    signatureField.SetWidgetBgRGBColor(new byte[] { 150, 180, 210 });
    signatureField.UpdateAp();
    string name = GetGrantorFromDictionary(certificate.SubjectDict) + "\n";
    string date = DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss");
    string reason = "I am the owner of the document.";
    string location = certificate.SubjectDict["C"];
    string DN = certificate.Subject;

    CPDFSignatureConfig signatureConfig = new CPDFSignatureConfig
    {
        Text = GetGrantorFromDictionary(certificate.SubjectDict),
        Content =
            "Name: " + name + "\n" +
            "Date: " + date + "\n" +
            "Reason: " + reason + " \n" +
            "Location: " + location + "\n" +
            "DN: " + DN + "\n",
        IsContentAlignLeft = false,
        IsDrawLogo = true,
        LogoBitmap = new Bitmap("Logo.png"),
        TextColor = new float[] { 0, 0, 0 },
        ContentColor = new float[] { 0, 0, 0 }
    };
    string filePath = document.FileName + "_Signed.pdf";
    signatureField.UpdataApWithSignature(signatureConfig);
    if (document.WriteSignatureToFilePath(signatureField,
        filePath,
        certificatePath, password,
        location,
        reason, CPDFSignaturePermissions.CPDFSignaturePermissionsNone))
    {
        Console.WriteLine("File saved in " + filePath);
        Console.WriteLine("Create digital signature done.");
    }
    else
    {
        Console.WriteLine("Create digital signature failed.");
    }
    Console.WriteLine("--------------------");
}
private static void CreateDigitalSignature(CPDFDocument document, string certificatePath, string password)
{
    Console.WriteLine("--------------------");
    Console.WriteLine("Create digital signature.");
    CPDFSignatureCertificate certificate = CPDFPKCS12CertHelper.GetCertificateWithPKCS12Path("Certificate.pfx", "ComPDFKit");
    CPDFPage page = document.PageAtIndex(0);
    CPDFSignatureWidget signatureField = page.CreateWidget(C_WIDGET_TYPE.WIDGET_SIGNATUREFIELDS) as CPDFSignatureWidget;
    signatureField.SetRect(new CRect(28, 420, 150, 370));
    signatureField.SetWidgetBorderRGBColor(new byte[] { 0, 0, 0 });
    signatureField.SetWidgetBgRGBColor(new byte[] { 150, 180, 210 });
    signatureField.UpdateAp();
    string name = GetGrantorFromDictionary(certificate.SubjectDict) + "\n";
    string date = DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss");
    string reason = "I am the owner of the document.";
    string location = certificate.SubjectDict["C"];
    string DN = certificate.Subject;

    CPDFSignatureConfig signatureConfig = new CPDFSignatureConfig
    {
        Text = GetGrantorFromDictionary(certificate.SubjectDict),
        Content =
            "Name: " + name + "\n" +
            "Date: " + date + "\n" +
            "Reason: " + reason + " \n" +
            "Location: " + location + "\n" +
            "DN: " + DN + "\n",
        IsContentAlignLeft = false,
        IsDrawLogo = true,
        LogoBitmap = new Bitmap("Logo.png"),
        TextColor = new float[] { 0, 0, 0 },
        ContentColor = new float[] { 0, 0, 0 }
    };
    string filePath = document.FileName + "_Signed.pdf";
    signatureField.UpdataApWithSignature(signatureConfig);
    if (document.WriteSignatureToFilePath(signatureField,
        filePath,
        certificatePath, password,
        location,
        reason, CPDFSignaturePermissions.CPDFSignaturePermissionsNone))
    {
        Console.WriteLine("File saved in " + filePath);
        Console.WriteLine("Create digital signature done.");
    }
    else
    {
        Console.WriteLine("Create digital signature failed.");
    }
    Console.WriteLine("--------------------");
}
Imports Microsoft.VisualBasic

Private Shared Sub CreateDigitalSignature(ByVal document As CPDFDocument, ByVal certificatePath As String, ByVal password As String)
	Console.WriteLine("--------------------")
	Console.WriteLine("Create digital signature.")
	Dim certificate As CPDFSignatureCertificate = CPDFPKCS12CertHelper.GetCertificateWithPKCS12Path("Certificate.pfx", "ComPDFKit")
	Dim page As CPDFPage = document.PageAtIndex(0)
	Dim signatureField As CPDFSignatureWidget = TryCast(page.CreateWidget(C_WIDGET_TYPE.WIDGET_SIGNATUREFIELDS), CPDFSignatureWidget)
	signatureField.SetRect(New CRect(28, 420, 150, 370))
	signatureField.SetWidgetBorderRGBColor(New Byte() { 0, 0, 0 })
	signatureField.SetWidgetBgRGBColor(New Byte() { 150, 180, 210 })
	signatureField.UpdateAp()
	Dim name As String = GetGrantorFromDictionary(certificate.SubjectDict) & vbLf
	Dim [date] As String = DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss")
	Dim reason As String = "I am the owner of the document."
	Dim location As String = certificate.SubjectDict("C")
	Dim DN As String = certificate.Subject

	Dim signatureConfig As New CPDFSignatureConfig With {
		.Text = GetGrantorFromDictionary(certificate.SubjectDict),
		.Content = "Name: " & name & vbLf & "Date: " & [date] & vbLf & "Reason: " & reason & " " & vbLf & "Location: " & location & vbLf & "DN: " & DN & vbLf,
		.IsContentAlignLeft = False,
		.IsDrawLogo = True,
		.LogoBitmap = New Bitmap("Logo.png"),
		.TextColor = New Single() { 0, 0, 0 },
		.ContentColor = New Single() { 0, 0, 0 }
	}
	Dim filePath As String = document.FileName & "_Signed.pdf"
	signatureField.UpdataApWithSignature(signatureConfig)
	If document.WriteSignatureToFilePath(signatureField, filePath, certificatePath, password, location, reason, CPDFSignaturePermissions.CPDFSignaturePermissionsNone) Then
		Console.WriteLine("File saved in " & filePath)
		Console.WriteLine("Create digital signature done.")
	Else
		Console.WriteLine("Create digital signature failed.")
	End If
	Console.WriteLine("--------------------")
End Sub
$vbLabelText   $csharpLabel

ステップには以下が含まれます:

  1. 文書と証明書を初期化する:PDF文書をロードし、CPDFPKCS12CertHelperを使用して証明書を取得します。
  2. 署名フィールドの作成と設定:PDFに署名フィールドを追加し、そのプロパティを設定し、署名の詳細を設定します。
  3. 署名を適用するWriteSignatureToFilePathを使用して署名を適用し、署名されたPDFを保存します。

10. テキストの抽出

PDF文書からのテキスト抽出は、さまざまなデータ処理および分析タスクにおいて重要です。 このセクションでは、IronPDFとComPDFKitを使用してPDFからテキストを抽出する方法を説明します。

10.1 IronPDFを使用したテキストの抽出

IronPDFは、PDF文書からテキストを抽出するための簡単な方法を提供しています。

using IronPdf;
using System.IO;

PdfDocument pdf = PdfDocument.FromFile("PDF File With Text.pdf");
string text = pdf.ExtractAllText();
File.WriteAllText("PDF Text.txt", text);
using IronPdf;
using System.IO;

PdfDocument pdf = PdfDocument.FromFile("PDF File With Text.pdf");
string text = pdf.ExtractAllText();
File.WriteAllText("PDF Text.txt", text);
Imports IronPdf
Imports System.IO

Private pdf As PdfDocument = PdfDocument.FromFile("PDF File With Text.pdf")
Private text As String = pdf.ExtractAllText()
File.WriteAllText("PDF Text.txt", text)
$vbLabelText   $csharpLabel

プロセスには以下が含まれます:

  1. IronPDFを初期化する:IronPDFライブラリをインポートします。
  2. PDFをロードするPdfDocument.FromFileを使用してPDFファイルをロードします。
  3. テキストを抽出するExtractAllTextを呼び出してPDFからすべてのテキストコンテンツを取得します。
  4. テキストをファイルに保存する:標準のファイルI/O操作を使用して取得したテキストをファイルに書き込みます。

この方法により、PDF文書からテキストを簡単かつ効率的に抽出して保存することができます。

10.2 ComPDFKitを使用したテキストの抽出

ComPDFKitは、PDF文書からのテキスト抽出のための柔軟なソリューションを提供しています。

static private bool PDFToText(CPDFDocument document)
{
    string path = "//PDFToText.txt";
    if (!document.PdfToText("1-" + document.PageCount.ToString(), path))//Page ranges are counted from 1
    {
        return false;
    }
    Console.WriteLine("Browse the generated file in " + path);
    return true;
}

static void Main(string[] args)
{
    Console.WriteLine("Running PDFPage test sample…\r\n");
    SDKLicenseHelper.LicenseVerify();
    CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");

    if (PDFToText(document))
    {
        Console.WriteLine("PDF to text done.");
    }
    else
    {
        Console.WriteLine("PDF to text failed.");
    }
    Console.WriteLine("--------------------");
    Console.WriteLine("Done!");
    Console.WriteLine("--------------------");
    Console.ReadLine();
}
static private bool PDFToText(CPDFDocument document)
{
    string path = "//PDFToText.txt";
    if (!document.PdfToText("1-" + document.PageCount.ToString(), path))//Page ranges are counted from 1
    {
        return false;
    }
    Console.WriteLine("Browse the generated file in " + path);
    return true;
}

static void Main(string[] args)
{
    Console.WriteLine("Running PDFPage test sample…\r\n");
    SDKLicenseHelper.LicenseVerify();
    CPDFDocument document = CPDFDocument.InitWithFilePath("CommonFivePage.pdf");

    if (PDFToText(document))
    {
        Console.WriteLine("PDF to text done.");
    }
    else
    {
        Console.WriteLine("PDF to text failed.");
    }
    Console.WriteLine("--------------------");
    Console.WriteLine("Done!");
    Console.WriteLine("--------------------");
    Console.ReadLine();
}
Imports Microsoft.VisualBasic

Private Shared Function PDFToText(ByVal document As CPDFDocument) As Boolean
	Dim path As String = "//PDFToText.txt"
	If Not document.PdfToText("1-" & document.PageCount.ToString(), path) Then 'Page ranges are counted from 1
		Return False
	End If
	Console.WriteLine("Browse the generated file in " & path)
	Return True
End Function

Shared Sub Main(ByVal args() As String)
	Console.WriteLine("Running PDFPage test sample…" & vbCrLf)
	SDKLicenseHelper.LicenseVerify()
	Dim document As CPDFDocument = CPDFDocument.InitWithFilePath("CommonFivePage.pdf")

	If PDFToText(document) Then
		Console.WriteLine("PDF to text done.")
	Else
		Console.WriteLine("PDF to text failed.")
	End If
	Console.WriteLine("--------------------")
	Console.WriteLine("Done!")
	Console.WriteLine("--------------------")
	Console.ReadLine()
End Sub
$vbLabelText   $csharpLabel

手順は次の通りです:

  1. 文書を初期化するCPDFDocument.InitWithFilePathを使用して、PDF文書をロードします。
  2. テキストの抽出と保存:指定されたページ範囲からテキストを抽出し、それをファイルに保存するためにPdfToTextを使用します。

11. ライセンス

IronPDFとComPDFKitのライセンスモデルは、そのアプローチと使用条件において異なります。 これらの違いを理解することで、プロジェクトのニーズや予算に合ったツールを選ぶのに役立ちます。

11.1 IronPDFのライセンス

ComPDFKit & IronPDFの比較:図12 - IronPDFライセンスページ

IronPDFは商業ライセンスモデルの下で運営されており、商業またはビジネス関連のアプリケーションの場合、ライセンスの購入が通常必要です。 このモデルは、ロイヤルティフリーの配布などのオプションを含めた柔軟性を提供します。 これにより、開発者はライブラリをプロジェクトに組み込み、実行時に追加コストが発生することなく使用できます。

IronPDFは永久ライセンスを提供しています。 永久ライセンスは生涯使用に対して一度きりの支払いが必要であり、更新および技術サポートのための料金はオプションです。 この商業モデルは、企業が専門的なPDF生成および操作に必要な高度な機能、包括的なドキュメント、および専用のサポートを受けることを保証します。

11.2 ComPDFKitのライセンス

ComPDFKitは、異なるビジネスニーズに応える柔軟なライセンスモデルを採用しています。 永久ライセンスとサブスクリプションライセンスの両方を提供しています。 永久ライセンスは一度きりの支払いでSDKへの生涯アクセスを許可し、更新や拡張サポートに関する料金はオプションです。 サブスクリプションライセンスは定期的な支払い(月次または年次)が必要で、更新およびサポートへ継続的にアクセスできます。

IronPDFとComPDFKitの選択をする際には、専用サポートの必要性、予算制約、および展開の規模などプロジェクトの特定の要件を考慮してください。 IronPDFの商業モデルは、堅牢なサポートと高度な機能を求めている企業に適しています。

12. ドキュメントとサポート

12.1. IronPDFのドキュメントとサポート

IronPDFは、そのユーザーに包括的なドキュメントと堅牢なサポートオプションを提供しています。 ドキュメントは詳細で分かりやすく、インストール、基本使用、進歩した機能、および問題解決について明確なガイダンスを提供しています。 公式ドキュメントはRead the Docsで利用可能で、QuickStartガイド、詳細なAPIリファレンス、そしてIronPDFの機能を効果的に使用するための多数のコード例を含んでいます。

IronPDFは、レンダリング遅延やデプロイメントの課題など、一般的な問題の解決策を見つけることができるブログおよびサンプルセクションを通じたアクティブなトラブルシューティングガイドと技術サポートサイトを維持しています。 このサポートサイトは、よくある質問や特定の技術的な問題に対処する記事のコレクションを提供しています。

直接サポートを受けるために、IronPDFは応答性のあるカスタマーサービスチームを提供し、より複雑な問題や個別の対応について相談することができます。 この広範なドキュメントと強力なサポートインフラストラクチャの組み合わせにより、IronPDF はアプリケーションに PDF 機能を組み込むことを望む開発者にとって信頼できる選択肢となります。

12.2. ComPDFKit のドキュメントとサポート

ComPDFKit もユーザー向けに詳細なドキュメントとサポートリソースを提供しています。 基本的なセットアップから透かしやデジタル署名などの高度な機能まで、SDK の使用に関するさまざまな側面を網羅しています。 サポートに関しては、ComPDFKit は顧客サービスチャネルを通じて技術支援を提供しています。 サポートチームは、技術的な問題の解決、質問への回答、SDK の有効的な利用へのガイド提供のために利用可能です。

IronPDF と ComPDFKit はどちらも優れたドキュメントとサポートを提供していますが、IronPDF はより広範なトラブルシューティングガイドと高い応答性のサポートチームによって優れている点があります。 これにより、複雑な技術的課題に遭遇し、信頼できる支援を必要とする開発者にとって特に有利です。

13. 結論

IronPDF と ComPDFKit の比較は、堅牢な C# ライブラリを探している開発者にとっての強みと考慮点を強調しています。

ComPDFKit は、プログラムで PDF ドキュメントを処理するために必要な幅広い機能をサポートする包括的な PDF SDK です。 PDF 注釈において優れており、広範な編集機能を有しています。 形式変換やセキュリティオプションなどの機能は、開発者にとって大きな価値を加えます。

一方、IronPDF は強力でユーザーフレンドリーな API で知られています。 HTML、CSS、および JavaScript から PDF を生成することで PDF の生成を簡素化します。 IronPDF は HTML から PDF への変換に優れており、.NET アプリケーションとのシームレスな統合を提供します。 ライブラリは見出し、フッター、透かし、デジタル署名の追加を含む広範な編集機能を提供します。

IronPDF のセキュリティ機能は、PDF ドキュメント内の機密情報を十分に保護します。 複数の .NET プラットフォームをサポートし、高負荷向けに最適化されたパフォーマンスは、エンタープライズレベルのアプリケーションに最適な選択肢となります。 IronPDF の商用ライセンスモデルは、専用のサポート、包括的なドキュメント、および高度な機能へのアクセスを保証し、特にプロフェッショナルグレードのプロジェクトに適しています。

IronPDF は、包括的で機能が豊富な PDF ライブラリを探している開発者にとって、ComPDFKit と比較して強力なオプションとして際立っています。 その高度な機能、ユーザーフレンドリーな API、および強力なサポートインフラストラクチャにより、多様で要求の厳しい PDF 関連の要件を備えた企業やプロジェクトのための優れたソリューションとなっています。 IronPDF の広範な機能と専用サポートは、プロフェッショナルなアプリケーションのための信頼性の高い効率的な PDF 生成と操作を保証する大きな強みを提供します。

要約すると、IronPDF と ComPDFKit はどちらも C# での PDF 処理のための強力なツールです。 しかし、IronPDF の広範な機能セット、最適化されたパフォーマンス、および優れたサポートにより、プロフェッショナルおよびエンタープライズレベルのアプリケーションを目指す開発者にとっての好ましい選択肢となります。

無料トライアルライセンス IronPDF はユーザーにライブラリとその機能を試用するための無料トライアルライセンスを提供します。 IronPDF ライセンスは$799から始まります。 Additionally, Iron Software bundles nine libraries for the cost of two, which includes IronXL and IronOCR along with IronPDF.

ご注意ComPDFKit はその所有者の登録商標です。 このサイトは ComPDFKit に関連しておらず、ComPDFKit の支持もスポンサーも得ていません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。

よくある質問

C# で HTML を PDF に変換するにはどうすればいいですか?

IronPDFのRenderHtmlAsPdfメソッドを使用して、HTML文字列をPDFに変換できます。このメソッドはHTML、CSS、JavaScriptを高品質なPDFドキュメントに変換するのに適しています。

C# PDFライブラリを使用する利点は何ですか?

IronPDFやComPDFKitのようなC# PDFライブラリは、PDFの作成、修正、テキスト/画像の抽出を可能にします。フォーム処理、デジタル署名、セキュリティなどの機能をサポートし、異なるプラットフォームでの柔軟性を提供します。

C#でPDFにセキュリティを追加できますか?

はい、IronPDFを使用すれば、パスワードの設定、ドキュメントの暗号化、デジタル署名の追加によってPDFのセキュリティを強化し、機密情報を保護できます。

ComPDFKitはPDF編集と変換をどのように処理していますか?

ComPDFKitは強力なPDF編集機能と、多様な形式への変換を提供しており、PDF/Aのような長期デジタル保存に適しており、クロスプラットフォームプロジェクトにおいて多用途です。

C# PDFライブラリにはどのようなライセンスオプションがありますか?

IronPDFは永久ライセンスを備えた商業ライセンスモデルを提供し、ComPDFKitは永久ライセンスとサブスクリプションライセンスの両方を提供し、ビジネスニーズに応じた柔軟性を提供します。

これらのライブラリを利用する開発者に対するサポートとリソースは何ですか?

IronPDFは包括的なドキュメントと迅速なカスタマーサポートを提供しており、エンタープライズレベルのアプリケーションに適しています。ComPDFKitも徹底したドキュメントとテクニカルサポートを提供しています。

HTMLからPDFへの変換において、IronPDFとComPDFKitはどのように比較されますか?

IronPDFはHTMLからPDFへの変換に優れており、HTML文字列、URLs、ASPXウェブフォーム、MVCビューをサポートしていますが、ComPDFKitはより広範なPDF編集と変換機能を提供します。

Curtis Chau
テクニカルライター

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

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