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

Accusoft Prizmdoc PDFビューアーチュートリアルと比較

Accusoft PDF ViewerはHTMLからPDFへの変換機能やその他のPDF編集・操作タスクを.NET向けに提供します。 IronPDFはこれらのタスクをプログラムで実行し、C#プロジェクトでの時間と労力を節約します。

二つを比較して、プロジェクトに最適なものを見つけましょう。

class="learnn-how-section">
class="row">
class="col-sm-6">

IronPDFとAccusoft PDF Viewerを比較

  • HTMLをPDFに変換
  • PDFにヘッダーとフッターを設定
  • PDFを画像ファイルに変換
  • ライセンス、無料試用オプションなどを比較
class="col-sm-6">
class="download-card"> Cheat Sheet Card related to Accusoft Prizmdoc PDFビューアーチュートリアルと比較

class="tutorial-segment-title">概観

IronPDFについて

IronPDFはC#のHTMLからPDFへのライブラリです。 エンジニアがHTML文字列、Webページ、URLなどからPDFファイルを作成するタスクを実行したり、ウォーターマーク、ブックマーク、ヘッダーとフッターなどのプロパティを設定することができます。複数のPDFファイルを一つに統合したり、PDFページを画像に、または逆に変換することもできます。

開発には無料で、プロジェクトをライブにするための30日間のデプロイ試用が提供されます。

You can download a file project from this link.

Accusoft PrizmDoc Viewerについて

PrizmDoc ViewerはPDFファイルを操作し、他の形式にリモートで変換するためのREST APIです。 PrizmDocは100以上の異なるファイル形式をPDFに、またPDFをPNG、JPG、TIFF、SVGの形式に変換できます。 アプリケーションに様々な種類の電子署名オプションを含めるためにも使用できます。

比較表

IronPDF PrizmDoc Viewer
PDFファイルをプログラムで操作します。 PDFファイルをプログラムで操作します。
.NET CoreをWindows、Mac、Linuxでサポート。 Windows、Mac、Linuxを用いる.NET Coreをサポート。
ローカルで動作します ドキュメントをリモートサーバーに送信します。
非同期プログラミングを使用せずに作業が可能。 System.Threading.Tasksを用いた非同期プログラミングを必須とします。
IronPDFをシステムにインストールするとオフラインでも容易に作業可能。 PrizmDoc Viewerサーバー(クラウドホストまたはセルフホスト)にリクエストを送信するためにインターネット接続が必須です。
多くの事前定義関数を提供。 いくつかの事前定義関数を提供。
簡単に短いコード行数で実行可能。 多くのコード行数を必要とすることが多いです。
各ライセンスプランでプロジェクト毎に無制限の変換。 各クラウドホストライセンスプランでは取引数が制限されています。
開発用は無期限で無料。 試用では300件のみ。

二つインストールしてコードを比較しましょう。


class="tutorial-segment-title">ステップ1: インストール

1. IronPDFライブラリのインストール

プロジェクトにIronPDFをインストールする方法は2つあり、採用するもので違いはありません。

1.1. IronPDF DLLのダウンロード

IronPDF.dllをダウンロードし、プロジェクトに参照を追加します。 これにより、IronPdf名前空間に簡単にアクセスできます。

using IronPdf;
using IronPdf;
Imports IronPdf
$vbLabelText   $csharpLabel

これで、IronPDFの提供する機能やクラスに簡単にアクセスすることができます。

1.2 NuGetパッケージマネージャーを介してインストール

  • パッケージマネージャコンソールを使っている場合:

    パッケージマネージャコンソールを使っている場合、次のコマンドを実行します:

    Install-Package IronPdf
  • ソリューションのパッケージの管理:

    NuGetパッケージマネージャーのGUIを使用している場合、検索バーでIronPDFを検索してインストールします。


AccusoftからPrizmDoc Viewerをインストール

PrizmDoc Viewerには2つの部分があり、1つはRestful APIとしてのサーバー側のPrizmDoc Serverです。 もう1つはプロジェクト側で、このAPIを叩いてレスポンスを取得します。

PrizmDoc Serverにアクセス

名前から見てわかるように、サーバー側アプリケーションで、ドキュメントをリクエスト(入力)として取得し、PDFファイルに変換し、クライアントにレスポンス(出力)として送ります。 製品の技術的ハートであり、ドキュメント処理と変換エンジンです。プログラム構造や技術が同じため、採用方法に違いはありませんが、以下の2通りの方法で使用できます:

  1. セルフホスト:

    このオプションでは、自分のサーバーを用意する必要があり、PrizmDoc Serverをダウンロードしてインストールできます。 WindowsへPrizmDoc Serverをインストールする方法を参照。

    注意: 最小32GBのRAMと4コアのCPUが必要で、それに満たない場合は悪い体験をする可能性があります。

  2. クラウドホスト:

    PrizmDoc Viewerのクラウドベースサービスで、サーバーを用意する必要はありません。 これを比較に使用します。 アカウントを作成して、ホームページを開きます。 APIキーメニューからAPIキーをコピーし、後ほど使用方法を確認します。

最初に、PrizmDoc Viewerを使用してドキュメントをPDFファイルに変換する基本的な構造を見て、C#コンソールアプリケーションを使ってAccusoftサーバーと直接対話します。

注意: 次の例は、PrizmDocがPDFファイルをどう扱うかの概念理解のためだけのものです。 少し長いですが、例をスキップして直接比較に移動しても問題ありません

Accusoftの動作構造

この例では、myWebpage.htmlsample.pdfファイルに変換します。

注意: プロジェクトにNewtonsoft.Jsonライブラリをインストールして、その参照を追加する必要があります。

まず、プロジェクトに以下のライブラリを追加します:

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq; // Install Newtonsoft.Json via NuGet Package Manager
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq; // Install Newtonsoft.Json via NuGet Package Manager
Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Imports System.Threading.Tasks
Imports Newtonsoft.Json.Linq ' Install Newtonsoft.Json via NuGet Package Manager
$vbLabelText   $csharpLabel

次に、Accusoft API Keyという公開変数を作成し、そこにAPIキーを次のように貼り付けます。

static string ApiKey = "Your-API-KEY";
static string ApiKey = "Your-API-KEY";
Private Shared ApiKey As String = "Your-API-KEY"
$vbLabelText   $csharpLabel

PrizmDoc Viewerを使ってPDFファイルを扱うためには3ステップがあります:

  1. PrizmDocサーバーへファイルをアップロードします。
  2. アップロードされたファイルを変換します。
  3. PrizmDocサーバーから変換されたファイルをダウンロードします。

各ステップに対し、別々の関数を作成します。

static void Main(string[] args)
{
    //---Upload file to Server---
    JObject uploadResults = UploadToServer("myWebpage.html").Result;
    string fileID = (string)uploadResults.SelectToken("fileId");
    string affinityToken = (string)uploadResults.SelectToken("affinityToken");

    //---Convert the uploaded file to PDF---
    JObject convertResults = Convert(affinityToken, fileID).Result;
    string processId = (string)convertResults.SelectToken("processId");
    affinityToken = (string)convertResults.SelectToken("affinityToken");

    //---Check the status that conversion is completed---
    JObject convertStatusResults = ConvertStatus(processId, affinityToken).Result;
    string convertStatus = (string)convertStatusResults.SelectToken("state");

    //---Continuously checking whether conversion completed---
    while (!(convertStatus.Equals("complete")))
    {
        System.Threading.Thread.Sleep(30000);
        convertStatusResults = ConvertStatus(processId, affinityToken).Result;
        convertStatus = (string)convertStatusResults.SelectToken("state");
    }

    //---Download the converted file from server---
    string newFileID = (string)convertStatusResults.SelectToken("output.results[0].fileId");
    DownloadFromServer(affinityToken, newFileID, "sample.pdf").Wait();

    Console.WriteLine("PDF file created successfully...!");
    Console.ReadKey();
}
static void Main(string[] args)
{
    //---Upload file to Server---
    JObject uploadResults = UploadToServer("myWebpage.html").Result;
    string fileID = (string)uploadResults.SelectToken("fileId");
    string affinityToken = (string)uploadResults.SelectToken("affinityToken");

    //---Convert the uploaded file to PDF---
    JObject convertResults = Convert(affinityToken, fileID).Result;
    string processId = (string)convertResults.SelectToken("processId");
    affinityToken = (string)convertResults.SelectToken("affinityToken");

    //---Check the status that conversion is completed---
    JObject convertStatusResults = ConvertStatus(processId, affinityToken).Result;
    string convertStatus = (string)convertStatusResults.SelectToken("state");

    //---Continuously checking whether conversion completed---
    while (!(convertStatus.Equals("complete")))
    {
        System.Threading.Thread.Sleep(30000);
        convertStatusResults = ConvertStatus(processId, affinityToken).Result;
        convertStatus = (string)convertStatusResults.SelectToken("state");
    }

    //---Download the converted file from server---
    string newFileID = (string)convertStatusResults.SelectToken("output.results[0].fileId");
    DownloadFromServer(affinityToken, newFileID, "sample.pdf").Wait();

    Console.WriteLine("PDF file created successfully...!");
    Console.ReadKey();
}
Shared Sub Main(ByVal args() As String)
	'---Upload file to Server---
	Dim uploadResults As JObject = UploadToServer("myWebpage.html").Result
	Dim fileID As String = CStr(uploadResults.SelectToken("fileId"))
	Dim affinityToken As String = CStr(uploadResults.SelectToken("affinityToken"))

	'---Convert the uploaded file to PDF---
	Dim convertResults As JObject = Convert(affinityToken, fileID).Result
	Dim processId As String = CStr(convertResults.SelectToken("processId"))
	affinityToken = CStr(convertResults.SelectToken("affinityToken"))

	'---Check the status that conversion is completed---
	Dim convertStatusResults As JObject = ConvertStatus(processId, affinityToken).Result
	Dim convertStatus As String = CStr(convertStatusResults.SelectToken("state"))

	'---Continuously checking whether conversion completed---
	Do While Not (convertStatus.Equals("complete"))
		System.Threading.Thread.Sleep(30000)
		convertStatusResults = ConvertStatus(processId, affinityToken).Result
		convertStatus = CStr(convertStatusResults.SelectToken("state"))
	Loop

	'---Download the converted file from server---
	Dim newFileID As String = CStr(convertStatusResults.SelectToken("output.results[0].fileId"))
	DownloadFromServer(affinityToken, newFileID, "sample.pdf").Wait()

	Console.WriteLine("PDF file created successfully...!")
	Console.ReadKey()
End Sub
$vbLabelText   $csharpLabel

1. サーバーへのファイルのアップロード:

public static async Task<JObject> UploadToServer(string fileToUpload)
{
    FileInfo input = new FileInfo(fileToUpload);
    if (input == null)
    {
        throw new ArgumentException("Missing parameter input", nameof(input));
    }
    var fileName = input.Name;
    var endpoint = new Uri("https://api.accusoft.com/PCCIS/V1/WorkFile");
    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Content-Type", "application/octet-stream");
        using (var reader = new BinaryReader(input.OpenRead()))
        {
            var data = reader.ReadBytes((int)reader.BaseStream.Length);
            var results = await client.UploadDataTaskAsync(endpoint, "POST", data);
            string getResult = Encoding.ASCII.GetString(results);
            return JObject.Parse(getResult);
        }
    }
}
public static async Task<JObject> UploadToServer(string fileToUpload)
{
    FileInfo input = new FileInfo(fileToUpload);
    if (input == null)
    {
        throw new ArgumentException("Missing parameter input", nameof(input));
    }
    var fileName = input.Name;
    var endpoint = new Uri("https://api.accusoft.com/PCCIS/V1/WorkFile");
    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Content-Type", "application/octet-stream");
        using (var reader = new BinaryReader(input.OpenRead()))
        {
            var data = reader.ReadBytes((int)reader.BaseStream.Length);
            var results = await client.UploadDataTaskAsync(endpoint, "POST", data);
            string getResult = Encoding.ASCII.GetString(results);
            return JObject.Parse(getResult);
        }
    }
}
Public Shared Async Function UploadToServer(ByVal fileToUpload As String) As Task(Of JObject)
	Dim input As New FileInfo(fileToUpload)
	If input Is Nothing Then
		Throw New ArgumentException("Missing parameter input", NameOf(input))
	End If
	Dim fileName = input.Name
	Dim endpoint = New Uri("https://api.accusoft.com/PCCIS/V1/WorkFile")
	Using client = New WebClient()
		client.Headers.Add("acs-api-key", ApiKey)
		client.Headers.Add("Content-Type", "application/octet-stream")
		Using reader = New BinaryReader(input.OpenRead())
			Dim data = reader.ReadBytes(CInt(reader.BaseStream.Length))
			Dim results = Await client.UploadDataTaskAsync(endpoint, "POST", data)
			Dim getResult As String = Encoding.ASCII.GetString(results)
			Return JObject.Parse(getResult)
		End Using
	End Using
End Function
$vbLabelText   $csharpLabel

2. アップロードされたファイルをPDFに変換:

public static async Task<JObject> Convert(string affinityToken, string fileID)
{
    var endpoint = new Uri("https://api.accusoft.com/v2/contentConverters");
    using (var client = new WebClient())
    {
        client.Headers.Add("Content-Type", "application/json");
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        JObject myJson =
            new JObject(
                new JProperty("input",
                    new JObject(
                        new JProperty("sources",
                            new JArray(
                                new JObject(
                                    new JProperty("fileId", fileID)
                                )
                            )
                        ),
                        new JProperty("dest",
                            new JObject(
                                new JProperty("format", "pdf")
                            )
                        )
                    )
                )
            );
        string results = await client.UploadStringTaskAsync(endpoint, "POST", myJson.ToString());
        return JObject.Parse(results);
    }
}
public static async Task<JObject> Convert(string affinityToken, string fileID)
{
    var endpoint = new Uri("https://api.accusoft.com/v2/contentConverters");
    using (var client = new WebClient())
    {
        client.Headers.Add("Content-Type", "application/json");
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        JObject myJson =
            new JObject(
                new JProperty("input",
                    new JObject(
                        new JProperty("sources",
                            new JArray(
                                new JObject(
                                    new JProperty("fileId", fileID)
                                )
                            )
                        ),
                        new JProperty("dest",
                            new JObject(
                                new JProperty("format", "pdf")
                            )
                        )
                    )
                )
            );
        string results = await client.UploadStringTaskAsync(endpoint, "POST", myJson.ToString());
        return JObject.Parse(results);
    }
}
Public Shared Async Function Convert(ByVal affinityToken As String, ByVal fileID As String) As Task(Of JObject)
	Dim endpoint = New Uri("https://api.accusoft.com/v2/contentConverters")
	Using client = New WebClient()
		client.Headers.Add("Content-Type", "application/json")
		client.Headers.Add("acs-api-key", ApiKey)
		client.Headers.Add("Accusoft-Affinity-Token", affinityToken)
		Dim myJson As New JObject(New JProperty("input", New JObject(New JProperty("sources", New JArray(New JObject(New JProperty("fileId", fileID)))), New JProperty("dest", New JObject(New JProperty("format", "pdf"))))))
		Dim results As String = Await client.UploadStringTaskAsync(endpoint, "POST", myJson.ToString())
		Return JObject.Parse(results)
	End Using
End Function
$vbLabelText   $csharpLabel

次のJSONは、myJsonオブジェクトの結果値です。

{
  "input": {
    "sources": 
    [
      {"fileId": "Auto Generated FileId Value"}
    ],
    "dest": {
      "format": "pdf"
    }
  }
}

変換が完了しているか状態を確認

public static async Task<JObject> ConvertStatus(string processId, string affinityToken)
{
    string endpoint = "https://api.accusoft.com/v2/contentConverters/" + processId;
    using (var client = new WebClient())
    {
        client.BaseAddress = endpoint;
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        string results = await client.DownloadStringTaskAsync(endpoint);
        return JObject.Parse(results);
    }
}
public static async Task<JObject> ConvertStatus(string processId, string affinityToken)
{
    string endpoint = "https://api.accusoft.com/v2/contentConverters/" + processId;
    using (var client = new WebClient())
    {
        client.BaseAddress = endpoint;
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        string results = await client.DownloadStringTaskAsync(endpoint);
        return JObject.Parse(results);
    }
}
Public Shared Async Function ConvertStatus(ByVal processId As String, ByVal affinityToken As String) As Task(Of JObject)
	Dim endpoint As String = "https://api.accusoft.com/v2/contentConverters/" & processId
	Using client = New WebClient()
		client.BaseAddress = endpoint
		client.Headers.Add("acs-api-key", ApiKey)
		client.Headers.Add("Accusoft-Affinity-Token", affinityToken)
		Dim results As String = Await client.DownloadStringTaskAsync(endpoint)
		Return JObject.Parse(results)
	End Using
End Function
$vbLabelText   $csharpLabel

3. サーバーから変換済みファイルをダウンロード

public static async Task DownloadFromServer(string affinityToken, string fileId, string outfile)
{
    var endpoint = new Uri("https://api.accusoft.com/PCCIS/V1/WorkFile/" + fileId);

    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        FileInfo output = new FileInfo(outfile);

        using (var writeStream = output.Create())
        {
            var results = await client.DownloadDataTaskAsync(endpoint);
            await writeStream.WriteAsync(results, 0, results.Length);
        }
    }
}
public static async Task DownloadFromServer(string affinityToken, string fileId, string outfile)
{
    var endpoint = new Uri("https://api.accusoft.com/PCCIS/V1/WorkFile/" + fileId);

    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        FileInfo output = new FileInfo(outfile);

        using (var writeStream = output.Create())
        {
            var results = await client.DownloadDataTaskAsync(endpoint);
            await writeStream.WriteAsync(results, 0, results.Length);
        }
    }
}
Public Shared Async Function DownloadFromServer(ByVal affinityToken As String, ByVal fileId As String, ByVal outfile As String) As Task
	Dim endpoint = New Uri("https://api.accusoft.com/PCCIS/V1/WorkFile/" & fileId)

	Using client = New WebClient()
		client.Headers.Add("acs-api-key", ApiKey)
		client.Headers.Add("Accusoft-Affinity-Token", affinityToken)
		Dim output As New FileInfo(outfile)

		Using writeStream = output.Create()
			Dim results = Await client.DownloadDataTaskAsync(endpoint)
			Await writeStream.WriteAsync(results, 0, results.Length)
		End Using
	End Using
End Function
$vbLabelText   $csharpLabel

上記の例は多くの労力を要します! 負荷を最小限に抑えるために、Accusoftは.NETライブラリAccusoft.PrizmDocServerSDKを導入しました。これはPrizmDoc Server REST APIをラップするものです。 .NETプロジェクトでこのライブラリをインストールし使用する方法を見てみましょう

Accusoft.PrizmDocServerSDKのインストール

ラッパーをインストールする方法は2つあります。

  • パッケージマネージャコンソールを使っている場合:

パッケージマネージャコンソールを使っている場合は次のコマンドを実行します:

```shell
Install-Package Accusoft.PrizmDocServerSDK
```
  • ソリューションのパッケージの管理:

NuGetパッケージマネージャーのGUIを使用している場合は、検索バーでAccusoft.PrizmDocServerSDKを検索してインストールします。

これでAccusoft.PrizmDocServer名前空間に簡単にアクセスして使用することができます。

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer;
Imports Accusoft.PrizmDocServer
$vbLabelText   $csharpLabel

class="tutorial-segment-title">How To Tutorials

2. IronPDF対PrizmDoc Viewerコード比較

両コンポーネントの紹介とインストールを読んだ後、今度は両コンポーネントで作業する時です。 これにより、いくつかのユースケースを採用し、両コンポーネントを使用してそれを実装します。 これにより、両方のプログラミング構造を簡単に理解し、どちらがプロジェクトに最適か結論を出す方法が見つかることを願っています。


3. HTMLをPDFファイルに変換

最初の比較において、myWebPage.htmlという名前のウェブページを持ち、そこからPDFファイルを作成し、ターゲットの場所に保存するユースケースを取り上げます。

3.1. IronPDF HTMLをPDFに変換

using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Render HTML file to PDF
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Render HTML file to PDF
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
Imports IronPdf

Shared Sub Main(ByVal args() As String)
	' Create rendering converter
	Dim converter = New ChromePdfRenderer()
	' Render HTML file to PDF
	Dim PDF = converter.RenderHTMLFileAsPdf("myWebPage.html")
	' Save to target location
	PDF.SaveAs("sample.pdf")
End Sub
$vbLabelText   $csharpLabel

上記のコードはsample.pdfファイルを作成し、プロジェクトのbin>debugフォルダーに保存します。

また、PDF.SaveAs("E:/sample.pdf");のように任意のパスを指定することもできます。

IronPDFを使用してPDFファイルを扱う方法の詳細を読む

今度は、同じタスクをPrizmDoc Viewerを使って行い、比較が容易になるようにします。

3.2. PrizmDoc Viewer HTMLをPDFに変換

PrizmDoc ViewerのインストールではすでにAccusoft API Keyを取得する方法について説明しましたが、今度はその使い方を見てみます。

まず、PrizmDocサーバーへのリクエストを送信し、そこからレスポンスを受け取ります。 このプロセスには時間がかかるため、非同期プログラミングを使用する必要があります。

注意: PrizmDoc Viewerのクラウドサービスを使用してPDFファイルを作成する際には、システムがインターネットに接続されていることを確認してください。

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ChromePdfRenderer().GetAwaiter().GetResult();
}

private static async Task ChromePdfRenderer()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY");
    // Specify HTML file and convert it to a PDF.
    ConversionResult result = await prizmDocServer.ConvertToPdfAsync("myWebPage.html");
    // Save PDF file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ChromePdfRenderer().GetAwaiter().GetResult();
}

private static async Task ChromePdfRenderer()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY");
    // Specify HTML file and convert it to a PDF.
    ConversionResult result = await prizmDocServer.ConvertToPdfAsync("myWebPage.html");
    // Save PDF file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
Imports Accusoft.PrizmDocServer
Imports Accusoft.PrizmDocServer.Conversion

Shared Sub Main(ByVal args() As String)
	ChromePdfRenderer().GetAwaiter().GetResult()
End Sub

Private Shared Async Function ChromePdfRenderer() As Task
	' Instantiate PrizmDocServerClient object
	Dim prizmDocServer = New PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY")
	' Specify HTML file and convert it to a PDF.
	Dim result As ConversionResult = Await prizmDocServer.ConvertToPdfAsync("myWebPage.html")
	' Save PDF file to the target location
	Await result.RemoteWorkFile.SaveAsync("sample.pdf")
End Function
$vbLabelText   $csharpLabel

PrizmDoc Viewerを使って作業する方法の詳細を読む

3.3. HTMLをPDFに変換するコードの比較

これらの例から見ると、IronPDFを用いる方がPDFファイルを作成するのがより簡単で、時間もあまりかからないアプローチであることがわかります。


4. 画像をPDFに変換

この比較では、GoogleLogo画像を使用してPDFファイルを作成し、プロジェクトのdebugフォルダーに保存します。 IronPDFで始めましょう。

4.1. IronPDF画像をPDFに変換

using IronPdf;

static void Main(string[] args)
{
    // Specify the image to be converted
    using var converted = ImageToPdfConverter.ImageToPdf("google.png");
    // Save PDF file to the target location
    converted.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Specify the image to be converted
    using var converted = ImageToPdfConverter.ImageToPdf("google.png");
    // Save PDF file to the target location
    converted.SaveAs("sample.pdf");
}
Imports IronPdf

Shared Sub Main(ByVal args() As String)
	' Specify the image to be converted
	Dim converted = ImageToPdfConverter.ImageToPdf("google.png")
	' Save PDF file to the target location
	converted.SaveAs("sample.pdf")
End Sub
$vbLabelText   $csharpLabel

出力:

上記コードを使用して新しく作成されたPDFファイルsample.pdfのスクリーンショット:

class="content-img-align-center">
class="center-image-wrapper"> Iron 2 related to 4.1. IronPDF画像をPDFに変換

IronPDFを使用して、画像からPDFファイルを作成するのがどれほど簡単かおわかりいただけます。 今度は、PrizmDoc Viewerを使用して同じタスクを実行し、その生成されたPDFファイルを確認します。

4.2. PrizmDoc Viewer画像をPDFに変換

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ImageToPDF().GetAwaiter().GetResult();
}

private static async Task ImageToPDF()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY");
    // Specify the image to be converted
    ConversionResult results = await prizmDocServer.ConvertToPdfAsync("google.png");
    // Save PDF file to the target location
    await results.RemoteWorkFile.SaveAsync("sample.pdf");
}
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ImageToPDF().GetAwaiter().GetResult();
}

private static async Task ImageToPDF()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY");
    // Specify the image to be converted
    ConversionResult results = await prizmDocServer.ConvertToPdfAsync("google.png");
    // Save PDF file to the target location
    await results.RemoteWorkFile.SaveAsync("sample.pdf");
}
Imports Accusoft.PrizmDocServer
Imports Accusoft.PrizmDocServer.Conversion

Shared Sub Main(ByVal args() As String)
	ImageToPDF().GetAwaiter().GetResult()
End Sub

Private Shared Async Function ImageToPDF() As Task
	' Instantiate PrizmDocServerClient object
	Dim prizmDocServer = New PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY")
	' Specify the image to be converted
	Dim results As ConversionResult = Await prizmDocServer.ConvertToPdfAsync("google.png")
	' Save PDF file to the target location
	Await results.RemoteWorkFile.SaveAsync("sample.pdf")
End Function
$vbLabelText   $csharpLabel

出力: This screenshot is of a newly created PDF file sample.pdf from the above code:

class="content-img-align-center">
class="center-image-wrapper"> Prizm 2 related to 4.2. PrizmDoc Viewer画像をPDFに変換

4.3. 画像をPDFに変換するコードの比較

IronPDFを使用すれば、2つの簡単なコード行を書くだけで済むことがわかります。 一方PrizmDocサーバーを使用する場合、非同期プログラミングと共に多くのコード行を書く必要があります。 IronPDFの出力は、自動的に使用可能なフルページドキュメントも提供します。


5. PDFファイルのマージ

この比較では、3つのPDFファイルA.pdfB.pdfC.pdfを持っていると仮定します。 それらを1つのPDFファイルに統合したいと考えていますが、これを両方のコンポーネントを使用して行うことができます。 まず、IronPDFを使用してこのタスクを実行する方法を見てみましょう。

5.1. IronPDFでPDFファイルをマージ

using IronPdf;
using System.Collections.Generic;

static void Main(string[] args)
{
    // Create rendering converter  
    var Renderer = new IronPdf.ChromePdfRenderer();
    // Create a list of pdf files
    var PDFs = new List<PdfDocument>();
    PDFs.Add(PdfDocument.FromFile("A.pdf"));
    PDFs.Add(PdfDocument.FromFile("B.pdf"));
    PDFs.Add(PdfDocument.FromFile("C.pdf"));
    // Merge the list of pdf file
    using PdfDocument PDF = PdfDocument.Merge(PDFs);
    // Save merged file to the target location
    PDF.SaveAs("sample.pdf");

    foreach(var pdf in PDFs)
    {
        pdf.Dispose();
    }
}
using IronPdf;
using System.Collections.Generic;

static void Main(string[] args)
{
    // Create rendering converter  
    var Renderer = new IronPdf.ChromePdfRenderer();
    // Create a list of pdf files
    var PDFs = new List<PdfDocument>();
    PDFs.Add(PdfDocument.FromFile("A.pdf"));
    PDFs.Add(PdfDocument.FromFile("B.pdf"));
    PDFs.Add(PdfDocument.FromFile("C.pdf"));
    // Merge the list of pdf file
    using PdfDocument PDF = PdfDocument.Merge(PDFs);
    // Save merged file to the target location
    PDF.SaveAs("sample.pdf");

    foreach(var pdf in PDFs)
    {
        pdf.Dispose();
    }
}
Imports IronPdf
Imports System.Collections.Generic

Shared Sub Main(ByVal args() As String)
	' Create rendering converter  
	Dim Renderer = New IronPdf.ChromePdfRenderer()
	' Create a list of pdf files
	Dim PDFs = New List(Of PdfDocument)()
	PDFs.Add(PdfDocument.FromFile("A.pdf"))
	PDFs.Add(PdfDocument.FromFile("B.pdf"))
	PDFs.Add(PdfDocument.FromFile("C.pdf"))
	' Merge the list of pdf file
	Using PDF As PdfDocument = PdfDocument.Merge(PDFs)
		' Save merged file to the target location
		PDF.SaveAs("sample.pdf")
	
'INSTANT VB NOTE: The variable pdf was renamed since Visual Basic will not allow local variables with the same name as parameters or other local variables:
		For Each .pdf_Conflict In PDFs
			.pdf_Conflict.Dispose()
		Next pdf_Conflict
	End Using
End Sub
$vbLabelText   $csharpLabel

上記のコードは、A.pdfB.pdfC.pdfの組み合わせであるsample.pdfファイルを作成します。

今度は、PrizmDoc Viewerを使って同じタスクを行います。

5.2. PrizmDoc ViewerでPDFファイルをマージ

using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfMerge().GetAwaiter().GetResult();
}

private static async Task PdfMerge()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY");
    // Pass the list of pdf files to PrizmDoc Server
    ConversionResult result = await prizmDocServer.CombineToPdfAsync(
        new []
        {
            new ConversionSourceDocument("A.pdf"),
            new ConversionSourceDocument("B.pdf"),
            new ConversionSourceDocument("C.pdf"),
        });
    // Save merged file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfMerge().GetAwaiter().GetResult();
}

private static async Task PdfMerge()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY");
    // Pass the list of pdf files to PrizmDoc Server
    ConversionResult result = await prizmDocServer.CombineToPdfAsync(
        new []
        {
            new ConversionSourceDocument("A.pdf"),
            new ConversionSourceDocument("B.pdf"),
            new ConversionSourceDocument("C.pdf"),
        });
    // Save merged file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
Imports System.Threading.Tasks
Imports Accusoft.PrizmDocServer
Imports Accusoft.PrizmDocServer.Conversion

Shared Sub Main(ByVal args() As String)
	PdfMerge().GetAwaiter().GetResult()
End Sub

Private Shared Async Function PdfMerge() As Task
	' Instantiate PrizmDocServerClient object
	Dim prizmDocServer = New PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY")
	' Pass the list of pdf files to PrizmDoc Server
	Dim result As ConversionResult = Await prizmDocServer.CombineToPdfAsync( {
		New ConversionSourceDocument("A.pdf"),
		New ConversionSourceDocument("B.pdf"),
		New ConversionSourceDocument("C.pdf")
	})
	' Save merged file to the target location
	Await result.RemoteWorkFile.SaveAsync("sample.pdf")
End Function
$vbLabelText   $csharpLabel

上記のコードでもまた、A.pdfB.pdfC.pdfの組み合わせとしてsample.pdfファイルを作成します。


6. PDFヘッダーとフッター

この比較で、myWebPage.htmlという名前の簡単なWebページを持っており、次のHTMLとCSSがありますと仮定します。

<html>
<head>
    <style>
        li {
            font-size: x-large;
            color: rgba(156, 89, 13, 0.897);
            list-style: square;
        }
    </style>
</head>
<body>
    <h1 style="text-align: center;">Hello World..!</h1>
    <h1>Main Menu</h1>
    <ul>
        <li>SubMenu 1</li>
        <li>SubMenu 2</li>
        <li>SubMenu 3</li>
        <li>SubMenu 4</li>
        <li>SubMenu 5</li>
    </ul>
</body>
</html>
<html>
<head>
    <style>
        li {
            font-size: x-large;
            color: rgba(156, 89, 13, 0.897);
            list-style: square;
        }
    </style>
</head>
<body>
    <h1 style="text-align: center;">Hello World..!</h1>
    <h1>Main Menu</h1>
    <ul>
        <li>SubMenu 1</li>
        <li>SubMenu 2</li>
        <li>SubMenu 3</li>
        <li>SubMenu 4</li>
        <li>SubMenu 5</li>
    </ul>
</body>
</html>
HTML

このWebページをPDFファイルに変換し、次のヘッダーとフッターのプロパティを設定します:

  • ヘッダーの左側にページタイトルを設定、
  • ヘッダーの右側に日時を設定
  • フッターの右側にページ番号/全ページを設定

まず、IronPDFを使用してヘッダーとフッターを設定する方法を見てみます。

6.1. IronPDF PDFヘッダーとフッター

PDFファイルのヘッダーとフッターを扱うために、IronPDFはChromePdfRendererクラスにRenderingOptionsというプロパティを提供します。これを以下のように使用できます:

  • ヘッダー:

    ChromePdfRenderer_Obj.RenderingOptions.TextHeader = new TextHeaderFooter();
    ChromePdfRenderer_Obj.RenderingOptions.TextHeader = new TextHeaderFooter();
    ChromePdfRenderer_Obj.RenderingOptions.TextHeader = New TextHeaderFooter()
    $vbLabelText   $csharpLabel
  • フッター:

    ChromePdfRenderer_Obj.RenderingOptions.TextFooter = new TextHeaderFooter();
    ChromePdfRenderer_Obj.RenderingOptions.TextFooter = new TextHeaderFooter();
    ChromePdfRenderer_Obj.RenderingOptions.TextFooter = New TextHeaderFooter()
    $vbLabelText   $csharpLabel

次のプロパティをTextHeaderFooter()を初期化しながら設定可能です:

  • CenterText ヘッダーまたはフッターの中央にテキストを印刷します。
  • LeftText ヘッダーまたはフッターの左側にテキストを印刷します。
  • RightText ヘッダーまたはフッターの右側にテキストを印刷します。
  • DrawDividerLine ページコンテンツとヘッダーまたはフッターを分ける線を引きます。
  • FontFamily ヘッダーまたはフッターのフォントファミリーを指定します。
  • FontSize ヘッダーまたはフッターのフォントサイズを指定します。
  • Spacing ページコンテンツとヘッダーまたはフッターの間隔を調整します。

ヘッダーまたはフッターのコンテンツを設定するのに非常に役立つ事前定義された属性がいくつかあります。 以下のように波かっこ{ }で書くことができます:

  • {page} 現在のページ番号をヘッダーまたはフッターに印刷します。
  • {total-pages} 全ページ数をヘッダーまたはフッターに印刷します。
  • {url} レンダリングされたページのURLを印刷します。
  • {date} 現在の日付をヘッダーまたはフッターに印刷します。
  • {time} 現在の時刻をヘッダーまたはフッターに印刷します。
  • {html-title} レンダリングされたウェブページのタイトルをヘッダーまたはフッターに印刷します。
  • {pdf-title} ドキュメントタイトルをヘッダーまたはフッターに印刷します。

IronPDFを使ってヘッダーやフッターを操作する方法の詳細を読む

次に、このユースケースを実装し、上記のプロパティを使用してPDFファイルのヘッダーとフッターを設定する方法を示す例を見てみます。

using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Setting Header properties
    converter.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        DrawDividerLine = true,
        LeftText = "Page Title",
        RightText = "{date} {time}",
        FontSize = 13
    };
    // Setting footer properties
    converter.RenderingOptions.TextFooter = new TextHeaderFooter()
    {
        RightText = "Page {page} of {total-pages}",
        FontSize = 12
    };
    // Specify the file to be converted
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Setting Header properties
    converter.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        DrawDividerLine = true,
        LeftText = "Page Title",
        RightText = "{date} {time}",
        FontSize = 13
    };
    // Setting footer properties
    converter.RenderingOptions.TextFooter = new TextHeaderFooter()
    {
        RightText = "Page {page} of {total-pages}",
        FontSize = 12
    };
    // Specify the file to be converted
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
Imports IronPdf

Shared Sub Main(ByVal args() As String)
	' Create rendering converter
	Dim converter = New ChromePdfRenderer()
	' Setting Header properties
	converter.RenderingOptions.TextHeader = New TextHeaderFooter() With {
		.DrawDividerLine = True,
		.LeftText = "Page Title",
		.RightText = "{date} {time}",
		.FontSize = 13
	}
	' Setting footer properties
	converter.RenderingOptions.TextFooter = New TextHeaderFooter() With {
		.RightText = "Page {page} of {total-pages}",
		.FontSize = 12
	}
	' Specify the file to be converted
	Dim PDF = converter.RenderHTMLFileAsPdf("myWebPage.html")
	' Save to target location
	PDF.SaveAs("sample.pdf")
End Sub
$vbLabelText   $csharpLabel

出力: The screenshot of the newly created PDF file sample.pdf by the above code:

class="content-img-align-center">
class="center-image-wrapper"> Iron Hdr Ftr related to 6.1. IronPDF PDFヘッダーとフッター

IronPDFを用いて、直感的な言語を使いながらPDFファイルを作成する際に、ヘッダーとフッターを操作するのがどれほど簡単であるかをおわかりいただけます。 今度は、PrizmDoc Viewerを使ってヘッダーとフッターを設定する方法を見てみます。

6.2. PrizmDoc Viewer PDFヘッダーとフッター

PrizmDoc ViewerはHeaderFooterOptionsクラスを提供し、以下のプロパティでヘッダーやフッターを扱います:

  • Lines ヘッダーやフッターの行を指定します(以下の例を理解するとうまく理解できます)。各行には以下のプロパティがあります:
    • Left ヘッダーやフッター行の左側にテキストを印刷します。
    • Center ヘッダーやフッター行の中央にテキストを印刷します。
    • Right ヘッダーやフッター行の右側にテキストを印刷します。
  • FontFamily ヘッダーやフッターのテキストのフォントファミリーを指定します。
  • FontSize ヘッダーやフッターのテキストのフォントサイズを指定します。
  • Color ヘッダーやフッターのテキストの色を指定します。

PrizmDocサーバーを使用してPDFページのヘッダーやフッターを設定する方法の詳細を読む

以下のプロパティを使用して、ユースケースを実装する方法を見てみましょう。

using System.Threading.Tasks;
using System.Collections.Generic;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    SetHeaderFooter().GetAwaiter().GetResult();
}

private static async Task SetHeaderFooter()
{
    // Instantiate PrizmDocServerClient object with Header and footer properties
    var prizmDocServer = new PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY");

    ConversionResult result = await prizmDocServer.ConvertToPdfAsync(
        "myWebPage.html",
        header: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Left = "Page Title", Right = DateTime.Now.ToString() }
            },
        },
        footer: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Right = "Page {{pageNumber}} of {{pageCount}}" },
            },
        });

    // Save to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using System.Threading.Tasks;
using System.Collections.Generic;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    SetHeaderFooter().GetAwaiter().GetResult();
}

private static async Task SetHeaderFooter()
{
    // Instantiate PrizmDocServerClient object with Header and footer properties
    var prizmDocServer = new PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY");

    ConversionResult result = await prizmDocServer.ConvertToPdfAsync(
        "myWebPage.html",
        header: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Left = "Page Title", Right = DateTime.Now.ToString() }
            },
        },
        footer: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Right = "Page {{pageNumber}} of {{pageCount}}" },
            },
        });

    // Save to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
Imports System.Threading.Tasks
Imports System.Collections.Generic
Imports Accusoft.PrizmDocServer
Imports Accusoft.PrizmDocServer.Conversion

Shared Sub Main(ByVal args() As String)
	SetHeaderFooter().GetAwaiter().GetResult()
End Sub

Private Shared Async Function SetHeaderFooter() As Task
	' Instantiate PrizmDocServerClient object with Header and footer properties
	Dim prizmDocServer = New PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY")

	Dim result As ConversionResult = Await prizmDocServer.ConvertToPdfAsync("myWebPage.html", header:= New HeaderFooterOptions With {.Lines = New List(Of HeaderFooterLine) _
		From {
			New HeaderFooterLine With {
				.Left = "Page Title",
				.Right = DateTime.Now.ToString()
			}
		}
		},
		footer:= New HeaderFooterOptions With {
		.Lines = New List(Of HeaderFooterLine) From {
			New HeaderFooterLine With {.Right = "Page {{pageNumber}} of {{pageCount}}"}
		}
		})

	' Save to the target location
	Await result.RemoteWorkFile.SaveAsync("sample.pdf")
End Function
$vbLabelText   $csharpLabel

出力:

上記コードにより作成された新しいPDFファイルのスクリーンショット:

class="content-img-align-center">
class="center-image-wrapper"> Prizm Hdr Ftr related to 6.2. PrizmDoc Viewer PDFヘッダーとフッター

6.3. PDFヘッダーとフッターのコード比較

IronPDF は、PrizmDoc Viewer と比較して、シンプルなプログラミング構造でヘッダーとフッターのプロパティを設定するためのより多くの機能を提供していることがわかります。 また、IronPDFによって生成されたPDFファイルは、PrizmDoc Viewerによって生成されたファイルよりも読みやすく魅力的であることが示唆されています。


7. PDFページを画像に変換

もう一つのユースケース: Sample_PDF.pdfという名前のシンプルなPDFファイルがあり、2ページだけからなっています。

Page1 Page2
class="center-image-wrapper"> Page 1 related to 7. PDFページを画像に変換
class="center-image-wrapper"> Page 1 related to 7. PDFページを画像に変換

そして各ページの画像を作成する必要があります。 まず、IronPDFを使用してこのタスクを実行する方法を見てみましょう。

7.1. IronPDF PDFを画像に変換

using IronPdf;

static void Main(string[] args)
{
    // Specify file to be converted
    var pdf = PdfDocument.FromFile("Sample_PDF.pdf");
    // Save images to the target location
    pdf.RasterizeToImageFiles("image_*.png");
}
using IronPdf;

static void Main(string[] args)
{
    // Specify file to be converted
    var pdf = PdfDocument.FromFile("Sample_PDF.pdf");
    // Save images to the target location
    pdf.RasterizeToImageFiles("image_*.png");
}
Imports IronPdf

Shared Sub Main(ByVal args() As String)
	' Specify file to be converted
	Dim pdf = PdfDocument.FromFile("Sample_PDF.pdf")
	' Save images to the target location
	pdf.RasterizeToImageFiles("image_*.png")
End Sub
$vbLabelText   $csharpLabel

出力:

上記コードは次の2つの.png画像を作成します:

Page1 Image Page2 Image
class="center-image-wrapper"> Iron Generated Image1 related to 7.1. IronPDF PDFを画像に変換
class="center-image-wrapper"> Iron Generated Image2 related to 7.1. IronPDF PDFを画像に変換

IronPDFを使用して、各PDFページの画像を作成するのがどれほど簡単かがわかります。 今度は、PrizmDoc Viewerを使って同じタスクを行います。

7.2. PrizmDoc Viewer PDFを画像に変換

using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfToImage().GetAwaiter().GetResult();
}

private static async Task PdfToImage()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY");
    // Convert PDF file to images
    IEnumerable<ConversionResult> results = await prizmDocServer.ConvertAsync("Sample_PDF.pdf", DestinationFileFormat.Png);

    // Save each image.
    for (int i = 0; i < results.Count(); i++)
    {
        await results.ElementAt(i).RemoteWorkFile.SaveAsync($"page-{i + 1}.png");
    }
}
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfToImage().GetAwaiter().GetResult();
}

private static async Task PdfToImage()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY");
    // Convert PDF file to images
    IEnumerable<ConversionResult> results = await prizmDocServer.ConvertAsync("Sample_PDF.pdf", DestinationFileFormat.Png);

    // Save each image.
    for (int i = 0; i < results.Count(); i++)
    {
        await results.ElementAt(i).RemoteWorkFile.SaveAsync($"page-{i + 1}.png");
    }
}
Imports System.Linq
Imports System.Collections.Generic
Imports System.Threading.Tasks
Imports Accusoft.PrizmDocServer
Imports Accusoft.PrizmDocServer.Conversion

Shared Sub Main(ByVal args() As String)
	PdfToImage().GetAwaiter().GetResult()
End Sub

Private Shared Async Function PdfToImage() As Task
	' Instantiate PrizmDocServerClient object
	Dim prizmDocServer = New PrizmDocServerClient("https://api.accusoft.com", "Your-API-KEY")
	' Convert PDF file to images
	Dim results As IEnumerable(Of ConversionResult) = Await prizmDocServer.ConvertAsync("Sample_PDF.pdf", DestinationFileFormat.Png)

	' Save each image.
	For i As Integer = 0 To results.Count() - 1
		Await results.ElementAt(i).RemoteWorkFile.SaveAsync($"page-{i + 1}.png")
	Next i
End Function
$vbLabelText   $csharpLabel

出力:

上記コードもまた、次の2つの.png画像を作成します:

Page1 Page2
class="center-image-wrapper"> Prizm Generated Image1 related to 7.2. PrizmDoc Viewer PDFを画像に変換
class="center-image-wrapper"> Prizm Generated Image2 related to 7.2. PrizmDoc Viewer PDFを画像に変換

7.3. PDFを画像に変換するコードの比較

PrizmDoc Viewerと比較して、IronPDFを使用することで、各ページの画像を少ないコード行数で簡単に作成することができ、ページを繰り返し処理する必要もありません。


IronPDFを使ってBootstrap 5とデータテーブルを使用する

IronPDFのChrome V8レンダリングエンジンは、Bootstrap 5のデータテーブルを例外的にサポートし、複雑な表形式のレイアウトを持つプロフェッショナルなPDFレポートを生成できます。 この例では、グラデーションヘッダー、ステータスバッジ、ページネーションコントロール、要約指標を示し、IronPDFのPrizmDocのような従来のPDFビューアに対する利点を示しています。

using IronPdf;

var renderer = new ChromePdfRenderer();

string dataTableReport = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .table-header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 10px 10px 0 0;
        }
        .table-container {
            background: white;
            border-radius: 0 0 10px 10px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.1);
            overflow: hidden;
        }
        .table th {
            background: #f8f9fa;
            font-weight: 600;
            text-transform: uppercase;
            font-size: 0.85rem;
            letter-spacing: 0.5px;
        }
        .status-badge {
            padding: 0.35em 0.65em;
            border-radius: 0.25rem;
            font-weight: 600;
            font-size: 0.75rem;
        }
        .trend-positive { color: #198754; font-weight: 700; }
        .trend-negative { color: #dc3545; font-weight: 700; }
        @media print {
            .table-container { page-break-inside: avoid; }
        }
    </style>
</head>
<body class='bg-light'>
    <div class='container py-5'>
        <div class='table-container'>
            <div class='table-header'>
                <div class='row align-items-center'>
                    <div class='col-md-8'>
                        <h2 class='mb-2'>Sales Performance Report</h2>
                        <p class='mb-0 opacity-75'>Q4 2024 Regional Analysis</p>
                    </div>
                    <div class='col-md-4 text-end'>
                        <div class='btn-group btn-group-sm'>
                            <button class='btn btn-light'>Export</button>
                            <button class='btn btn-light'>Filter</button>
                            <button class='btn btn-light'>Sort</button>
                        </div>
                    </div>
                </div>
            </div>

            <div class='p-4'>
                <div class='row mb-3'>
                    <div class='col-md-4'>
                        <input type='text' class='form-control form-control-sm' placeholder='Search regions...'>
                    </div>
                    <div class='col-md-8 text-end'>
                        <span class='text-muted small'>Showing 1-10 of 48 results</span>
                    </div>
                </div>

                <div class='table-responsive'>
                    <table class='table table-hover align-middle'>
                        <thead>
                            <tr>
                                <th>Region</th>
                                <th>Revenue</th>
                                <th>Units Sold</th>
                                <th>Growth</th>
                                <th>Status</th>
                                <th>Action</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>
                                    <strong>North America</strong><br>
                                    <small class='text-muted'>USA, Canada, Mexico</small>
                                </td>
                                <td>$4,280,000</td>
                                <td>12,450</td>
                                <td><span class='trend-positive'>↑ 18.5%</span></td>
                                <td><span class='status-badge bg-success text-white'>Exceeding</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Europe</strong><br>
                                    <small class='text-muted'>EU, UK, Switzerland</small>
                                </td>
                                <td>$3,650,000</td>
                                <td>10,890</td>
                                <td><span class='trend-positive'>↑ 12.3%</span></td>
                                <td><span class='status-badge bg-success text-white'>On Track</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Asia Pacific</strong><br>
                                    <small class='text-muted'>Japan, Australia, Singapore</small>
                                </td>
                                <td>$2,940,000</td>
                                <td>8,320</td>
                                <td><span class='trend-positive'>↑ 24.7%</span></td>
                                <td><span class='status-badge bg-primary text-white'>Growing</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Latin America</strong><br>
                                    <small class='text-muted'>Brazil, Argentina, Chile</small>
                                </td>
                                <td>$1,580,000</td>
                                <td>4,670</td>
                                <td><span class='trend-positive'>↑ 8.9%</span></td>
                                <td><span class='status-badge bg-info text-white'>Stable</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Middle East</strong><br>
                                    <small class='text-muted'>UAE, Saudi Arabia, Israel</small>
                                </td>
                                <td>$980,000</td>
                                <td>2,890</td>
                                <td><span class='trend-negative'>↓ 3.2%</span></td>
                                <td><span class='status-badge bg-warning text-dark'>Review</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                        </tbody>
                        <tfoot class='table-light'>
                            <tr>
                                <td><strong>Total</strong></td>
                                <td><strong>$13,430,000</strong></td>
                                <td><strong>39,220</strong></td>
                                <td><strong class='trend-positive'>↑ 14.8%</strong></td>
                                <td colspan='2'></td>
                            </tr>
                        </tfoot>
                    </table>
                </div>

                <div class='d-flex justify-content-between align-items-center mt-4'>
                    <div>
                        <select class='form-select form-select-sm' style='width: auto; display: inline-block;'>
                            <option>10 per page</option>
                            <option>25 per page</option>
                            <option>50 per page</option>
                        </select>
                    </div>
                    <nav>
                        <ul class='pagination pagination-sm mb-0'>
                            <li class='page-item disabled'><a class='page-link' href='#'>Previous</a></li>
                            <li class='page-item active'><a class='page-link' href='#'>1</a></li>
                            <li class='page-item'><a class='page-link' href='#'>2</a></li>
                            <li class='page-item'><a class='page-link' href='#'>3</a></li>
                            <li class='page-item'><a class='page-link' href='#'>Next</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
        </div>

        <div class='row g-3 mt-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-primary mb-1'>$13.4M</h3>
                        <small class='text-muted'>Total Revenue</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-success mb-1'>39,220</h3>
                        <small class='text-muted'>Units Sold</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-info mb-1'>14.8%</h3>
                        <small class='text-muted'>Growth Rate</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-warning mb-1'>5</h3>
                        <small class='text-muted'>Active Regions</small>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(dataTableReport);
pdf.SaveAs("data-table-report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string dataTableReport = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .table-header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 10px 10px 0 0;
        }
        .table-container {
            background: white;
            border-radius: 0 0 10px 10px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.1);
            overflow: hidden;
        }
        .table th {
            background: #f8f9fa;
            font-weight: 600;
            text-transform: uppercase;
            font-size: 0.85rem;
            letter-spacing: 0.5px;
        }
        .status-badge {
            padding: 0.35em 0.65em;
            border-radius: 0.25rem;
            font-weight: 600;
            font-size: 0.75rem;
        }
        .trend-positive { color: #198754; font-weight: 700; }
        .trend-negative { color: #dc3545; font-weight: 700; }
        @media print {
            .table-container { page-break-inside: avoid; }
        }
    </style>
</head>
<body class='bg-light'>
    <div class='container py-5'>
        <div class='table-container'>
            <div class='table-header'>
                <div class='row align-items-center'>
                    <div class='col-md-8'>
                        <h2 class='mb-2'>Sales Performance Report</h2>
                        <p class='mb-0 opacity-75'>Q4 2024 Regional Analysis</p>
                    </div>
                    <div class='col-md-4 text-end'>
                        <div class='btn-group btn-group-sm'>
                            <button class='btn btn-light'>Export</button>
                            <button class='btn btn-light'>Filter</button>
                            <button class='btn btn-light'>Sort</button>
                        </div>
                    </div>
                </div>
            </div>

            <div class='p-4'>
                <div class='row mb-3'>
                    <div class='col-md-4'>
                        <input type='text' class='form-control form-control-sm' placeholder='Search regions...'>
                    </div>
                    <div class='col-md-8 text-end'>
                        <span class='text-muted small'>Showing 1-10 of 48 results</span>
                    </div>
                </div>

                <div class='table-responsive'>
                    <table class='table table-hover align-middle'>
                        <thead>
                            <tr>
                                <th>Region</th>
                                <th>Revenue</th>
                                <th>Units Sold</th>
                                <th>Growth</th>
                                <th>Status</th>
                                <th>Action</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>
                                    <strong>North America</strong><br>
                                    <small class='text-muted'>USA, Canada, Mexico</small>
                                </td>
                                <td>$4,280,000</td>
                                <td>12,450</td>
                                <td><span class='trend-positive'>↑ 18.5%</span></td>
                                <td><span class='status-badge bg-success text-white'>Exceeding</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Europe</strong><br>
                                    <small class='text-muted'>EU, UK, Switzerland</small>
                                </td>
                                <td>$3,650,000</td>
                                <td>10,890</td>
                                <td><span class='trend-positive'>↑ 12.3%</span></td>
                                <td><span class='status-badge bg-success text-white'>On Track</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Asia Pacific</strong><br>
                                    <small class='text-muted'>Japan, Australia, Singapore</small>
                                </td>
                                <td>$2,940,000</td>
                                <td>8,320</td>
                                <td><span class='trend-positive'>↑ 24.7%</span></td>
                                <td><span class='status-badge bg-primary text-white'>Growing</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Latin America</strong><br>
                                    <small class='text-muted'>Brazil, Argentina, Chile</small>
                                </td>
                                <td>$1,580,000</td>
                                <td>4,670</td>
                                <td><span class='trend-positive'>↑ 8.9%</span></td>
                                <td><span class='status-badge bg-info text-white'>Stable</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Middle East</strong><br>
                                    <small class='text-muted'>UAE, Saudi Arabia, Israel</small>
                                </td>
                                <td>$980,000</td>
                                <td>2,890</td>
                                <td><span class='trend-negative'>↓ 3.2%</span></td>
                                <td><span class='status-badge bg-warning text-dark'>Review</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                        </tbody>
                        <tfoot class='table-light'>
                            <tr>
                                <td><strong>Total</strong></td>
                                <td><strong>$13,430,000</strong></td>
                                <td><strong>39,220</strong></td>
                                <td><strong class='trend-positive'>↑ 14.8%</strong></td>
                                <td colspan='2'></td>
                            </tr>
                        </tfoot>
                    </table>
                </div>

                <div class='d-flex justify-content-between align-items-center mt-4'>
                    <div>
                        <select class='form-select form-select-sm' style='width: auto; display: inline-block;'>
                            <option>10 per page</option>
                            <option>25 per page</option>
                            <option>50 per page</option>
                        </select>
                    </div>
                    <nav>
                        <ul class='pagination pagination-sm mb-0'>
                            <li class='page-item disabled'><a class='page-link' href='#'>Previous</a></li>
                            <li class='page-item active'><a class='page-link' href='#'>1</a></li>
                            <li class='page-item'><a class='page-link' href='#'>2</a></li>
                            <li class='page-item'><a class='page-link' href='#'>3</a></li>
                            <li class='page-item'><a class='page-link' href='#'>Next</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
        </div>

        <div class='row g-3 mt-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-primary mb-1'>$13.4M</h3>
                        <small class='text-muted'>Total Revenue</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-success mb-1'>39,220</h3>
                        <small class='text-muted'>Units Sold</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-info mb-1'>14.8%</h3>
                        <small class='text-muted'>Growth Rate</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-warning mb-1'>5</h3>
                        <small class='text-muted'>Active Regions</small>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(dataTableReport);
pdf.SaveAs("data-table-report.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

このコードは、グラデーションヘッダー、レスポンシブテーブル、ステータスバッジ、要約指標を備えた洗練されたデータテーブルレポートを生成します。 IronPDFのChromeレンダリングエンジンは、テーブルのホバー効果、バッジの色、ページネーションコントロールを含むすべてのBootstrapスタイリングを保持します - これらの機能は従来のPDFビューアをはるかに超えています。

PrizmDoc Viewerに対する主要な利点:

  • 変換なしでの直接HTML表のレンダリング
  • フルBootstrapコンポーネントのサポート
  • グラデーション背景と最新のCSS
  • 適切なページネーションを持つレスポンシブテーブルレイアウト

Bootstrap PDF生成に関する詳細は、HTMLをPDFに変換するBootstrapガイドをご覧ください。

8. ライセンス価格

上記の比較では、両方のコンポーネントの技術的な作業構造と提供される機能を見ました。 今度は、両方のコンポーネントのライセンス価格を見ていきます。 これは非常に重要です。なぜなら、私たちは常に最低の予算で要求を満たすために最善を尽くそうとするからです。

8.1. IronPDFライセンスオプション

IronPDFライセンスは一つのプロジェクトで1人の開発者の場合、$699から始まります。

あなたが会社や複数のクライアントに仕事を提供する代理店のエンジニアである場合、ライセンスは$699から始まり、チームの規模やプロジェクトの数に応じて調整が可能です。

次のライセンスは一度の支払いが必要です。

開発者数 価格
1-5 9
6-10 9
11-20 9
21-50 $1,199
無制限 ,199
  • 複数の拠点を持つ会社の場合、ライセンスは$1199から始まります。
  • SaaSサービスの場合、ライセンスは$1099から始まります。
  • ロイヤリティフリーのOEM再配布の場合、ライセンスは$1599から始まります。

注意: 上記のすべてのライセンスパッケージには1年間のサポートと更新が含まれています。

もっと読む IronPDFの提供されているすべてのライセンスパッケージについて。

8.2. PrizmDoc Viewerライセンスオプション

自社ホスティングオプション

サーバーを自分で管理する場合、ライセンスの価格は標準サポート付きで$7,900/年です。

もっと読む PrizmDoc Viewerのすべての提供パッケージ情報について。

クラウドベースオプション

このライセンスはPrizmDoc Viewerのクラウドベースサービスを対象とし、取引数に基づいてスケールされます。

用語:

取引とは、PrizmDoc Viewerサーバーにアクセスし、出力(結果のドキュメント)を取得することを意味します。

プリペイドバケットとは、一度の支払いで取引を得ることを意味し、有効期限がありません。

取引数 プリペイドバケット 月額 年間
200
1,000
2,000 9
6,000 4 9 ,859 (6,000取引/月)
12,000 4 9 ,179 (12,000取引/月)
25,000 9 9 ,459 (25,000取引/月)
50,000 ,199 9 ,789 (50,000取引/月)
100,000 $1,199 $1,199 ,989 (100,000取引/月)
200,000 ,549 ,699 ,188 (200,000取引/月)
300,000 ,299 ,199 ,188 (300,000取引/月)
400,000 ,049 ,699 ,188 (400,000取引/月)
500,000 ,799 ,199 ,188 (500,000取引/月)

class="tutorial-segment-title">チュートリアル簡易アクセス

class="tutorial-section">
class="row">
class="col-sm-4">
class="tutorial-image"> Html To Pdf Icon related to class=チュートリアル簡易アクセス" class="img-responsive add-shadow img-responsive img-popup" src="/img/svgs/html-to-pdf-icon.svg" loading="lazy">
class="col-sm-8">

C# IronPDFクイックスタートハンドブックを入手

私たちは.NET用のPDF開発を容易にするための無料のPDFリソースガイドを作成しました。一般的な機能のウォークスルーと、プロジェクトのためにC#やVB.NETでPDFを操作、編集、生成、保存するための例が含まれています。

ガイドをダウンロード
class="tutorial-section">
class="row">
class="col-sm-8">

IronPDF APIリファレンスを探索

IronPDF C#ライブラリのAPIリファレンスを探索しましょう。IronPDFのすべての機能、クラス、メソッドフィールド、ネームスペース、列挙の詳細を含んでいます。

APIリファレンスを表示
class="col-sm-4">
class="tutorial-image"> Documentation related to class=チュートリアル簡易アクセス" class="img-responsive add-shadow img-responsive img-popup" src="/img/svgs/documentation.svg" loading="lazy">

[{i:(Accusoft社のPrizmDoc Viewerはその所有者の登録商標です。 このサイトはAccusoft社のPrizmDoc Viewerと提携していません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。)}]

よくある質問

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

IronPDF の RenderHtmlAsPdf メソッドを使用して、HTML 文字列を PDF に変換できます。RenderHtmlFileAsPdf を使用して HTML ファイルを PDF に変換することもできます。

IronPDF を使用する利点は、PrizmDoc Viewer と比較してどのようなものですか?

IronPDF は、オフライン作業をサポートし、非同期プログラミングを必要としないシンプルなローカル PDF レンダリング ソリューションを提供します。対照的に、PrizmDoc Viewer は REST API を通じて動作し、リモートサーバーとのやり取りにインターネット接続を必要とします。

PDF ライブラリを使用して複数の PDF ドキュメントをマージできますか?

はい、IronPDF を使用して、MergePdf メソッドを使用して複数の PDF をマージし、ドキュメントをシームレスに結合できます。

IronPDF は、PDF から画像への変換をどのように処理しますか?

IronPDF は、組み込みメソッドを使用して PDF ページを画像に簡単に変換でき、他のソフトウェアと比較してスムーズなアプローチを提供します。

IronPDF のヘッダーとフッターのカスタマイズ オプションは何ですか?

IronPDF は、シンプルなプログラミング構造でヘッダーとフッターのプロパティを設定するための幅広い機能を提供し、ドキュメントを簡単にカスタマイズできます。

IronPDF はオフライン PDF 処理に適していますか?

はい、IronPDFはオフラインPDF処理をサポートしており、インターネット接続がなくても作業でき、リモートサーバーとの相互作用が必要な他のソリューションとは異なります。

IronPDF のライセンスの価格構造はどのようになっていますか?

IronPDF のライセンスは 1 プロジェクト 1 開発者で $699 から始まり、SaaS 向けのスケーラブルなオプションがあります。

IronPDF での開発は無料でできますか?

はい、IronPDF は開発には無料で使用でき、30 日間のデプロイメント トライアルがあり、プロジェクトのライブ展開が可能です。

PrizmDoc Viewer は HTML から PDF への変換をどのように処理しますか?

PrizmDoc Viewer は、非同期プログラミングとリモートサーバーとのやり取りのためのインターネット接続を必要とする REST API を使用して HTML を PDF に変換します。

PrizmDoc Server をホストするためのシステム要件は何ですか?

Self-hosting PrizmDoc Server には、処理ニーズに対応するために最低 32 GB の RAM と 4 コアの CPU が必要です。

IronPDF は .NET 10 と完全に互換性がありますか?

はい。IronPDFは.NET 10(および.NET 9、8、7、6、.NET Core、.NET Standard、.NET Framework)をサポートしています。NuGet経由でインストールでき、Windows、Linux、macOSで動作します。また、Chromeベースのネイティブレンダラーを使用することで、.NET 10アプリケーションでピクセルパーフェクトなHTMLからPDFへのレンダリングを実現します。

Curtis Chau
テクニカルライター

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

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