製品比較

APITemplate ioとIronPDFのC# PDFライブラリの比較

私はC#開発者として、プロジェクトでPDFを生成および操作する際にしばしば挑戦を経験してきました。 私たちの分野では、効率的で信頼性が高く、容易に統合できるPDFソリューションの必要性が一般的な問題です。 そのため、私はC#アプリケーションでPDF関連のタスクを効率化すると約束する2つの人気ツール、APITemplateIronPDFを探索することに決めました。

この記事では、APITemplateとIronPDFの両方についての実際の体験を共有し、それらの機能、パフォーマンス、および統合の可能性を比較します。 私は、次のプロジェクトのために情報に基づいた決定を助けるために、明確で偏りのない分析を提供することを目指しています。 APITemplateとIronPDFに初めて出会ったとき、C#開発におけるPDF関連の課題を解決する可能性に興味を持ちました。 これらのツールが提供するものをそれぞれ詳しく見ていきましょう。

APITemplate

APITemplate io と IronPDF の C# PDF ライブラリ比較: 図1

APITemplateは、テンプレートからPDFや画像を生成することに特化したクラウドベースのサービスです。 それは、開発者がJSONデータを事前定義されたテンプレートに送信することで、ドキュメントとグラフィックを作成できるAPIを提供します。 初期テストでは、APITemplateが使いやすいと感じました。 Webインターフェイスを使用してテンプレートを作成し、その後APIを使用してC#アプリケーションからのデータでテンプレートを埋めることができました。

APITemplateの主な機能

テンプレートベースの生成

APITemplateの強みは、テンプレートベースのアプローチにあります。 文書や画像の再利用可能なテンプレートを作成できるため、反復作業に多くの時間を節約できます。 また、PDFを生成するためのマークダウンテンプレートエディタを提供しています。 再利用可能なテンプレートからZapierや他のサードパーティと統合してPDFを生成できます。

JSONデータ統合

JSONデータ統合は、私が頻繁に使用する機能の1つです。 JSONデータでテンプレートを埋める機能を提供します。 これにより、オブジェクトをJSONにシリアライズしてAPIに送信できるため、私のC#アプリケーションと非常に簡単に統合できます。

APIコンソール

APIコンソール機能は私にとって時間の節約になりました。 これにより、私は彼らのウェブサイトから直接API呼び出しをプレビューし、テストすることができ、C#コードに実装する前にリクエストをデバッグし、微調整するのに役立ちます。

カスタマイズ可能なヘッダーとフッター

PDFにカスタムヘッダーとフッターを追加する機能は、特にプロフェッショナルなレポートや請求書を作成する際に価値があります。 ページ番号、日付、または会社のロゴを簡単に含めることができます。

IronPDF

APITemplate io と IronPDF の C# PDF ライブラリ比較: 図 2

IronPDFは、一方で、C#アプリケーション内でPDFを操作するために特別に設計された.NETライブラリです。 PDFの作成、編集、および変換を含む幅広い機能を提供します。 その際立った機能の一つは、HTMLからPDFを生成する能力であり、これはウェブベースのアプリケーションにとって非常に有用です。

IronPDFとの最初の経験は、NuGetを介してインストールし、それを直接C#プロジェクトに統合することでした。 そのAPI統合プロセスは非常にスムーズで、私のプロジェクトにすぐに導入して運用できました。外部サービスに依存せずにプログラムでPDFを簡単に作成できたことに感動しました。

私が気づいた主な違いは、APITemplateがあらかじめ定義されたテンプレートからのドキュメントの作成に優れているのに対し、IronPDFはC#コード内でカスタムPDF操作においてより柔軟性を提供することです。 APITemplateのクラウドベースの性質により、PDF生成のためのサーバーリソースを心配する必要はありませんが、インターネット接続が必要です。 IronPDFはローカルライブラリであるため、オフラインで動作できますが、サーバーのリソースを使用します。

IronPDFの主な機能

HTMLからのPDF作成

IronPDFはHTMLコンテンツからPDFを生成するのに優れています。 この機能を広く使用して、レポートやドキュメントを動的に作成しました。 HTMLの文字列やURLをライブラリに渡すだけで簡単です。 IronPDFの現代的なWeb標準への幅広いサポートにより、HTMLコンテンツから生成した各PDFは高品質なドキュメントとして出力されました。

PDF操作

この機能により、既存のPDFをプログラムで編集することができます。 PDFドキュメントにテキスト、画像、さらには新しいページを追加することができ、レポートやフォームを更新するのに非常に便利です。

PDFの結合と分割

大きなドキュメントを扱う際に、この機能が特に便利であることがわかりました。 IronPDFは、複数のPDFを1つに結合したり、1つのPDFを複数のファイルに分割したりすることを簡単にします。

テキスト抽出

PDFからテキストコンテンツを分析やインデックス作成のために抽出する必要があるとき、IronPDFのテキスト抽出機能が役立ちます。 さまざまなPDFのレイアウトをうまく処理し、データ抽出が簡単になります。

フォーム充填

自動フォーム記入を含むプロジェクトでは、IronPDFのフォーム記入機能が非常に役立ちます。 PDFフォームにプログラムで入力し、手動でのデータ入力の時間を節約できます。

デジタル署名

セキュリティは私の多くのプロジェクトで重要です。 IronPDFを使用すると、PDFにデジタル署名を追加し、文書の信頼性とセキュリティを向上させることができます。

パスワード保護

機密文書を扱う際には、IronPDF を使用して PDFs にパスワード保護を追加します。 これは、私の機密情報が安全であることを保証するのに非常に役立ちます。

PDFから画像への変換

プレビューやサムネイル用にPDFページを画像に変換する必要がある時があります。 IronPDFはこのプロセスを簡単にし、私からの数行のコードだけを必要とし、さまざまな画像形式をサポートします。

クロスプラットフォーム互換性

クロスプラットフォームプロジェクトに取り組む.NET開発者として、IronPDFが.NET Standardサポートのおかげで異なるオペレーティングシステム間でシームレスに動作することを評価しています。

IronPDFとAPITemplateをC#プロジェクトに設定する

これらのツールをC#プロジェクトに設定するのは比較的簡単です。 私の経験に基づいて、IronPDFとAPITemplateの両方のプロセスを案内します。

IronPDF

C#プロジェクトにIronPDFを設定するために、私は次のステップに従います。

  1. Visual Studioでプロジェクトを開く。

    1. NuGetパッケージマネージャーを使用してIronPDFをインストールします。 NuGetパッケージマネージャーまたはパッケージマネージャーコンソールを使用します。

      1. NuGetパッケージマネージャーでIronPDFを検索してインストールします。

    APITemplate ioとIronPDFのC#用PDFライブラリ比較: 図3

    1. または、パッケージマネージャーコンソールで実行します:
Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
$vbLabelText   $csharpLabel

APITemplate io と IronPDF の比較: C# PDF ライブラリにおける図 4

  1. インストール後、C#ファイルの上部に必要なusingステートメントを追加します。
using IronPdf;
using IronPdf;
Imports IronPdf
$vbLabelText   $csharpLabel
  1. ライセンスを有効化するために、アプリケーションの起動時にこの行を早めに追加します。
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"
$vbLabelText   $csharpLabel

以上です! これで自分のコードでIronPDFを使い始めることができます。

APITemplate

APITemplateの場合、セットアッププロセスはウェブベースのAPIとして少し異なります。

  1. まず、彼らのウェブサイトでAPITemplateアカウントにサインアップします。

  2. サインアップした後、APIセクションに移動してAPIキーを取得します。

  3. 私のC#プロジェクトでは、特定のパッケージをインストールする必要はありません。 通常、組み込みのHttpClientを使用してAPIコールを行います。

    1. APIキーを安全に保管します。 開発中には、ユーザーシークレットを使用することがあります。
dotnet user-secrets set "APITemplate:ApiKey" "YOUR-API-KEY-HERE"
dotnet user-secrets set "APITemplate:ApiKey" "YOUR-API-KEY-HERE"
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'dotnet user-secrets @set "APITemplate:ApiKey" "YOUR-API-KEY-HERE"
$vbLabelText   $csharpLabel
  1. コード内で、APIキーを使用してHttpClientをセットアップしました。
using System.Net.Http;
    using System.Net.Http.Headers;
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("X-API-KEY", Configuration["APITemplate:ApiKey"]);
using System.Net.Http;
    using System.Net.Http.Headers;
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("X-API-KEY", Configuration["APITemplate:ApiKey"]);
Imports System.Net.Http
	Imports System.Net.Http.Headers
	Private client = New HttpClient()
	client.DefaultRequestHeaders.Add("X-API-KEY", Configuration("APITemplate:ApiKey"))
$vbLabelText   $csharpLabel
  1. これで、APITemplateにAPIコールを行う準備ができました。

    このプロジェクトには、APITemplateの公式サンプルGitHubプロジェクトを使用し、既に設定済みのため、テンプレートキーを追加するだけです。 これらのセットアップが完了したら、C#プロジェクトでIronPDFとAPITemplateの両方を使用し始めることができます。 IronPDFは私のアプリケーション内でローカルに動作しますが、APITemplateはサーバーと通信するためにインターネット接続が必要です。

IronPDFとAPITemplateにおける高度な機能

C#開発者として、IronPDFとAPITemplateの両方を深く掘り下げる機会がありました。 彼らの高度な機能のいくつかを探求し、それに感銘を受けました。

IronPDF 高度な機能

JavaScriptサポートによるHTMLからPDFへの変換

IronPDFのHTMLからPDFへの変換は非常に素晴らしいです。 静的なHTMLをレンダリングするだけでなく、JavaScriptも処理できます。 これは、動的なウェブコンテンツを扱う際に私にとっての画期的な存在でした。

ここにそれを使用する際の簡単な例があります。

var Renderer = new ChromePdfRenderer();
string htmlContent = @"
    <html>
    <body>
        <h1>Dynamic Chart</h1>
        <canvas id='myChart'></canvas>
        <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
        <script>
            var ctx = document.getElementById('myChart').getContext('2d');
            new Chart(ctx, {
                type: 'bar',
                data: {
                    labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
                    datasets: [{
                        label: '# of Votes',
                        data: [12, 19, 3, 5, 2, 3],
                        backgroundColor: [
                            'rgba(255, 99, 132, 0.2)',
                            'rgba(54, 162, 235, 0.2)',
                            'rgba(255, 206, 86, 0.2)',
                            'rgba(75, 192, 192, 0.2)',
                            'rgba(153, 102, 255, 0.2)',
                            'rgba(255, 159, 64, 0.2)'
                        ],
                        borderColor: [
                            'rgba(255, 99, 132, 1)',
                            'rgba(54, 162, 235, 1)',
                            'rgba(255, 206, 86, 1)',
                            'rgba(75, 192, 192, 1)',
                            'rgba(153, 102, 255, 1)',
                            'rgba(255, 159, 64, 1)'
                        ],
                        borderWidth: 1
                    }]
                },
                options: {
                    scales: {
                        y: {
                            beginAtZero: true
                        }
                    }
                }
            });
        </script>
    </body>
    </html>";
var PDF = Renderer.RenderHtmlAsPdf(htmlContent);
PDF.SaveAs("dynamic_chart.pdf");
var Renderer = new ChromePdfRenderer();
string htmlContent = @"
    <html>
    <body>
        <h1>Dynamic Chart</h1>
        <canvas id='myChart'></canvas>
        <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
        <script>
            var ctx = document.getElementById('myChart').getContext('2d');
            new Chart(ctx, {
                type: 'bar',
                data: {
                    labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
                    datasets: [{
                        label: '# of Votes',
                        data: [12, 19, 3, 5, 2, 3],
                        backgroundColor: [
                            'rgba(255, 99, 132, 0.2)',
                            'rgba(54, 162, 235, 0.2)',
                            'rgba(255, 206, 86, 0.2)',
                            'rgba(75, 192, 192, 0.2)',
                            'rgba(153, 102, 255, 0.2)',
                            'rgba(255, 159, 64, 0.2)'
                        ],
                        borderColor: [
                            'rgba(255, 99, 132, 1)',
                            'rgba(54, 162, 235, 1)',
                            'rgba(255, 206, 86, 1)',
                            'rgba(75, 192, 192, 1)',
                            'rgba(153, 102, 255, 1)',
                            'rgba(255, 159, 64, 1)'
                        ],
                        borderWidth: 1
                    }]
                },
                options: {
                    scales: {
                        y: {
                            beginAtZero: true
                        }
                    }
                }
            });
        </script>
    </body>
    </html>";
var PDF = Renderer.RenderHtmlAsPdf(htmlContent);
PDF.SaveAs("dynamic_chart.pdf");
Dim Renderer = New ChromePdfRenderer()
Dim htmlContent As String = "
    <html>
    <body>
        <h1>Dynamic Chart</h1>
        <canvas id='myChart'></canvas>
        <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
        <script>
            var ctx = document.getElementById('myChart').getContext('2d');
            new Chart(ctx, {
                type: 'bar',
                data: {
                    labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
                    datasets: [{
                        label: '# of Votes',
                        data: [12, 19, 3, 5, 2, 3],
                        backgroundColor: [
                            'rgba(255, 99, 132, 0.2)',
                            'rgba(54, 162, 235, 0.2)',
                            'rgba(255, 206, 86, 0.2)',
                            'rgba(75, 192, 192, 0.2)',
                            'rgba(153, 102, 255, 0.2)',
                            'rgba(255, 159, 64, 0.2)'
                        ],
                        borderColor: [
                            'rgba(255, 99, 132, 1)',
                            'rgba(54, 162, 235, 1)',
                            'rgba(255, 206, 86, 1)',
                            'rgba(75, 192, 192, 1)',
                            'rgba(153, 102, 255, 1)',
                            'rgba(255, 159, 64, 1)'
                        ],
                        borderWidth: 1
                    }]
                },
                options: {
                    scales: {
                        y: {
                            beginAtZero: true
                        }
                    }
                }
            });
        </script>
    </body>
    </html>"
Dim PDF = Renderer.RenderHtmlAsPdf(htmlContent)
PDF.SaveAs("dynamic_chart.pdf")
$vbLabelText   $csharpLabel

このコードは、Chart.jsを使用して動的なチャートを含むPDFを生成します。 JavaScriptはPDF作成プロセス中に実行され、レンダリングされたチャートを含むPDFが生成されます。 これは、データが頻繁に変わる動的レポートを作成するのに使用しました。これにより、チャートやグラフを手動で更新する手間が省けました。

APITemplate ioとIronPDFの比較:C# PDFライブラリーにおける図5

この例であるChart.jsのような外部スクリプトを含めることができるため、強力なJavaScriptライブラリを活用してPDFに豊かで動的なコンテンツを作成することができます。 さらに、この機能により、HTMLでCSSとレスポンシブデザインの技術を使用して、さまざまなデバイスや印刷形式で優れた見た目のPDFを確保することができます。 同じHTMLソースから画面表示と印刷に最適化されたPDFを作成するために、メディアクエリも使用しました。

PDFの暗号化と復号化

多くのプロジェクトでセキュリティは非常に重要であり、特に機密情報を扱う際には欠かせません。 IronPDFの暗号化および復号化機能は、これらのシナリオで非常に貴重です。

var pdf = PdfDocument.FromFile("input.pdf");
// Set user password (for opening the document)
pdf.Password = "user_password";
// Set owner password (for editing, printing, etc.)
pdf.OwnerPassword = "owner_password";
// Set specific permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;
pdf.SaveAs("highly_secured.pdf");
var pdf = PdfDocument.FromFile("input.pdf");
// Set user password (for opening the document)
pdf.Password = "user_password";
// Set owner password (for editing, printing, etc.)
pdf.OwnerPassword = "owner_password";
// Set specific permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;
pdf.SaveAs("highly_secured.pdf");
Dim pdf = PdfDocument.FromFile("input.pdf")
' Set user password (for opening the document)
pdf.Password = "user_password"
' Set owner password (for editing, printing, etc.)
pdf.OwnerPassword = "owner_password"
' Set specific permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit
pdf.SaveAs("highly_secured.pdf")
$vbLabelText   $csharpLabel

APITemplate io および IronPDF の C# PDF ライブラリ比較: 図 6

このコードは、ユーザーパスワードでPDFを暗号化するだけでなく、権限に対する細かい制御が可能なオーナーパスワードも設定します。 PDFの印刷やコンテンツのコピーなど、ユーザーができることとできないことを正確に指定できます。

復号化には、私はよくこのアプローチを使用します。

try
{
    var pdf = PdfDocument.FromFile("encrypted.pdf", "user_password");
    pdf.SecuritySettings.RemovePasswordsAndEncryption();
    pdf.SaveAs("decrypted.pdf");
    Console.WriteLine("PDF decrypted successfully!");
}
catch (Exception ex)
{
    Console.WriteLine($"Decryption failed: {ex.Message}");
}
try
{
    var pdf = PdfDocument.FromFile("encrypted.pdf", "user_password");
    pdf.SecuritySettings.RemovePasswordsAndEncryption();
    pdf.SaveAs("decrypted.pdf");
    Console.WriteLine("PDF decrypted successfully!");
}
catch (Exception ex)
{
    Console.WriteLine($"Decryption failed: {ex.Message}");
}
Try
	Dim pdf = PdfDocument.FromFile("encrypted.pdf", "user_password")
	pdf.SecuritySettings.RemovePasswordsAndEncryption()
	pdf.SaveAs("decrypted.pdf")
	Console.WriteLine("PDF decrypted successfully!")
Catch ex As Exception
	Console.WriteLine($"Decryption failed: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

このコードは、ユーザーパスワードで暗号化されたPDFを開こうとし、すべてのセキュリティ制限を解除し、新しい暗号化されていないファイルとして保存します。try-catchブロックは、パスワードが間違っている可能性のある場合に対処するのに役立ちます。

さまざまなシナリオでこれらの機能を使用してきました。たとえば、異なるユーザーにPDFへのアクセス権限が異なるセキュアな文書管理システムを作成する場合などです。 例えば、医療記録システムにおいて、私は敏感な患者情報が暗号化され、許可された人員のみがアクセスできるようにしました。

PDF圧縮

多数のPDFを扱う場合、ファイルサイズが重要な要素となります。 IronPDFの圧縮機能は、ストレージと帯域幅の制約を管理する上で非常に役立っています。

ここに、圧縮を使用するより高度な例があります。

using IronPdf;
using IronSoftware.Drawing;
using PdfToSvg;
using System;
using PdfDocument = IronPdf.PdfDocument;
#region LicenseKey
License.LicenseKey = "License-Key";
#endregion
var PDF = PdfDocument.FromFile(@"F:/Test.pdf");
// Compress images
PDF.CompressImages(80); // 80% quality
// Compress fonts
PDF.CompressStructTree();
// Save the compressed PDF
PDF.SaveAs(@"F:/highly_compressed.pdf");
// Compare file sizes
var originalSize = new FileInfo(@"F:/Test.pdf").Length;
var compressedSize = new FileInfo(@"F:/highly_compressed.pdf").Length;
var compressionRatio = (1 - (double)compressedSize / originalSize) * 100;
Console.WriteLine($"Original size: {originalSize / 1024} KB");
Console.WriteLine($"Compressed size: {compressedSize / 1024} KB");
Console.WriteLine($"Compression ratio: {compressionRatio:F2}%");
using IronPdf;
using IronSoftware.Drawing;
using PdfToSvg;
using System;
using PdfDocument = IronPdf.PdfDocument;
#region LicenseKey
License.LicenseKey = "License-Key";
#endregion
var PDF = PdfDocument.FromFile(@"F:/Test.pdf");
// Compress images
PDF.CompressImages(80); // 80% quality
// Compress fonts
PDF.CompressStructTree();
// Save the compressed PDF
PDF.SaveAs(@"F:/highly_compressed.pdf");
// Compare file sizes
var originalSize = new FileInfo(@"F:/Test.pdf").Length;
var compressedSize = new FileInfo(@"F:/highly_compressed.pdf").Length;
var compressionRatio = (1 - (double)compressedSize / originalSize) * 100;
Console.WriteLine($"Original size: {originalSize / 1024} KB");
Console.WriteLine($"Compressed size: {compressedSize / 1024} KB");
Console.WriteLine($"Compression ratio: {compressionRatio:F2}%");
Imports IronPdf
Imports IronSoftware.Drawing
Imports PdfToSvg
Imports System
Imports PdfDocument = IronPdf.PdfDocument
#Region "LicenseKey"
License.LicenseKey = "License-Key"
'#End Region
Dim PDF = PdfDocument.FromFile("F:/Test.pdf")
' Compress images
PDF.CompressImages(80) ' 80% quality
' Compress fonts
PDF.CompressStructTree()
' Save the compressed PDF
PDF.SaveAs("F:/highly_compressed.pdf")
' Compare file sizes
Dim originalSize = (New FileInfo("F:/Test.pdf")).Length
Dim compressedSize = (New FileInfo("F:/highly_compressed.pdf")).Length
Dim compressionRatio = (1 - CDbl(compressedSize) / originalSize) * 100
Console.WriteLine($"Original size: {originalSize \ 1024} KB")
Console.WriteLine($"Compressed size: {compressedSize \ 1024} KB")
Console.WriteLine($"Compression ratio: {compressionRatio:F2}%")
$vbLabelText   $csharpLabel

こちらが結果です。

APITemplate io と IronPDF 比較: C# PDF ライブラリ: 図 7

ファイルサイズを大幅に縮小し、品質に大きな影響を与えないこのテクニックの組み合わせは非常に効果的であることがわかりました。

この機能をさまざまなシナリオで使用しました。

  1. メール添付ファイル: PDFをメールで送信する際、添付ファイルのサイズ制限を超えないように圧縮します。

  2. Webアプリケーション: ユーザーがダウンロードする必要のあるPDFの場合、圧縮は読み込み時間と帯域幅の使用を削減するのに役立ちます。

  3. アーカイブ: 長期間の保存のために多数のPDFを保管する際、圧縮はストレージコストを大幅に削減します。

    あるプロジェクトでは、法律事務所向けの文書管理システムに取り組みました。 彼らはPDF形式のケースファイルを何千も持っており、その多くはスキャンされたドキュメントで、ファイルサイズが大きかったです。 この圧縮技術を実装することにより、ストレージの必要量を60%以上削減し、クラウドストレージの請求に関して大幅なコスト削減を実現しました。

デジタル署名

PDFにデジタル署名を追加することは、ドキュメントの真正性と否認防止を保証するために多くのビジネスプロセスにおいて必須の機能です。 IronPDFは、この複雑な作業を驚くほど簡単にします。 デジタル署名を実装する方法の詳細な例を次に示します。

using IronPdf;
using IronPdf.Signing;
var renderer = new ChromePdfRenderer();
var pdf = PdfDocument.FromFile(@"F:/Contract.pdf");
var signature = new IronPdf.Signing.PdfSignature(@"F:/Iron.pfx", "123")
{
    // Step 3. Optional signing options and a handwritten signature graphic
    SigningContact = "support@ironsoftware.com",
    SigningLocation = "New York, USA",
    SigningReason = "Signing PDF"
};
pdf.Sign(signature);
pdf.SaveAs(@"F:/signed.pdf");
using IronPdf;
using IronPdf.Signing;
var renderer = new ChromePdfRenderer();
var pdf = PdfDocument.FromFile(@"F:/Contract.pdf");
var signature = new IronPdf.Signing.PdfSignature(@"F:/Iron.pfx", "123")
{
    // Step 3. Optional signing options and a handwritten signature graphic
    SigningContact = "support@ironsoftware.com",
    SigningLocation = "New York, USA",
    SigningReason = "Signing PDF"
};
pdf.Sign(signature);
pdf.SaveAs(@"F:/signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Private renderer = New ChromePdfRenderer()
Private pdf = PdfDocument.FromFile("F:/Contract.pdf")
Private signature = New IronPdf.Signing.PdfSignature("F:/Iron.pfx", "123") With {
	.SigningContact = "support@ironsoftware.com",
	.SigningLocation = "New York, USA",
	.SigningReason = "Signing PDF"
}
pdf.Sign(signature)
pdf.SaveAs("F:/signed.pdf")
$vbLabelText   $csharpLabel

この機能をいくつかの実際のアプリケーションで使用しました。

  1. 契約管理システム: 電子契約を送受信する必要がある企業のためにこれを導入しました。 デジタル署名は契約の法的有効性を保証しました。

  2. 医療記録システム: ヘルスケアアプリケーションでは、デジタル署名を使用して医師が患者の記録や処方箋に署名できるようにしました。

  3. 政府文書処理:ある政府機関向けに、公式文書をデジタル署名できるシステムを実装しました。

PDFの分割と結合

PDFを分割および結合する能力は、文書管理システムで頻繁に使用する基本的な機能です。 IronPDFのこれらの機能の実装は、強力で柔軟です。 以下は、PDFの分割と結合のより高度な例です。

using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        // Create first PDF with three pages
        const string html_a = @"
            <h1>Document A</h1>
            <p>This is the first page of Document A.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document A - Page 2</h2>
            <p>This is the second page of Document A.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document A - Page 3</h2>
            <p>This is the third and final page of Document A.</p>";
        // Create second PDF with two pages
        const string html_b = @"
            <h1>Document B</h1>
            <p>Welcome to the first page of Document B.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document B - Page 2</h2>
            <p>This is the second and last page of Document B.</p>";
        // Render HTML to PDF
        var renderer = new ChromePdfRenderer();
        var pdfdoc_a = renderer.RenderHtmlAsPdf(html_a);
        var pdfdoc_b = renderer.RenderHtmlAsPdf(html_b);
        // Merge PDFs
        var merged = PdfDocument.Merge(pdfdoc_a, pdfdoc_b);
        merged.SaveAs(@"F:/IronPdf/MergedDocument.pdf");
        Console.WriteLine("Merged PDF created: MergedDocument.pdf");
        // Load the merged PDF
        var pdf = PdfDocument.FromFile(@"F:/IronPdf/MergedDocument.pdf");
        // Extract the first page
        var firstPage = pdf.CopyPage(0);
        firstPage.SaveAs(@"F:/IronPdf/FirstPageOnly.pdf");
        Console.WriteLine("First page extracted: FirstPageOnly.pdf");
        // Extract pages 2 to 4 (note: index starts at 0)
        var middlePages = pdf.CopyPages(1, 3);
        middlePages.SaveAs(@"F:/IronPdf/Pages2to4.pdf");
        Console.WriteLine("Pages 2 to 4 extracted: Pages2to4.pdf");
        Console.WriteLine("Process completed. Press any key to exit.");
        Console.ReadKey();
    }
}
using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        // Create first PDF with three pages
        const string html_a = @"
            <h1>Document A</h1>
            <p>This is the first page of Document A.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document A - Page 2</h2>
            <p>This is the second page of Document A.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document A - Page 3</h2>
            <p>This is the third and final page of Document A.</p>";
        // Create second PDF with two pages
        const string html_b = @"
            <h1>Document B</h1>
            <p>Welcome to the first page of Document B.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document B - Page 2</h2>
            <p>This is the second and last page of Document B.</p>";
        // Render HTML to PDF
        var renderer = new ChromePdfRenderer();
        var pdfdoc_a = renderer.RenderHtmlAsPdf(html_a);
        var pdfdoc_b = renderer.RenderHtmlAsPdf(html_b);
        // Merge PDFs
        var merged = PdfDocument.Merge(pdfdoc_a, pdfdoc_b);
        merged.SaveAs(@"F:/IronPdf/MergedDocument.pdf");
        Console.WriteLine("Merged PDF created: MergedDocument.pdf");
        // Load the merged PDF
        var pdf = PdfDocument.FromFile(@"F:/IronPdf/MergedDocument.pdf");
        // Extract the first page
        var firstPage = pdf.CopyPage(0);
        firstPage.SaveAs(@"F:/IronPdf/FirstPageOnly.pdf");
        Console.WriteLine("First page extracted: FirstPageOnly.pdf");
        // Extract pages 2 to 4 (note: index starts at 0)
        var middlePages = pdf.CopyPages(1, 3);
        middlePages.SaveAs(@"F:/IronPdf/Pages2to4.pdf");
        Console.WriteLine("Pages 2 to 4 extracted: Pages2to4.pdf");
        Console.WriteLine("Process completed. Press any key to exit.");
        Console.ReadKey();
    }
}
Imports IronPdf
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create first PDF with three pages
		Const html_a As String = "
            <h1>Document A</h1>
            <p>This is the first page of Document A.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document A - Page 2</h2>
            <p>This is the second page of Document A.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document A - Page 3</h2>
            <p>This is the third and final page of Document A.</p>"
		' Create second PDF with two pages
		Const html_b As String = "
            <h1>Document B</h1>
            <p>Welcome to the first page of Document B.</p>
            <div style='page-break-after: always;'></div>
            <h2>Document B - Page 2</h2>
            <p>This is the second and last page of Document B.</p>"
		' Render HTML to PDF
		Dim renderer = New ChromePdfRenderer()
		Dim pdfdoc_a = renderer.RenderHtmlAsPdf(html_a)
		Dim pdfdoc_b = renderer.RenderHtmlAsPdf(html_b)
		' Merge PDFs
		Dim merged = PdfDocument.Merge(pdfdoc_a, pdfdoc_b)
		merged.SaveAs("F:/IronPdf/MergedDocument.pdf")
		Console.WriteLine("Merged PDF created: MergedDocument.pdf")
		' Load the merged PDF
		Dim pdf = PdfDocument.FromFile("F:/IronPdf/MergedDocument.pdf")
		' Extract the first page
		Dim firstPage = pdf.CopyPage(0)
		firstPage.SaveAs("F:/IronPdf/FirstPageOnly.pdf")
		Console.WriteLine("First page extracted: FirstPageOnly.pdf")
		' Extract pages 2 to 4 (note: index starts at 0)
		Dim middlePages = pdf.CopyPages(1, 3)
		middlePages.SaveAs("F:/IronPdf/Pages2to4.pdf")
		Console.WriteLine("Pages 2 to 4 extracted: Pages2to4.pdf")
		Console.WriteLine("Process completed. Press any key to exit.")
		Console.ReadKey()
	End Sub
End Class
$vbLabelText   $csharpLabel

APITemplate io と IronPDF の C# PDF ライブラリの比較: 図 8

以下は、コードによって生成されたマージされたドキュメントです。

APITemplate io と IronPDF の比較 C# PDFライブラリ: 図9

フォーム充填

フォームへの入力の自動化は、私の多くのプロジェクトで大幅な時間節約になっています。 IronPDFは、プログラムでPDFフォームを記入することを可能にし、大量のフォームの処理やパーソナライズされた文書の作成に非常に役立ちます。 フォーム入力のより包括的な例はこちらです。

using IronPdf;
using System;
// Load the combined form
PdfDocument pdf = PdfDocument.FromFile(@"F:/completeForm.pdf");
// Handle radio buttons
var radioForm = pdf.Form.FindFormField("traveltype");
radioForm.Value = "Airplane";
// Handle checkbox
var checkboxForm = pdf.Form.FindFormField("taskCompleted");
checkboxForm.Value = "Yes";
// Handle combobox
var comboboxForm = pdf.Form.FindFormField("priority");
comboboxForm.Value = "Low";
// Print out all the available choices for combobox
foreach (var choice in comboboxForm.Choices)
{
    Console.WriteLine(choice);
}
// Handle text inputs
pdf.Form.FindFormField("firstname").Value = "John";
pdf.Form.FindFormField("lastname").Value = "Smith";
// Handle text area
pdf.Form.FindFormField("address").Value = "Iron Software\r\n205 N. Michigan Ave.";
// Save the edited PDF
pdf.SaveAs(@"F:/completeFormEdited.pdf");
using IronPdf;
using System;
// Load the combined form
PdfDocument pdf = PdfDocument.FromFile(@"F:/completeForm.pdf");
// Handle radio buttons
var radioForm = pdf.Form.FindFormField("traveltype");
radioForm.Value = "Airplane";
// Handle checkbox
var checkboxForm = pdf.Form.FindFormField("taskCompleted");
checkboxForm.Value = "Yes";
// Handle combobox
var comboboxForm = pdf.Form.FindFormField("priority");
comboboxForm.Value = "Low";
// Print out all the available choices for combobox
foreach (var choice in comboboxForm.Choices)
{
    Console.WriteLine(choice);
}
// Handle text inputs
pdf.Form.FindFormField("firstname").Value = "John";
pdf.Form.FindFormField("lastname").Value = "Smith";
// Handle text area
pdf.Form.FindFormField("address").Value = "Iron Software\r\n205 N. Michigan Ave.";
// Save the edited PDF
pdf.SaveAs(@"F:/completeFormEdited.pdf");
Imports Microsoft.VisualBasic
Imports IronPdf
Imports System
' Load the combined form
Private pdf As PdfDocument = PdfDocument.FromFile("F:/completeForm.pdf")
' Handle radio buttons
Private radioForm = pdf.Form.FindFormField("traveltype")
radioForm.Value = "Airplane"
' Handle checkbox
Dim checkboxForm = pdf.Form.FindFormField("taskCompleted")
checkboxForm.Value = "Yes"
' Handle combobox
Dim comboboxForm = pdf.Form.FindFormField("priority")
comboboxForm.Value = "Low"
' Print out all the available choices for combobox
For Each choice In comboboxForm.Choices
	Console.WriteLine(choice)
Next choice
' Handle text inputs
pdf.Form.FindFormField("firstname").Value = "John"
pdf.Form.FindFormField("lastname").Value = "Smith"
' Handle text area
pdf.Form.FindFormField("address").Value = "Iron Software" & vbCrLf & "205 N. Michigan Ave."
' Save the edited PDF
pdf.SaveAs("F:/completeFormEdited.pdf")
$vbLabelText   $csharpLabel

この機能をいくつかの実際のアプリケーションで使用しました。

  1. HRオンボーディングシステム:私たちは、HRデータベースの情報に基づいて新入社員の書類を自動的に記入するシステムを作成し、手動でのデータ入力にかかる時間を節約しました。

  2. 保険金請求の処理: 保険会社向けに、被保険者情報を自動入力して請求書類を作成するシステムを構築しました。これにより、請求提出プロセスが大幅に迅速化されました。

  3. 学校申込システム: 教育プロジェクトにおいて、我々は学生データに基づいて学校申込書を記入するシステムを実装しました。これにより、学生と管理スタッフの両方にとって申込プロセスが簡単になりました。

  4. 税務書類の生成: 会計事務所のために、クライアントの財務データに基づいて税務書類を自動的に記入するシステムを作成し、エラーを減らし、税シーズン中の時間を節約しました。

    プログラムによってフォームを自動的に入力する機能は、多くのビジネスプロセスの自動化において重要な役割を果たし、手動でのデータ入力によるエラーを減らし、時間を大幅に節約しています。

透かし

PDFに透かしを追加することは、ブランド化やセキュリティ、またはステータス表示のために必要なことがよくあります。 IronPDFは、多くのプロジェクトで役立つ柔軟な透かし機能を提供します。 ここで、透かしを使用する方法のより詳細な例を示します。

using IronPdf;
using IronSoftware.Drawing;
string watermarkHtml = @"
<img style='width: 250px;' src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>
<h1>Iron Software</h1>";
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Watermark</h1>");
// Apply watermark with 45 degrees rotation and 70% opacity
pdf.ApplyWatermark(watermarkHtml, rotation: 30, opacity: 90);
pdf.SaveAs("watermarkOpacity&amp;Rotation.pdf");
using IronPdf;
using IronSoftware.Drawing;
string watermarkHtml = @"
<img style='width: 250px;' src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>
<h1>Iron Software</h1>";
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Watermark</h1>");
// Apply watermark with 45 degrees rotation and 70% opacity
pdf.ApplyWatermark(watermarkHtml, rotation: 30, opacity: 90);
pdf.SaveAs("watermarkOpacity&amp;Rotation.pdf");
Imports IronPdf
Imports IronSoftware.Drawing
Private watermarkHtml As String = "
<img style='width: 250px;' src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>
<h1>Iron Software</h1>"
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Watermark</h1>")
' Apply watermark with 45 degrees rotation and 70% opacity
pdf.ApplyWatermark(watermarkHtml, rotation:= 30, opacity:= 90)
pdf.SaveAs("watermarkOpacity&amp;Rotation.pdf")
$vbLabelText   $csharpLabel

APITemplate io と IronPDF の C# 用 PDF ライブラリの比較: 図 10

APITemplateの高度な機能

動的テンプレート生成

APITemplateの動的テンプレート生成は、カスタマイズ可能なJSONデータを使用して非常にカスタマイズされたドキュメントを作成できる強力な機能です。 APITemplateのAPIは動的コンポーネントをサポートしています。 コードのPDFおよび画像出力の両方を取得できます。 APIコンソールでは、WYSIWYGエディターを使用して簡単にPDFドキュメントを生成できました。

私のプロジェクトでどのようにこれを活用したかについて、詳しく掘り下げていきましょう。

using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
    class ReturnContent
    {
        public string download_url
        {
            get;
            set;
        }
        public string status
        {
            get;
            set;
        }
    }
    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
            var template_id = "bf077b23b4a407ae";
            var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
            var data = new
            {
                date = "15/05/2022",
                invoice_no = "435568799",
                sender_address1 = "3244 Jurong Drive",
                sender_address2 = "Falmouth Maine 1703",
                sender_phone = "255-781-6789",
                sender_email = "dev@ironsoftware.com",
                rece_addess1 = "2354 Lakeside Drive",
                rece_addess2 = "New York 234562 ",
                rece_phone = "34333-84-223",
                rece_email = "info@ironsoftware.com",
                items = new[] {
            new {
              item_name = "Oil",
                unit = 1,
                unit_price = 100,
                total = 100
            },
            new {
              item_name = "Rice",
                unit = 2,
                unit_price = 200,
                total = 400
            },
            new {
              item_name = "Orange",
                unit = 7,
                unit_price = 20,
                total = 1400
            }
          },
                total = "total",
                footer_email = "info@ironsoftware.com"
            };
            var json_content = JsonSerializer.Serialize(data);
            var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
            var byteContent = new ByteArrayContent(buffer);
            Console.WriteLine(json_content);
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            var response = await client.PostAsync(url, byteContent);
            var ret = await response.Content.ReadAsStringAsync();
            var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
            if (returnContent.status == "success")
            {
                Console.WriteLine($"Downloading {returnContent.download_url}...");
                var download_response = await client.GetAsync(returnContent.download_url);
                using (var stream = await download_response.Content.ReadAsStreamAsync())
                {
                    var fileInfo = new FileInfo(@"F:/generated_document.pdf");
                    using (var fileStream = fileInfo.OpenWrite())
                    {
                        await stream.CopyToAsync(fileStream);
                    }
                }
                Console.WriteLine("PDF file has been downloaded and saved as 'generated_document.pdf'");
            }
        }
    }
}
using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
    class ReturnContent
    {
        public string download_url
        {
            get;
            set;
        }
        public string status
        {
            get;
            set;
        }
    }
    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
            var template_id = "bf077b23b4a407ae";
            var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
            var data = new
            {
                date = "15/05/2022",
                invoice_no = "435568799",
                sender_address1 = "3244 Jurong Drive",
                sender_address2 = "Falmouth Maine 1703",
                sender_phone = "255-781-6789",
                sender_email = "dev@ironsoftware.com",
                rece_addess1 = "2354 Lakeside Drive",
                rece_addess2 = "New York 234562 ",
                rece_phone = "34333-84-223",
                rece_email = "info@ironsoftware.com",
                items = new[] {
            new {
              item_name = "Oil",
                unit = 1,
                unit_price = 100,
                total = 100
            },
            new {
              item_name = "Rice",
                unit = 2,
                unit_price = 200,
                total = 400
            },
            new {
              item_name = "Orange",
                unit = 7,
                unit_price = 20,
                total = 1400
            }
          },
                total = "total",
                footer_email = "info@ironsoftware.com"
            };
            var json_content = JsonSerializer.Serialize(data);
            var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
            var byteContent = new ByteArrayContent(buffer);
            Console.WriteLine(json_content);
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            var response = await client.PostAsync(url, byteContent);
            var ret = await response.Content.ReadAsStringAsync();
            var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
            if (returnContent.status == "success")
            {
                Console.WriteLine($"Downloading {returnContent.download_url}...");
                var download_response = await client.GetAsync(returnContent.download_url);
                using (var stream = await download_response.Content.ReadAsStreamAsync())
                {
                    var fileInfo = new FileInfo(@"F:/generated_document.pdf");
                    using (var fileStream = fileInfo.OpenWrite())
                    {
                        await stream.CopyToAsync(fileStream);
                    }
                }
                Console.WriteLine("PDF file has been downloaded and saved as 'generated_document.pdf'");
            }
        }
    }
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text.Json
Imports System.Threading.Tasks
Namespace csharp
	Friend Class ReturnContent
		Public Property download_url() As String
		Public Property status() As String
	End Class
	Friend Class Program
		Shared Async Function Main(ByVal args() As String) As Task
			Dim api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw="
			Dim template_id = "bf077b23b4a407ae"
			Dim url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}"
			Dim data = New With {
				Key .date = "15/05/2022",
				Key .invoice_no = "435568799",
				Key .sender_address1 = "3244 Jurong Drive",
				Key .sender_address2 = "Falmouth Maine 1703",
				Key .sender_phone = "255-781-6789",
				Key .sender_email = "dev@ironsoftware.com",
				Key .rece_addess1 = "2354 Lakeside Drive",
				Key .rece_addess2 = "New York 234562 ",
				Key .rece_phone = "34333-84-223",
				Key .rece_email = "info@ironsoftware.com",
				Key .items = {
					New With {
						Key .item_name = "Oil",
						Key .unit = 1,
						Key .unit_price = 100,
						Key .total = 100
					},
					New With {
						Key .item_name = "Rice",
						Key .unit = 2,
						Key .unit_price = 200,
						Key .total = 400
					},
					New With {
						Key .item_name = "Orange",
						Key .unit = 7,
						Key .unit_price = 20,
						Key .total = 1400
					}
				},
				Key .total = "total",
				Key .footer_email = "info@ironsoftware.com"
			}
			Dim json_content = JsonSerializer.Serialize(data)
			Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
			Dim byteContent = New ByteArrayContent(buffer)
			Console.WriteLine(json_content)
			Dim client = New HttpClient()
			client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
			Dim response = Await client.PostAsync(url, byteContent)
			Dim ret = Await response.Content.ReadAsStringAsync()
			Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
			If returnContent.status = "success" Then
				Console.WriteLine($"Downloading {returnContent.download_url}...")
				Dim download_response = Await client.GetAsync(returnContent.download_url)
				Using stream = Await download_response.Content.ReadAsStreamAsync()
					Dim fileInfo As New FileInfo("F:/generated_document.pdf")
					Using fileStream = fileInfo.OpenWrite()
						Await stream.CopyToAsync(fileStream)
					End Using
				End Using
				Console.WriteLine("PDF file has been downloaded and saved as 'generated_document.pdf'")
			End If
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

APITemplate ioとIronPDFのC# PDFライブラリ比較: 図11

これは生成されたPDFドキュメントです。

APITemplate io と IronPDFの比較: C# PDFライブラリの場合:図12

大量PDF生成

APITemplateのバルクPDF生成機能は、1つのAPI呼び出しで複数のドキュメントを作成する際のゲームチェンジャーです。 以下は、私がそれを使用したより詳細な例です:

using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace csharp
{
    class ReturnContent
    {
        public string download_url { get; set; }
        public string status { get; set; }
    }
    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
            var template_id = "d4f77b23b4ab09fa"; 
            var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
            var membershipCards = new List<object>
            {
                new
                {
                    name = "Iron Dev 1",
                    email = "dev1@ironsoftware.com",
                    membership_id = "M001",
                    expiry_date = "2024-12-31"
                },
                new
                {
                    name = "Iron Dev 2",
                    email = "dev2@ironsoftware.com",
                    membership_id = "M002",
                    expiry_date = "2025-06-30"
                },
                new
                {
                    name = "Iron Dev 3",
                    email = "dev3@ironsoftware.com",
                    membership_id = "M003",
                    expiry_date = "2024-09-15"
                }
            };
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            for (int i = 0; i < membershipCards.Count; i++)
            {
                var json_content = JsonSerializer.Serialize(membershipCards[i]);
                var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
                var byteContent = new ByteArrayContent(buffer);
                Console.WriteLine($"Creating PDF for {((dynamic)membershipCards[i]).name}...");
                var response = await client.PostAsync(url, byteContent);
                var ret = await response.Content.ReadAsStringAsync();
                var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
                if (returnContent.status == "success")
                {
                    Console.WriteLine($"Downloading {returnContent.download_url}...");
                    var download_response = await client.GetAsync(returnContent.download_url);
                    using (var stream = await download_response.Content.ReadAsStreamAsync())
                    {
                        var fileInfo = new FileInfo($"F:/membership_card_{i + 1}.pdf");
                        using (var fileStream = fileInfo.OpenWrite())
                        {
                            await stream.CopyToAsync(fileStream);
                        }
                    }
                    Console.WriteLine($"PDF file has been downloaded and saved as 'membership_card_{i + 1}.pdf'");
                }
                else
                {
                    Console.WriteLine($"Failed to create PDF for {((dynamic)membershipCards[i]).name}. Status: {returnContent.status}");
                }
            }
        }
    }
}
using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace csharp
{
    class ReturnContent
    {
        public string download_url { get; set; }
        public string status { get; set; }
    }
    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
            var template_id = "d4f77b23b4ab09fa"; 
            var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
            var membershipCards = new List<object>
            {
                new
                {
                    name = "Iron Dev 1",
                    email = "dev1@ironsoftware.com",
                    membership_id = "M001",
                    expiry_date = "2024-12-31"
                },
                new
                {
                    name = "Iron Dev 2",
                    email = "dev2@ironsoftware.com",
                    membership_id = "M002",
                    expiry_date = "2025-06-30"
                },
                new
                {
                    name = "Iron Dev 3",
                    email = "dev3@ironsoftware.com",
                    membership_id = "M003",
                    expiry_date = "2024-09-15"
                }
            };
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            for (int i = 0; i < membershipCards.Count; i++)
            {
                var json_content = JsonSerializer.Serialize(membershipCards[i]);
                var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
                var byteContent = new ByteArrayContent(buffer);
                Console.WriteLine($"Creating PDF for {((dynamic)membershipCards[i]).name}...");
                var response = await client.PostAsync(url, byteContent);
                var ret = await response.Content.ReadAsStringAsync();
                var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
                if (returnContent.status == "success")
                {
                    Console.WriteLine($"Downloading {returnContent.download_url}...");
                    var download_response = await client.GetAsync(returnContent.download_url);
                    using (var stream = await download_response.Content.ReadAsStreamAsync())
                    {
                        var fileInfo = new FileInfo($"F:/membership_card_{i + 1}.pdf");
                        using (var fileStream = fileInfo.OpenWrite())
                        {
                            await stream.CopyToAsync(fileStream);
                        }
                    }
                    Console.WriteLine($"PDF file has been downloaded and saved as 'membership_card_{i + 1}.pdf'");
                }
                else
                {
                    Console.WriteLine($"Failed to create PDF for {((dynamic)membershipCards[i]).name}. Status: {returnContent.status}");
                }
            }
        }
    }
}
'INSTANT VB NOTE: 'Option Strict Off' is used here since dynamic typing is used:
Option Strict Off

Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text.Json
Imports System.Threading.Tasks
Imports System.Collections.Generic
Namespace csharp
	Friend Class ReturnContent
		Public Property download_url() As String
		Public Property status() As String
	End Class
	Friend Class Program
		Shared Async Function Main(ByVal args() As String) As Task
			Dim api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw="
			Dim template_id = "d4f77b23b4ab09fa"
			Dim url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}"
			Dim membershipCards = New List(Of Object) From {
				New With {
					Key .name = "Iron Dev 1",
					Key .email = "dev1@ironsoftware.com",
					Key .membership_id = "M001",
					Key .expiry_date = "2024-12-31"
				},
				New With {
					Key .name = "Iron Dev 2",
					Key .email = "dev2@ironsoftware.com",
					Key .membership_id = "M002",
					Key .expiry_date = "2025-06-30"
				},
				New With {
					Key .name = "Iron Dev 3",
					Key .email = "dev3@ironsoftware.com",
					Key .membership_id = "M003",
					Key .expiry_date = "2024-09-15"
				}
			}
			Dim client = New HttpClient()
			client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
			For i As Integer = 0 To membershipCards.Count - 1
				Dim json_content = JsonSerializer.Serialize(membershipCards(i))
				Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
				Dim byteContent = New ByteArrayContent(buffer)
'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
				Console.WriteLine($"Creating PDF for {CType(membershipCards(i), Object).name}...")
				Dim response = Await client.PostAsync(url, byteContent)
				Dim ret = Await response.Content.ReadAsStringAsync()
				Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
				If returnContent.status = "success" Then
					Console.WriteLine($"Downloading {returnContent.download_url}...")
					Dim download_response = Await client.GetAsync(returnContent.download_url)
					Using stream = Await download_response.Content.ReadAsStreamAsync()
						Dim fileInfo As New FileInfo($"F:/membership_card_{i + 1}.pdf")
						Using fileStream = fileInfo.OpenWrite()
							Await stream.CopyToAsync(fileStream)
						End Using
					End Using
					Console.WriteLine($"PDF file has been downloaded and saved as 'membership_card_{i + 1}.pdf'")
				Else
'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
					Console.WriteLine($"Failed to create PDF for {CType(membershipCards(i), Object).name}. Status: {returnContent.status}")
				End If
			Next i
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

このコードは、単一のAPI呼び出しで複数の会員カードを生成します。 各カードは個々のメンバー情報でカスタマイズされています。 以下は、このコードによって生成された1枚のカードです。

APITemplate io と IronPDF の比較:C# PDFライブラリ用図13

画像生成

PDF生成がAPITemplateの主な焦点である一方、その画像生成機能も同様に優れています。コンソール内の画像テンプレートを使用して、ソーシャルメディア用の画像を生成することができます。 また、レスポンシブ画像のスマートクロップを提供しています。バナー生成APIは、画像APIと同じです。 以下は、私が使用したより複雑な例です。

using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
    class ReturnContent
    {
        public string download_url { get; set; }
        public string status { get; set; }
    }
    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
            var template_id = "f4377b23b4aeeed0";
            var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
            var json_content = @"{
    ""overrides"": [
        {
            ""name"": ""rect_image_bg"",
            ""stroke"": ""grey"",
            ""src"": ""https://images.unsplash.com/photo-1542401886-65d6c61db217?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHwzfHxkZXNlcnR8ZW58MHwwfHx8MTYyMTUxOTI2OA&ixlib=rb-1.2.1&q=80&w=1080""
        },
        {
            ""name"": ""rect_container"",
            ""stroke"": ""grey"",
            ""backgroundColor"": ""rgba(255, 255, 255, 0.62)""
        },
        {
            ""name"": ""text_quote"",
            ""text"": ""Just witnessed the most breathtaking sunset over the Sahara. The way the light dances on the dunes, painting the sky in shades of orange and purple, is truly magical. Nature's artistry at its finest! 🌅🐫 #DesertAdventures #SaharaSkies"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#414141""
        },
        {
            ""name"": ""text_footer"",
            ""text"": ""2024-07-30 - Twitter - iPhone 16 Pro"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#666666""
        },
        {
            ""name"": ""circle_profile"",
            ""stroke"": ""grey"",
            ""src"": ""https://images.unsplash.com/photo-1520998116484-6eeb2f72b5b9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHw2Mnx8aGFwcHl8ZW58MHwwfHx8MTYyMTY5MjkwNw&ixlib=rb-1.2.1&q=80&w=1080""
        },
        {
            ""name"": ""text_name"",
            ""text"": ""Sarah Wanderlust"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#4E4E4E""
        },
        {
            ""name"": ""text_twitter"",
            ""text"": ""@sarahexplores"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#4E4E4E""
        }
    ]
}";
            var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
            var byteContent = new ByteArrayContent(buffer);
            Console.WriteLine(json_content);
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            var response = await client.PostAsync(url, byteContent);
            var ret = await response.Content.ReadAsStringAsync();
            var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
            if (returnContent.status == "success")
            {
                Console.WriteLine($"Downloading {returnContent.download_url}...");
                var download_response = await client.GetAsync(returnContent.download_url);
                using (var stream = await download_response.Content.ReadAsStreamAsync())
                {
                    var fileInfo = new FileInfo("image.jpeg");
                    using (var fileStream = fileInfo.OpenWrite())
                    {
                        await stream.CopyToAsync(fileStream);
                    }
                }
            }
        }
    }
}
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
    class ReturnContent
    {
        public string download_url { get; set; }
        public string status { get; set; }
    }
    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
            var template_id = "f4377b23b4aeeed0";
            var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
            var json_content = @"{
    ""overrides"": [
        {
            ""name"": ""rect_image_bg"",
            ""stroke"": ""grey"",
            ""src"": ""https://images.unsplash.com/photo-1542401886-65d6c61db217?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHwzfHxkZXNlcnR8ZW58MHwwfHx8MTYyMTUxOTI2OA&ixlib=rb-1.2.1&q=80&w=1080""
        },
        {
            ""name"": ""rect_container"",
            ""stroke"": ""grey"",
            ""backgroundColor"": ""rgba(255, 255, 255, 0.62)""
        },
        {
            ""name"": ""text_quote"",
            ""text"": ""Just witnessed the most breathtaking sunset over the Sahara. The way the light dances on the dunes, painting the sky in shades of orange and purple, is truly magical. Nature's artistry at its finest! 🌅🐫 #DesertAdventures #SaharaSkies"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#414141""
        },
        {
            ""name"": ""text_footer"",
            ""text"": ""2024-07-30 - Twitter - iPhone 16 Pro"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#666666""
        },
        {
            ""name"": ""circle_profile"",
            ""stroke"": ""grey"",
            ""src"": ""https://images.unsplash.com/photo-1520998116484-6eeb2f72b5b9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHw2Mnx8aGFwcHl8ZW58MHwwfHx8MTYyMTY5MjkwNw&ixlib=rb-1.2.1&q=80&w=1080""
        },
        {
            ""name"": ""text_name"",
            ""text"": ""Sarah Wanderlust"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#4E4E4E""
        },
        {
            ""name"": ""text_twitter"",
            ""text"": ""@sarahexplores"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#4E4E4E""
        }
    ]
}";
            var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
            var byteContent = new ByteArrayContent(buffer);
            Console.WriteLine(json_content);
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            var response = await client.PostAsync(url, byteContent);
            var ret = await response.Content.ReadAsStringAsync();
            var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
            if (returnContent.status == "success")
            {
                Console.WriteLine($"Downloading {returnContent.download_url}...");
                var download_response = await client.GetAsync(returnContent.download_url);
                using (var stream = await download_response.Content.ReadAsStreamAsync())
                {
                    var fileInfo = new FileInfo("image.jpeg");
                    using (var fileStream = fileInfo.OpenWrite())
                    {
                        await stream.CopyToAsync(fileStream);
                    }
                }
            }
        }
    }
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks
Namespace csharp
	Friend Class ReturnContent
		Public Property download_url() As String
		Public Property status() As String
	End Class
	Friend Class Program
		Shared Async Function Main(ByVal args() As String) As Task
			Dim api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw="
			Dim template_id = "f4377b23b4aeeed0"
			Dim url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}"
			Dim json_content = "{
    ""overrides"": [
        {
            ""name"": ""rect_image_bg"",
            ""stroke"": ""grey"",
            ""src"": ""https://images.unsplash.com/photo-1542401886-65d6c61db217?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHwzfHxkZXNlcnR8ZW58MHwwfHx8MTYyMTUxOTI2OA&ixlib=rb-1.2.1&q=80&w=1080""
        },
        {
            ""name"": ""rect_container"",
            ""stroke"": ""grey"",
            ""backgroundColor"": ""rgba(255, 255, 255, 0.62)""
        },
        {
            ""name"": ""text_quote"",
            ""text"": ""Just witnessed the most breathtaking sunset over the Sahara. The way the light dances on the dunes, painting the sky in shades of orange and purple, is truly magical. Nature's artistry at its finest! 🌅🐫 #DesertAdventures #SaharaSkies"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#414141""
        },
        {
            ""name"": ""text_footer"",
            ""text"": ""2024-07-30 - Twitter - iPhone 16 Pro"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#666666""
        },
        {
            ""name"": ""circle_profile"",
            ""stroke"": ""grey"",
            ""src"": ""https://images.unsplash.com/photo-1520998116484-6eeb2f72b5b9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHw2Mnx8aGFwcHl8ZW58MHwwfHx8MTYyMTY5MjkwNw&ixlib=rb-1.2.1&q=80&w=1080""
        },
        {
            ""name"": ""text_name"",
            ""text"": ""Sarah Wanderlust"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#4E4E4E""
        },
        {
            ""name"": ""text_twitter"",
            ""text"": ""@sarahexplores"",
            ""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
            ""color"": ""#4E4E4E""
        }
    ]
}"
			Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
			Dim byteContent = New ByteArrayContent(buffer)
			Console.WriteLine(json_content)
			Dim client = New HttpClient()
			client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
			Dim response = Await client.PostAsync(url, byteContent)
			Dim ret = Await response.Content.ReadAsStringAsync()
			Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
			If returnContent.status = "success" Then
				Console.WriteLine($"Downloading {returnContent.download_url}...")
				Dim download_response = Await client.GetAsync(returnContent.download_url)
				Using stream = Await download_response.Content.ReadAsStreamAsync()
					Dim fileInfo As New FileInfo("image.jpeg")
					Using fileStream = fileInfo.OpenWrite()
						Await stream.CopyToAsync(fileStream)
					End Using
				End Using
			End If
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

APITemplate ioとIronPDFのC# PDFライブラリ比較: 図14

この例では、動的コンテンツ、カスタム背景色、そして埋め込みプロダクト画像を含む製品プロモーション画像を生成します。

QRコード生成

APITemplateの組み込みQRコード生成機能は、私の多くのプロジェクトに非常に役立ちました。 QRコードのコンテンツの代わりにデータURLを配置できます。 以下は、私が使用したより複雑な例です。

using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
    class ReturnContent
    {
        public string download_url { get; set; }
        public string status { get; set; }
    }
    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "API-Key";
            var template_id = "Template-Key";
            var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
            var json_content = @"{
    ""overrides"": [
        {
            ""name"": ""background-color"",
            ""stroke"": ""grey"",
            ""backgroundColor"": ""#FFFFFF""
        },
        {
            ""name"": ""qr_1"",
            ""content"": ""http://ironpdf.com/"",
            ""backgroundColor"": ""white"",
            ""color"": ""#000000""
        }
    ]
}";
            var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
            var byteContent = new ByteArrayContent(buffer);
            //Console.WriteLine(json_content);
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            var response = await client.PostAsync(url, byteContent);
            var ret = await response.Content.ReadAsStringAsync();
            var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
            Console.WriteLine(returnContent.status);
            if (returnContent.status == "success")
            {
                Console.WriteLine($"Downloading {returnContent.download_url}...");
                var download_response = await client.GetAsync(returnContent.download_url);
                using (var stream = await download_response.Content.ReadAsStreamAsync())
                {
                    var fileInfo = new FileInfo(@"F:/QRimage.jpeg");
                    using (var fileStream = fileInfo.OpenWrite())
                    {
                        await stream.CopyToAsync(fileStream);
                    }
                }
            }
        }
    }
}
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
    class ReturnContent
    {
        public string download_url { get; set; }
        public string status { get; set; }
    }
    class Program
    {
        static async Task Main(string[] args)
        {
            var api_key = "API-Key";
            var template_id = "Template-Key";
            var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
            var json_content = @"{
    ""overrides"": [
        {
            ""name"": ""background-color"",
            ""stroke"": ""grey"",
            ""backgroundColor"": ""#FFFFFF""
        },
        {
            ""name"": ""qr_1"",
            ""content"": ""http://ironpdf.com/"",
            ""backgroundColor"": ""white"",
            ""color"": ""#000000""
        }
    ]
}";
            var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
            var byteContent = new ByteArrayContent(buffer);
            //Console.WriteLine(json_content);
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
            var response = await client.PostAsync(url, byteContent);
            var ret = await response.Content.ReadAsStringAsync();
            var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
            Console.WriteLine(returnContent.status);
            if (returnContent.status == "success")
            {
                Console.WriteLine($"Downloading {returnContent.download_url}...");
                var download_response = await client.GetAsync(returnContent.download_url);
                using (var stream = await download_response.Content.ReadAsStreamAsync())
                {
                    var fileInfo = new FileInfo(@"F:/QRimage.jpeg");
                    using (var fileStream = fileInfo.OpenWrite())
                    {
                        await stream.CopyToAsync(fileStream);
                    }
                }
            }
        }
    }
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks
Namespace csharp
	Friend Class ReturnContent
		Public Property download_url() As String
		Public Property status() As String
	End Class
	Friend Class Program
		Shared Async Function Main(ByVal args() As String) As Task
			Dim api_key = "API-Key"
			Dim template_id = "Template-Key"
			Dim url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}"
			Dim json_content = "{
    ""overrides"": [
        {
            ""name"": ""background-color"",
            ""stroke"": ""grey"",
            ""backgroundColor"": ""#FFFFFF""
        },
        {
            ""name"": ""qr_1"",
            ""content"": ""http://ironpdf.com/"",
            ""backgroundColor"": ""white"",
            ""color"": ""#000000""
        }
    ]
}"
			Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
			Dim byteContent = New ByteArrayContent(buffer)
			'Console.WriteLine(json_content);
			Dim client = New HttpClient()
			client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
			Dim response = Await client.PostAsync(url, byteContent)
			Dim ret = Await response.Content.ReadAsStringAsync()
			Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
			Console.WriteLine(returnContent.status)
			If returnContent.status = "success" Then
				Console.WriteLine($"Downloading {returnContent.download_url}...")
				Dim download_response = Await client.GetAsync(returnContent.download_url)
				Using stream = Await download_response.Content.ReadAsStreamAsync()
					Dim fileInfo As New FileInfo("F:/QRimage.jpeg")
					Using fileStream = fileInfo.OpenWrite()
						Await stream.CopyToAsync(fileStream)
					End Using
				End Using
			End If
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

APITemplate io と IronPDF の C# PDF ライブラリ比較: 図15

ドキュメンテーションとサポート

PDFの生成と操作を頻繁に行うC#開発者として、ドキュメントとサポートの質がプロジェクトの成功を左右することを実感しました。 では、IronPDFとAPITemplateのドキュメントとサポートに関する私の経験についてお話ししましょう。

IronPDF

ドキュメント

IronPDFのドキュメントは包括的で体系的に構成されており、私のプロジェクトに大いに役立ちました。 私の経験の詳細な内訳は次のとおりです: IronPDFのドキュメントはhttps://ironpdf.com/docs/で利用可能で、非常に充実しています。私が評価したいくつかの重要な側面を以下に示します。

  1. 入門ガイド: ドキュメントは、NuGetを介してIronPDFをインストールし、最初のPDFを作成する方法についての明確で段階的なガイドから始まります。 これは、最初のプロジェクトで迅速に立ち上げるのに役立ちました。

  2. APIリファレンス: APIリファレンスは徹底しており、すべてのクラスとメソッドを網羅しています。 各エントリにはC#の例が含まれており、特定の機能を実装する際に非常に貴重であると感じました。

  3. コード例: ドキュメント全体に、多くのコードスニペットと完全な例があります。 これらは、より複雑なPDF操作を実装する必要があるときに特に役立ちました。

  4. チュートリアルとハウツーガイド:IronPDFは、HTMLからPDFを作成したり、透かしを追加したり、フォームを扱ったりする一般的なタスクのための詳細なチュートリアルを提供します。 これらは、より高度なユースケースで私を導いてくれました。

  5. トラブルシューティングセクション: ドキュメントには、一般的な問題を解決するためのトラブルシューティングセクションが含まれています。 これはエラーや予期しない動作に遭遇したときに時間を節約してくれました。

サポート

私の経験では、IronPDFのコンタクトは迅速に対応しており、サポートチャネルは非常に役立ってきました。

  1. メールサポート: 複雑な問題を抱えたときに、メールサポートを利用しました。 応答時間は通常24時間以内で、サポートチームは製品についてよく理解しています。

  2. コミュニティフォーラム:IronPDF は、開発者が質問をしたりソリューションを共有したりできるコミュニティフォーラムを提供しています。 私の質問に対する答えを見つけたと同時に、自分の経験に基づいた解決策も提供しました。

  3. Stack Overflow: IronPDFチームは、Stack Overflow上の[ironpdf]タグを積極的に監視しています。 私はそこに投稿した質問に対して役立つ回答を受け取りました。

  4. 定期的な更新: IronPDFは、バグ修正や新機能を含む更新を頻繁にリリースしています。 変更履歴が詳細で、各バージョンでの新しい点や変更点を理解するのに役立ちます。

  5. 移行ガイド: メジャーバージョン間で重大な変更があった場合、IronPDFは移行ガイドを提供しています。 これらは、私のプロジェクトをライブラリの新しいバージョンに更新する際に重要でした。

APITemplate

APITemplateのドキュメントとサポート構造は、IronPDFとは異なり、クラウドベースサービスとしての特性を反映しています。私の経験はこちらです。

ドキュメント

APITemplateのドキュメントはhttps://docs.apitemplate.io/reference/api-reference.htmlで利用可能であり、APIの使用に焦点を当てています。 以下は重要なポイントです:

  1. APIリファレンス: ドキュメントは、利用可能なすべてのエンドポイント、必要なパラメータ、およびレスポンス形式を詳述した明確なAPIリファレンスを提供します。 これは、私のC#アプリケーションにAPITemplateを統合する際の頼りにしているリソースです。

  2. 認証: 認証に関する専用セクションがあり、APIキーの使用方法が明確に説明されています。 これはサービスの使用を開始したときに重要でした。

サポート

APITemplateのサポート構造は、主にメールサポートに重点を置いています。

  1. メールサポート: 問題や質問があるときは、彼らのメールサポートを利用しました。 応答時間は通常、1~2営業日以内です。

  2. FAQセクション: ドキュメントには、一般的な質問に答えるFAQセクションが含まれています。 これは問題に直面したときに最初に立ち寄る場所であることが多かったです。

ライセンス

IronPDFの価格とライセンス

APITemplate ioとIronPDFのC# PDFライブラリ比較: 図16

IronPDFは、さまざまなニーズに合わせたさまざまな料金プランを提供しています。

  1. Lite: 価格は$749で、単一のプロジェクトに取り組んでいる単一の開発者に適しています。 これは一度きりの料金であり、小規模なプロジェクトや個人開発者にとって手頃なオプションです。

  2. Professional: $1,499で、このオプションは最大10人の開発者、10か所、10のプロジェクトをサポートします。 この階層には一回限りの料金も含まれており、小規模から中規模のチームにさらに柔軟性を提供します。

  3. Unlimited: $2,999で、このティアは無制限の開発者、場所、プロジェクトを許可します。 これは、制限なく広範な使用が必要な大規模なチームや企業に最適です。

    IronPDFは、大規模な組織や商用製品にPDF機能を統合する必要がある人々のために、エンタープライズおよびOEMの再配布ライセンスも提供しています。 無料試用版も提供しています。

APITemplateの価格とライセンス

APITemplateは、APIベースのPDF生成サービスによる異なるアプローチを提供します。価格は通常、APIコール数に基づいており、使用パターンの変動に対してより柔軟です。

  1. ベーシックプラン: 通常、月あたりのAPIコールの数が制限され、より低い価格で開始します。 これは、小規模なプロジェクトや、PDF生成の必要が最小限のビジネスに適しています。

  2. スタンダードプラン:このプランには、より多くのAPIコールと追加機能が含まれており、中規模企業向けに対応しています。

  3. Enterprise Plan: 高頻度ユーザー向けに最適化されたこのプランは、最も多くのAPIコールと、優先サポートやカスタム統合などのプレミアム機能を提供します。

    APITemplateのライセンスはシンプルで、通常は月間または年間のサブスクリプションモデルに結び付けられています。

主な違い

  1. 価格モデル:IronPDFは一度きりの料金モデルを採用しており、特に継続的かつ多用する場合には長期的にコスト効果が高くなることがあります。 一方、APITemplateはサブスクリプションベースのモデルを使用しており、利用に応じてより柔軟でスケーラブルです。

  2. サポートとアップデート: IronPDFは、購入時に1年間のサポートとアップデートが含まれており、この期間を延長するオプションがあります。 APITemplateのサブスクリプションプランには、通常、パッケージの一部として継続的なサポートと更新が含まれています。

IronPDFを選ぶべき理由は?

IronPDFとAPITemplateの両方がHTMLコンテンツからPDFを生成する機能を提供していますが、IronPDFの実装はより頑丈で柔軟性があります。 以下は比較です:

IronPDF

using IronPdf;
var renderer = new ChromePdfRenderer();
var html = @"
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; }
        .header { color: #0066cc; font-size: 24px; }
        .content { margin-top: 20px; }
    </style>
</head>
<body>
    <div class='header'>Dynamic Report</div>
    <div class='content'>
        <p>This report was generated on: <script>document.write(new Date().toLocaleString());</script></p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
    </div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("IronPDF_report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
var html = @"
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; }
        .header { color: #0066cc; font-size: 24px; }
        .content { margin-top: 20px; }
    </style>
</head>
<body>
    <div class='header'>Dynamic Report</div>
    <div class='content'>
        <p>This report was generated on: <script>document.write(new Date().toLocaleString());</script></p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
    </div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("IronPDF_report.pdf");
Imports IronPdf
Private renderer = New ChromePdfRenderer()
Private html = "
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; }
        .header { color: #0066cc; font-size: 24px; }
        .content { margin-top: 20px; }
    </style>
</head>
<body>
    <div class='header'>Dynamic Report</div>
    <div class='content'>
        <p>This report was generated on: <script>document.write(new Date().toLocaleString());</script></p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
    </div>
</body>
</html>"
Private pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("IronPDF_report.pdf")
$vbLabelText   $csharpLabel

APITemplate

using System.Net.Http;
using System.Text.Json;
var apiKey = "your_api_key";
var templateId = "your_template_id";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={templateId}";
var data = new
{
    header = "Dynamic Report",
    content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
    date = DateTime.Now.ToShortDateString()
};
var json = JsonSerializer.Serialize(data);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", apiKey);
var response = await client.PostAsync(url, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("APITemplate_report.pdf", pdfBytes);
using System.Net.Http;
using System.Text.Json;
var apiKey = "your_api_key";
var templateId = "your_template_id";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={templateId}";
var data = new
{
    header = "Dynamic Report",
    content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
    date = DateTime.Now.ToShortDateString()
};
var json = JsonSerializer.Serialize(data);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", apiKey);
var response = await client.PostAsync(url, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("APITemplate_report.pdf", pdfBytes);
Imports System.Net.Http
Imports System.Text.Json
Private apiKey = "your_api_key"
Private templateId = "your_template_id"
Private url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={templateId}"
Private data = New With {
	Key .header = "Dynamic Report",
	Key .content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
	Key .date = DateTime.Now.ToShortDateString()
}
Private json = JsonSerializer.Serialize(data)
Private content = New StringContent(json, System.Text.Encoding.UTF8, "application/json")
Private client = New HttpClient()
client.DefaultRequestHeaders.Add("X-API-KEY", apiKey)
Dim response = Await client.PostAsync(url, content)
Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
File.WriteAllBytes("APITemplate_report.pdf", pdfBytes)
$vbLabelText   $csharpLabel

主な違い

  1. JavaScriptサポート: IronPDFはHTML内でのJavaScript実行を完全にサポートしており、動的なコンテンツ生成を可能にします(例のように現在の日付など)。 APITemplateは通常、すべてのデータを事前に提供する必要があります。

  2. CSSの柔軟性: IronPDFを使用すると、HTML内で直接CSSスタイリングを完全にコントロールできます。 APITemplateは、多くの場合、カスタマイズオプションが限られた事前定義されたテンプレートを必要とします。

  3. パフォーマンス: IronPDF は HTML をローカルで処理するため、特に複雑なドキュメントの場合に PDF の生成が高速になります。 APITemplateのクラウドベースのアプローチは遅延をもたらす可能性があります。

  4. オフライン機能: IronPDFはオフラインで動作します。これは、インターネット接続が制限されているアプリケーションや、高度なセキュリティ要件を持つアプリケーションに役立ちます。 APITemplateは常にインターネット接続が必要です。

  5. 動的コンテンツ:IronPDF は、その場でより動的なコンテンツ生成を可能にする一方で、APITemplate は通常、事前に定義されたテンプレート構造を必要とします。

  6. カスタマイズ: IronPDFは、ページサイズ、余白、その他のPDF特有の設定など、PDF生成プロセスに対してより詳細な制御を提供します。

  7. 一貫性: IronPDFは独自のレンダリングエンジンを使用しているため、さまざまな環境で一貫したレンダリングを保証します。APITemplateの出力はサーバー構成によって異なる場合があります。

結論

IronPDFとAPITemplateの両方をさまざまなC#プロジェクトで広範に使用した後、それぞれのツールの独自の強みを評価するようになりました。 しかし、私のPDF関連のタスクのほとんどにおいて、IronPDFは一貫して優れた選択肢であることが証明されています。APITemplateには、特にシンプルなテンプレートベースのドキュメント生成の面で利点がありますが、IronPDFの多様性により、これらのタスクを同様に効果的に処理できるうえに、必要に応じてより複雑なPDF操作にも対応する能力を備えています。

結論として、両方のツールはそれぞれの役割を持っていますが、IronPDFはC#開発におけるPDF操作において、一貫してより強力で柔軟かつコスト効果の高いソリューションであることが証明されています。 その強力な機能セット、優れたパフォーマンス、そして包括的なサポートにより、最も簡単なドキュメント生成から最も複雑なPDF操作に至るまで、PDF関連のタスクのための私のお気に入りの選択肢になります。

チペゴ
ソフトウェアエンジニア
チペゴは優れた傾聴能力を持ち、それが顧客の問題を理解し、賢明な解決策を提供する助けとなっています。彼は情報技術の学士号を取得後、2023年にIron Softwareチームに加わりました。現在、彼はIronPDFとIronOCRの2つの製品に注力していますが、顧客をサポートする新しい方法を見つけるにつれて、他の製品に関する知識も日々成長しています。Iron Softwareでの協力的な生活を楽しんでおり、さまざまな経験を持つチームメンバーが集まり、効果的で革新的な解決策を提供することに貢献しています。チペゴがデスクを離れているときは、良い本を楽しんだり、サッカーをしていることが多いです。
< 以前
C# PDF SDK比較(無料&有料ツール)
次へ >
C#でのPDFAライブラリ(.NET開発者向け比較リスト)