フッターコンテンツにスキップ
移行ガイド

C#でCraftMyPDFからIronPDFに移行する方法

CraftMyPDFからIronPDFへの移行:完全なC#移行ガイド

CraftMyPDFはクラウドベースのPDF生成APIで、独自のドラッグアンドドロップテンプレートエディタとRESTエンドポイントを使用してドキュメントを作成します。 このアプローチは単純なユースケースには便利ですが、クラウドオンリーのアーキテクチャでは、データプライバシーの懸念、ネットワーク遅延、PDFごとのコスト、テンプレートのロックインが発生し、規模が大きくなると問題が生じます。 この包括的なガイドは、CraftMyPDFからIronPDF-HTTP依存を排除し、オフラインで動作し、1回限りの永久ライセンスでピクセルパーフェクトなChromiumレンダリングを提供するローカルの.NET PDFライブラリ-への移行パスをステップバイステップで提供します。

なぜCraftMyPDFからIronPDFに移行するのですか? CraftMyPDFのようなクラウドベースのPDF APIは、多くの本番環境には適さない基本的な問題があります。 ### クラウドベースのPDF APIの問題点

1.**あなたのデータはあなたのシステムから離れます**: すべてのHTMLテンプレートとJSONデータペイロードはCraftMyPDFのサーバーに送信されます。 請求書、契約書、医療記録、または機密性の高いビジネスデータについては、HIPAA、GDPR、SOC2 コンプライアンスのリスクが生じます。 2.**ネットワーク遅延**:CraftMyPDF自身のドキュメントによると、PDFあたり1.5~30秒となっています。 IronPdfはミリ秒単位でローカルに生成します。 3.**PDFごとのコストがかさむ**: 10,000PDF/月をサブスクリプション料金で使用すると、1回限りの永久ライセンスに比べて多額の経常コストが発生します。 4.**印刷用に最適化された出力**:クラウドAPIは、"インク"を節約するために、印刷用に最適化され、背景を減らし、色を単純化することがよくあります。その結果、画面上の HTML のようには決して見えません。 5.**テンプレートロックイン**:CraftMyPDFは独自のドラッグアンドドロップエディタを必要とします。 標準的なHTML/CSSを自由に使用することはできません。 ### アーキテクチャの比較 |アスペクト|CraftMyPDF|IronPDF| |--------|------------|---------| |**データロケーション**|クラウド|オンプレミス(データが外に出ることはありません)| |**レイテンシー**について| 1.PDF1枚あたり5~30秒|ミリ秒| |**価格**について|PDFごとの購読|1回限りの永久ライセンス| |**テンプレート**システム|独自のドラッグ&ドロップのみ|あらゆるHTML/CSS/JavaScript| |**アウトプット品質**|印刷に最適化|ピクセルパーフェクトな画面レンダリング| |**オフラインで動作**します。|いいえ(インターネットが必要です)| はい | |**コンプライアンス**。|データリースの構成|SOC2/HIPAAフレンドリー| ### 機能比較 | フィーチャー |CraftMyPDF|IronPDF| |---------|------------|---------| |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](https://ironpdf.com/licensing/) にて無料トライアル可能) ### CraftMyPDFの使用状況を確認する ソリューションディレクトリで以下のコマンドを実行し、すべてのCraftMyPDFの参照を確認してください: ```bash # 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" . ``` ### 予想される画期的な変更

|変更|CraftMyPDF|IronPDF|インパクト| |--------|------------|---------|--------| |**アーキテクチャ** |クラウド REST API|ローカル.NETライブラリ|HTTPコールの削除| |**テンプレート** |独自のエディタ|標準HTML|テンプレートをHTMLに変換| |**APIキー**。|すべての通話に必要|起動時のライセンス|APIキーハンドリングの削除| |**非同期パターン**|必須 (HTTP)|オプション|ご希望であれば、awaitを削除してください。| |**エラー処理**。|HTTPステータスコード|例外|try/catchパターンの変更| |**データバインディング**。|JSONテンプレート|文字列の補間|データバインディングの簡素化| ## ステップごとの移行プロセス ### ステップ 1: NuGet パッケージを更新する。 HTTPクライアントライブラリを削除し、IronPDFをインストールしてください: ```bash # Remove RestSharp HTTP client dotnet remove package RestSharp # Install IronPDF dotnet add package IronPdf ``` ### ステップ 2: 名前空間参照の更新 HTTPクライアントの名前空間をIronPDFに置き換えてください: ```csharp // Remove these using RestSharp; using System.IO; // Add this using IronPdf; ``` ### ステップ 3: ライセンスを設定する (起動時に 1 回)。 リクエストごとのAPIキーヘッダを単一のライセンス構成に置き換える: ```csharp // Add at application startup (Program.cs or Global.asax) // This replaces all X-API-KEY headers IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; ``` ## 完全な API 移行のリファレンス ### APIエンドポイントのマッピング |CraftMyPDF|IronPDF|ノート| |------------|---------|-------| |`POST /v1/create`.|`renderer.RenderHtmlAsPdf(html)`.|APIコール不要| |`X-API-KEY`ヘッダー|`License.LicenseKey = "..."`.|起動時に一度だけ設定| |<コード>テンプレートIDテンプレートIDデータ JSON|C#補間|`$"こんにちは {名前}"`。| |`page_size:"A4"`|`PaperSize = PdfPaperSize.A4`.| | |`オリエンテーション:"ランドスケープ"`|`用紙の向き = 横`。| | |<コード>margin_top: 20|`マージントップ = 20`|単位:ミリメートル| |<コード>ヘッダーHtmlHeaderフッターHtmlFooter ```csharp // 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 = "

Hello World

This is a PDF from HTML

" } }); var response = client.Execute(request); File.WriteAllBytes("output.pdf", response.RawBytes); } } ``` **IronPDFの実装:**。 ```csharp // NuGet: Install-Package IronPdf using System; using IronPdf; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("

Hello World

This is a PDF from HTML

"); pdf.SaveAs("output.pdf"); } } ``` IronPDFはRestClientのセットアップ、APIキーヘッダ、テンプレートID、HTTPレスポンスハンドリングを排除し、15行のクラウド操作を4行のローカルコードに削減します。 その他のオプションについては、[HTML to PDF documentation](https://ironpdf.com/how-to/html-file-to-pdf/)を参照してください。 ### URLからPDFへの変換 **CraftMyPDFの実装:** ```csharp // 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 = "pdf" }); var response = client.Execute(request); File.WriteAllBytes("webpage.pdf", response.RawBytes); } } ``` **IronPDFの実装:**。 ```csharp // 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](https://ironpdf.com/how-to/url-to-pdf/)を参照してください。 ### ヘッダーとフッター **CraftMyPDFの実装:** ```csharp // 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 = "

Document Content

", header = "
Page Header
", footer = "
Page {page} of {total_pages}
" } }); var response = client.Execute(request); File.WriteAllBytes("document.pdf", response.RawBytes); } } ``` **IronPDFの実装:**。 ```csharp // 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("

Document Content

"); pdf.SaveAs("document.pdf"); } } ``` IronPDFは{page}{total-pages}のようなプレースホルダートークンをサポートしています。 その他のオプションについては、[headers and footers documentation](https://ironpdf.com/how-to/headers-and-footers/)を参照してください。 ### テンプレート変数の変換 CraftMyPDFは独自のテンプレートプレースホルダーを使用しているため、C#の文字列補間に変換する必要があります: **CraftMyPDFパターン:** ```csharp //CraftMyPDFtemplate variables request.AddJsonBody(new { template_id = "invoice-template", data = new { customer = "John Doe", amount = "$1,000", items = invoiceItems } }); ``` **IronPDFパターン:** ```csharp // C# string interpolation var html = $@"

Invoice

Customer: {customerName}

Amount: {amount}

{GenerateItemsTable(invoiceItems)} "; var pdf = renderer.RenderHtmlAsPdf(html); ``` ## 重要な移行に関する注意事項 ### すべての HTTP コードを削除します。 最も大きな変更点は、ネットワーク依存の排除です。 IronPDFはローカルで動作し、RestClientもAPIコールもレスポンス処理も行いません: ```csharp //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に限界はありません: ```csharp //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はすぐに準備できます: ```csharp //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呼び出しにのみ必要な場合は、削除してください: ```csharp //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キーを削除する ## PDFインフラストラクチャの将来性を確保する

.NET 10が目前に迫り、C# 14が新しい言語機能を導入する中、ローカルPDFライブラリを選択することで、クラウドAPIの廃止リスクやバージョン互換性の懸念を排除することができます。 IronPDFの永久ライセンスモデルは、プロジェクトが2025年や2026年まで延長されても、定期的なサブスクリプションコストやデータがインフラから離れることなく、移行への投資が無期限に配当されることを意味します。 ## その他のリソース - [IronPDFドキュメント](https://ironpdf.com/docs/). - [HTMLからPDFへのチュートリアル](https://ironpdf.com/tutorials/)。 - [APIリファレンス](https://ironpdf.com/object-reference/api/). - [NuGetパッケージ](https://www.nuget.org/packages/IronPdf/)。 - [ライセンスオプション](https://ironpdf.com/licensing/)。 --- CraftMyPDFからIronPDFに移行することで、クラウド依存性、ネットワーク遅延、PDFごとのコスト、テンプレートのロックインを排除し、オフラインで動作するピクセルパーフェクトなChromiumレンダリングを実現します。REST API呼び出しからローカルメソッド呼び出しへの移行により、コードベースが簡素化され、機密性の高いドキュメントデータをインフラ内に保持できます。
カーティス・チャウ
テクニカルライター

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

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