IRONSOFTWAREHOME
ビデオ

How to Flatten PDF Images in C# with IronPDF

Curtis Chau
Curtis Chau
Updated: 2026年5月18日

なぜCraftMyPDFからIronPDFに移行するのですか?

CraftMyPDFのようなクラウドベースのPDF APIは、多くの本番環境には適さない基本的な問題があります。

クラウドベースのPDF APIの問題点

1.**データがシステムから送信されます:**すべての HTML テンプレートと JSON データ ペイロードはCraftMyPDFのサーバーに送信されます。 請求書、契約書、医療記録、または機密性の高いビジネスデータについては、HIPAA、GDPR、SOC2 コンプライアンスのリスクが生じます。

  1. ネットワークレイテンシー: 各 PDF 生成にはネットワークのラウンドトリップが必要で、キューおよびレンダー時間 (通常は数秒) がかかります。 IronPDFはミリ秒単位でローカルに生成します。

  2. PDFごとのコストが加算: クレジットベースの価格はボリュームと共に累積し、ハイスループットワークロードは一回限りの永続ライセンスと比べてかなりの繰り返しコストを生み出します。

4.**印刷に最適化された出力:**クラウド API は多くの場合、印刷用に最適化されています。つまり、背景を減らし、色を簡素化して"インク"を節約します。その結果、画面上の HTML とはまったく異なる外観になります。

5.**テンプレートのロックイン:**CraftMyPDFには、独自のドラッグ アンド ドロップ エディターが必要です。 標準的なHTML/CSSを自由に使用することはできません。

アーキテクチャの比較

アスペクトCraftMyPDFIronPDF
データロケーションクラウドオンプレミス(データが外に出ることはありません)
レイテンシーについてネットワークラウンドトリップ + レンダー (通常は数秒)ミリ秒
価格についてクレジットベースのサブスクリプション1回限りの永久ライセンス
テンプレートシステム独自のドラッグ&ドロップのみあらゆるHTML/CSS/JavaScript
アウトプット品質印刷に最適化ピクセルパーフェクトな画面レンダリング
オフラインで動作します。いいえ(インターネットが必要です)はい
コンプライアンスデータリースの構成SOC2/HIPAAフレンドリー

機能比較

フィーチャーCraftMyPDFIronPDF
HTMLからPDFへAPIテンプレート経由ネイティブ
URLからPDFへAPI経由ネイティブ
カスタムテンプレート専用エディタのみあらゆるHTML
CSS3のサポート制限的フル
JavaScriptレンダリング制限的フル
PDFのマージ/分割API経由ネイティブ
透かしAPI経由ネイティブ
オフラインでの作業
セルフホスト

移行前の準備

前提条件

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

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

CraftMyPDFの使用状況を確認する

ソリューションディレクトリで以下のコマンドを実行し、すべてのCraftMyPDFの参照を確認してください:

# Find allCraftMyPDFusages in your codebase
grep -r "CraftMyPdf\|craftmypdf\|api.craftmypdf.com" --include="*.cs" .
grep -r "X-API-KEY" --include="*.cs" .

# Find API key references
grep -r "your-api-key\|template-id\|template_id" --include="*.cs" .

# Find NuGet package references
grep -r "CraftMyPdf\|RestSharp" --include="*.csproj" .
SHELL

予想される画期的な変更

変更CraftMyPDFIronPDFインパクト
アーキテクチャクラウド REST APIローカル.NETライブラリHTTPコールの削除
テンプレート独自のエディタ標準HTMLテンプレートをHTMLに変換
APIキーすべての通話に必要起動時のライセンスAPIキーハンドリングの削除
非同期パターン必須 (HTTP)オプションご希望であれば、awaitを削除してください。
エラー処理HTTPステータスコード例外try/catchパターンの変更
データバインディングJSONテンプレート文字列の補間データバインディングの簡素化

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

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

HTTPクライアントライブラリを削除し、IronPDFをインストールしてください:

# Remove RestSharp HTTP client
dotnet remove package RestSharp

# Install IronPDF
dotnet add package IronPdf
SHELL

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

HTTPクライアントの名前空間をIronPDFに置き換えてください:

// Remove these
using RestSharp;
using System.IO;

// Add this
using IronPdf;

ステップ 3: ライセンスを設定する (起動時に 1 回)

リクエストごとのAPIキーヘッダを単一のライセンス構成に置き換える:

// Add at application startup (Program.cs or Global.asax)
// This replaces all X-API-KEY headers
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

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

APIエンドポイントのマッピング

CraftMyPDFIronPDF
POST /v1/createrenderer.RenderHtmlAsPdf(html)
X-API-KEY ヘッダーLicense.LicenseKey = "..."
template_id標準HTML文字列
{%name%} プレースホルダー$"{name}" C# 補間
POST /v1/mergePdfDocument.Merge(pdfs)
POST /v1/add-watermarkpdf.ApplyWatermark(html)
Webhookコールバック不要
料金制限該当なし

コンフィギュレーション マッピング

CraftMyPDF オプションIronPDF 同等物
template_idHTML文字列
data JSONC#補間
page_size: "A4"PaperSize = PdfPaperSize.A4
orientation: "landscape"PaperOrientation = Landscape
margin_top: 20MarginTop = 20
headerHtmlHeader
footerHtmlFooter

コード移行の例

HTMLからPDFへの変換

最も一般的な操作は、クラウドAPIからローカルレンダリングへの基本的なアーキテクチャの移行を示しています。

CraftMyPDFの実装:

// NuGet: Install-Package RestSharp
using System;
using RestSharp;
using System.IO;

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                html = "<h1>Hello World</h1><p>This is a PDF from HTML</p>"
            }
        });
        
        var response = client.Execute(request);
        File.WriteAllBytes("output.pdf", response.RawBytes);
    }
}

IronPDFの実装:

// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");
        pdf.SaveAs("output.pdf");
    }
}

IronPDFはRestClientのセットアップ、APIキーヘッダ、テンプレートID、HTTPレスポンスハンドリングを排除し、15行のクラウド操作を4行のローカルコードに削減します。 その他のオプションについては、HTML to PDF documentationを参照してください。

URLからPDFへの変換

CraftMyPDFの実装:

// NuGet: Install-Package RestSharp
using System;
using RestSharp;
using System.IO;

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                url = "https://example.com"
            },
            export_type = "file" // "file" returns binary PDF; "json" returns a CDN URL
        });

        var response = client.Execute(request);
        File.WriteAllBytes("webpage.pdf", response.RawBytes);
    }
}

IronPDFの実装:

// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
    }
}

IronPDF の RenderUrlAsPdf メソッドは、JavaScript でレンダリングされたコンテンツを含む完全なウェブページをキャプチャします。 その他のオプションについては、URL to PDF documentationを参照してください。

ヘッダーとフッター

CraftMyPDFの実装:

// NuGet: Install-Package RestSharp
using System;
using RestSharp;
using System.IO;

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                html = "<h1>Document Content</h1>",
                header = "<div>Page Header</div>",
                footer = "<div>Page {page} of {total_pages}</div>"
            }
        });
        
        var response = client.Execute(request);
        File.WriteAllBytes("document.pdf", response.RawBytes);
    }
}

IronPDFの実装:

// NuGet: Install-Package IronPdf
using System;
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Page Header"
        };
        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page} of {total-pages}"
        };
        
        var pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>");
        pdf.SaveAs("document.pdf");
    }
}

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

テンプレート変数の変換

CraftMyPDFは独自のテンプレートプレースホルダーを使用しているため、C#の文字列補間に変換する必要があります:

CraftMyPDFパターン:

//CraftMyPDFtemplate variables
request.AddJsonBody(new
{
    template_id = "invoice-template",
    data = new
    {
        customer = "John Doe",
        amount = "$1,000",
        items = invoiceItems
    }
});

IronPDFパターン:

// C# string interpolation
var html = $@"
<html>
<body>
    <h1>Invoice</h1>
    <p>Customer: {customerName}</p>
    <p>Amount: {amount}</p>
    {GenerateItemsTable(invoiceItems)}
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(html);

重要な移行に関する注意事項

すべての HTTP コードを削除します

最も大きな変更点は、ネットワーク依存の排除です。 IronPDFはローカルで動作し、RestClientもAPIコールもレスポンス処理も行いません:

//CraftMyPDF- HTTP required
var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.POST);
request.AddHeader("X-API-KEY", "your-api-key");
var response = await client.ExecuteAsync(request);

//IronPDF- no HTTP
var pdf = renderer.RenderHtmlAsPdf(html);

レート制限コードの削除

CraftMyPDFは、再試行ロジックを必要とするAPIレート制限を課しています。 IronPDFに限界はありません:

//CraftMyPDF- needed to avoid 429 errors
await Task.Delay(100);
if (response.StatusCode == TooManyRequests) { /* retry */ }

//IronPDF- no limits, just generate
var pdf = renderer.RenderHtmlAsPdf(html);
// Remove all rate limit code!

Webhookハンドラの削除

CraftMyPDFはPDFの補完に非同期ウェブフックを使用しています。 IronPDFは同期的であり、PDFはすぐに準備できます:

//CraftMyPDF- webhook callback required
// POST with webhook_url, wait for callback

//IronPDF- PDF ready immediately
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// No callback needed!

デフォルトで同期

async/awaitパターンがHTTP呼び出しにのみ必要な場合は、削除してください:

//CraftMyPDF- async required
var response = await client.ExecuteAsync(request);

//IronPDF- sync by default (async available if needed)
var pdf = renderer.RenderHtmlAsPdf(html);

移行後のチェックリスト

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

  • すべてのPDF生成テストを実行する
  • 出力品質を比較する(IronPDFのChromiumエンジンはピクセルパーフェクトにレンダリングします)
  • パフォーマンスの改善を測定(ミリ秒対秒)
  • すべてのテンプレートが正しく変換されていることを確認する
  • レート制限なしでバッチ処理をテストする
  • すべてのターゲット環境でテストする
  • CI/CDパイプラインを更新する
  • CraftMyPDFのサブスクリプションをキャンセルする
  • secrets/config から API キーを削除する

その他のリソース


CraftMyPDFからIronPDFに移行することで、クラウド依存性、ネットワーク遅延、PDFごとのコスト、テンプレートのロックインを排除し、オフラインで動作するピクセルパーフェクトなChromiumレンダリングを実現します。REST API呼び出しからローカルメソッド呼び出しへの移行により、コードベースが簡素化され、機密性の高いドキュメントデータをインフラ内に保持できます。

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

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

...
詳しく読む

関連する記事

Key in blue circle

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

Your trial license will be sent to your email address

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

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

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

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