跳過到頁腳內容
遷移指南

如何用 C# 從 CraftMyPDF 轉移到 IronPDF

從CraftMyPDF轉移到 IronPDF:完整的 C# 遷移指南。

CraftMyPDF 是基於雲端的 PDF 生成 API,使用專有的拖放式範本編輯器和 REST 端點來建立文件。 雖然此方法可為簡單的使用個案提供便利,但僅雲端架構會產生資料隱私、網路延遲、每張 PDF 成本以及範本鎖定等問題,而這些問題在規模擴大時就會成為問題。 本全面指南提供了從CraftMyPDF到IronPDF的逐步遷移路徑 -IronPDFfor .NET 是一個本地 .NET PDF 函式庫,它消除了 HTTP 的依賴性、可離線運行,並提供像素完美的 Chromium 渲染,且只需一次性永久授權。

為什麼要從CraftMyPDF轉移到 IronPDF? CraftMyPDF 等基於雲端的 PDF API 引進了一些基本問題,使其不適合許多生產環境。 ### 基於雲的 PDF API 的問題 1.**您的資料離開您的系統**:每個 HTML 模板和 JSON 資料有效載荷都會傳送到CraftMyPDF的伺服器。 對於發票、合約、醫療記錄或任何敏感的商業資料,這會造成 HIPAA、GDPR 和 SOC2 的合規風險。 2.**網路延遲**:CraftMyPDF 本身的說明文件指出每個 PDF 需時 1.5-30 秒。IronPDF以毫秒為單位在本地產生。 3.**Per-PDF Costs Add Up**:以訂閱費率計算,每月 10,000 份 PDF 將產生比一次性永久授權更高的經常費用。 4.**印刷最佳化輸出**:雲 API 通常會針對列印進行最佳化,減少背景並簡化顏色,以節省"墨水"。其結果從來都不像您在螢幕上的 HTML。 5.**模板鎖定**:CraftMyPDF 需要他們專屬的拖放式編輯器。 不能隨意使用標準的 HTML/CSS。 ### 架構比較 |範疇|CraftMyPDF|IronPDF| |--------|------------|---------| |**資料位置**|雲端 (您的資料離開您的系統)|內部部署(資料不離手)| |**交稿時間**| 1.每個 PDF 需時 5-30 秒|毫秒| |**定價**|按 PDF 訂閱|一次性永久授權| |**範本系統**|僅限專屬拖放|任何 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)|選項|如果喜歡,請移除等待| |**錯誤處理**|HTTP 狀態代碼|例外情況|變更 try/catch 模式| |**資料綁定**|JSON 範本|字串插值|簡化資料綁定| ## 逐步遷移的過程 ### 步驟 1:更新 NuGet 套件 移除 HTTP 客戶端函式庫,並安裝 IronPDF: ```bash # Remove RestSharp HTTP client dotnet remove package RestSharp # Install IronPDF dotnet add package IronPdf ``` ### 步驟 2:更新命名空間參考資料 用 IronPdf 取代 HTTP 客戶端命名空間: ```csharp // Remove these using RestSharp; using System.IO; // Add this using IronPdf; ``` ### 步驟 3:配置授權(啟動時一次) 使用單一授權組態取代每次要求的 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 = "..."`|啟動時設定一次| |`template_id`|標準 HTML 字串|使用任何 HTML| |`{%name%}` 占位符|`$"{name}"` C# 插值|標準 .NET Standard| |`POST /v1/merge`|<代碼>PdfDocument.Merge(pdfs)| | |`margin_top:20`|`MarginTop = 20`|以毫米為單位| |` 標題`|`HtmlHeader`|完整的 HTML 支援| |`footer`|<編碼>HtmlFooterHello 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 key headers、模板 ID 和 HTTP 回應處理 - 將 15 行的雲端作業減至 4 行本機程式碼。 如需更多選項,請參閱 [HTML to PDF 文件](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 至 PDF 文件](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 文件](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 使用 async webhooks 來完成 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! ``` ### Sync by Default 如果僅需用於 HTTP 呼叫,則移除 async/await 模式: ```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 引擎可呈現出完美的像素效果) - [ ] 測量效能改善(毫秒 vs. 秒) - [ ] 確認所有模板轉換正確 - [ ] 測試無速率限制的批次處理 - [ ] 在所有目標環境中進行測試 - [ ] 更新 CI/CD 管道 - [ ] 取消訂閱 CraftMyPDF - [從 secrets/config 中移除 API 金鑰 ## Future-Proofing Your PDF Infrastructure 由於 .NET 10 即將推出,而 C# 14 也將引進新的語言功能,因此選擇本機 PDF 函式庫可消除雲端 API 廢棄的風險和版本相容性的疑慮。 IronPdf 的永久授權模式意味著您的遷移投資可以無限期地獲得回報,因為專案可以延續到 2025 年和 2026 年 - 而無需經常性的訂閱成本或資料離開您的基礎架構。 ## 其他資源 - [IronPDF文件](https://ironpdf.com/docs/)。 - [HTML to PDF Tutorials](https://ironpdf.com/tutorials/) - [API Reference](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
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。