比較

CraftMyPDF vs IronPdf:技術比較指南

CraftMyPDFvs IronPDF:適用於 .NET 開發人員的技術比較。

當 .NET 開發人員評估 PDF 製作解決方案時,CraftMyPDF 成為基於雲端、範本驅動 API 與網頁式編輯器的選擇。 然而,僅雲端架構的固有限制 - 包括將資料傳輸至外部伺服器、網路延遲和按 PDF 計價 - 讓許多團隊開始評估內部部署的替代方案。IronPDF提供本地 PDF 生成功能,具有原生 Chromium 渲染功能,且無外部依賴性。

本比較針對技術上相關的層面檢視這兩種方法,以協助專業開發人員和架構人員針對他們的 .NET PDF 需求做出明智的決策。

瞭解 CraftMyPDF。

CraftMyPDF 是一個以雲端為基礎的 API,旨在透過網頁式拖放範本編輯器促進 PDF 文件的建立。 該服務可讓使用者直接在瀏覽器中設計 PDF 範本,支援版面元件、進階格式化、表達式,以及來自 JSON 有效負載的資料綁定。

API 透過 REST 端點運作,要求開發人員將 HTML 模板和資料傳輸至CraftMyPDF的伺服器進行渲染。 根據他們的文件,每份文件的 PDF 生成延遲時間為 1.5-30 秒,視複雜性和目前的伺服器負載而定。

然而,CraftMyPDF 的純雲端架構有幾個限制。 使用者必須在專屬的範本設計器中工作 - 標準的 HTML/CSS 範本無法直接使用。 由於僅限於雲端,因此不存在內部部署選項,這為處理敏感文件的組織帶來了合規性問題。 該服務以訂閱模式運作,按 PDF 定價。

了解 IronPDF

IronPDF 是一個 .NET 函式庫,可使用內嵌的 Chromium 渲染引擎在本機生成 PDF。該函式庫可將 HTML、CSS 和 JavaScript 轉換為 PDF,其呈現品質與開發人員在 Chrome 瀏覽器中看到的相同 - 提供像素完美的螢幕呈現,而非印刷最佳化輸出。

IronPDF 完全在企業內部運作,這表示文件資料從未離開組織的基礎架構。 該函式庫不需要呼叫外部 API、連線網路或訂閱範本編輯器。 一次性永久授權可取代持續的每 PDF 成本。

架構與部署比較

這些 .NET PDF 解決方案的根本差異在於其架構方法。

範疇CraftMyPDFIronPDF
資料位置雲端 (資料離開您的系統)內部部署(資料不離手)
交稿時間1.每個 PDF 需時 5-30 秒毫秒
定價按 PDF 訂閱一次性永久授權
範本系統僅限專屬拖放任何 HTML/CSS/JavaScript
輸出品質印刷最佳化完美的畫面呈現
離線工作無(需要網際網路)
合規性資料葉組織SOC2/HIPAA 友好
渲染引擎雲端渲染器本地 Chromium

CraftMyPDF 要求每個 HTML 模板和 JSON 資料有效載荷都傳送到他們的伺服器。 對於發票、合約、醫療記錄或任何敏感的商業資料,這會造成 HIPAA、GDPR 和 SOC2 的合規性問題。 IronPdf 在本地處理所有內容。

程式碼比較:常見的 PDF 作業

HTML 至 PDF 轉換

將 HTML 內容轉換為 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
            {
                html = "<h1>Hello World</h1><p>This is a PDF from HTML</p>"
            }
        });

        var response = client.Execute(request);
        File.WriteAllBytes("output.pdf", response.RawBytes);
    }
}
// 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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

CraftMyPDF 需要配置 REST 客戶端、新增 API key 標頭、建構具有範本 ID 的 JSON 體、執行 HTTP 請求、處理回應,以及將原始位元組寫入檔案。IronPDF創建一個 ChromePdfRenderer, 呼叫 RenderHtmlAsPdf(), 然後儲存--不需要網路呼叫、不需要 API 金鑰、不需要模板 ID。

如需進階的 HTML 呈現選項,請探索 HTML 至 PDF 轉換指南

URL 轉 PDF

將網頁擷取成 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 = "pdf"
        });

        var response = client.Execute(request);
        File.WriteAllBytes("webpage.pdf", response.RawBytes);
    }
}
// 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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

CraftMyPDF 需要相同的 REST 用戶端設定,但具有不同的 JSON 有效負載結構。IronPDF的 RenderUrlAsPdf() 使用 Chromium 直接在本地渲染 URL。

URL to PDF 文件中了解更多關於 URL 渲染的資訊。

新增頁首與頁尾

文件的頁首和頁尾會展示 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>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);
    }
}
// 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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

CraftMyPDF 在傳送至 API 的 JSON 資料有效負載中嵌入標頭/腳本內容。IronPDF使用 RenderingOptions.TextHeaderRenderingOptions.TextFooter 屬性與 TextHeaderFooter 物件,提供無需網路傳輸的類型化設定。

方法映射參考

對於評估CraftMyPDF遷移或比較功能的開發人員而言,此對應會顯示等效的操作:

CraftMyPDFIronPDF筆記
POST /v1/createrenderer.RenderHtmlAsPdf(html)無需呼叫 API
X-API-KEY 標頭License.LicenseKey = "..."啟動時設定一次
template_id標準 HTML 字串使用任何 HTML
{%name%} 占位符$"{name}" C# 插值標準 .NET Standard
POST /v1/merge<代碼>PdfDocument.Merge(pdfs)</代碼本地、即時
POST /v1/add-watermarkpdf.ApplyWatermark(html)基於 HTML
Webhook 回呼不需要結果同步
費率限制不適用無限制

配置映射

CraftMyPDF 選項IronPdf 同等級產品
page_size:"A4"PaperSize = PdfPaperSize.A4 紙張尺寸
orientation:"landscape"PaperOrientation = Landscape(紙張方向)
margin_top:20MarginTop = 20
標題HtmlHeader
footer<編碼>HtmlFooter</編碼
async:true使用 *Async() 方法

功能比較摘要

特點CraftMyPDFIronPDF
HTML 至 PDF透過 API 範本✅ 原生
URL 至 PDF透過 API✅ 原生
自訂範本僅限專屬編輯器✅ 任何 HTML
支援 CSS3限額✅ 全文
JavaScript 渲染限額✅ 全文
合併/分割 PDF透過 API✅ 原生
表格填寫透過 API✅ 原生
數位簽名透過 API✅ 原生
水印透過 API✅ 原生
離線工作
自行託管

成本比較

定價模式代表根本不同的成本結構方式。

CraftMyPDF 成本(每月):

  • Lite 計劃:$19/月,1,200 個 PDF 檔案
  • Professional: $49/month for 5,000 PDFs
  • Enterprise: $99/month for 15,000 PDFs
  • 在規模上:100,000 PDF = ~$500-600/月

IronPDF 成本(一次性):

  • Lite License:749 美元(一個開發人員、一個專案)
  • 專業:1,499 美元(無限專案)
  • 一次性付款後可永遠無限次下載 PDF 檔案

收支平衡點大約為 2-3 個月,視 PDF 量而定。

當團隊考慮從CraftMyPDF轉移到IronPDF時。

開發團隊評估從CraftMyPDF過渡到IronPDF有幾個原因:

資料合規要求:處理敏感文件的組織 - 發票、合約、醫療記錄、財務資料 - 不能將這些資訊傳輸至第三方伺服器。CraftMyPDF的雲端架構與 HIPAA、GDPR 和 SOC2 的合規要求相衝突。 IronPdf 在本地處理所有內容。

延遲敏感度:CraftMyPDF 記錄的每 PDF 1.5-30 秒的延遲會在大量或即時的情況下造成瓶頸。IronPDF可在幾毫秒內生成 PDF,無需網路往返。

成本可預測性:每 PDF 訂閱成本會隨著使用量的成長而累積,無法預測。 每月產生數以千計 PDF 檔案的組織認為一次性永久授權隨著時間的推移會更經濟。

模板彈性:CraftMyPDF 專屬的拖放式編輯器限制了模板的設計選項。 希望使用現有 HTML/CSS 資產或標準 Web 開發工具的團隊偏好 IronPdf 的方法,任何 HTML 都可以成為模板。

輸出品質:雲端 PDF API 通常會針對列印輸出進行最佳化,減少背景並簡化顏色。 IronPdf 的 Chromium 引擎可產生像素完美的螢幕渲染,與開發人員在瀏覽器中看到的效果相符。

離線操作:需要在無網路連線的情況下產生 PDF 的應用程式無法使用基於雲的 API。IronPdf 可完全離線操作。

架構簡化:移除 REST 用戶端設定、API 金鑰管理、HTTP 錯誤處理、速率限制邏輯和 webhook 處理器,可大幅簡化程式碼庫。

優勢和考慮因素

CraftMyPDF的優勢

  • 友善的使用者介面:基於 Web 的拖放式編輯器可簡化非開發人員的範本建立工作
  • 無需基礎架構管理:雲端主機免除伺服器維護
  • 跨平台 API:可從任何程式語言存取的 REST API

CraftMyPDF注意事項

  • 模板鎖定:必須使用專屬的範本設計器
  • Cloud-Only: 沒有內部部署選項
  • 資料傳輸:所有在外部伺服器上處理的文件
  • 延遲時間:每生成 PDF 需時 1.5-30 秒
  • 持續成本:按 PDF 訂閱定價
  • 網際網路依賴性:需要網路連線

IronPDF的優勢

  • 範本彈性:任何 HTML/CSS/JavaScript 都可以成為範本
  • 內部部署:資料永不離開組織基礎架構
  • 效能:毫秒級 PDF 生成,無網路延遲
  • 成本效益:一次性永久授權
  • 離線操作:無需網路
  • Chromium 渲染:與瀏覽器顯示相匹配的完美像素輸出
  • 廣泛的資源:全面的教學文件

IronPDF注意事項

  • 開發技能:需要 C# 知識以建立範本
  • 初始設定:與雲 API 訂閱相比,設定較多

結論

CraftMyPDF 和IronPDF代表了在 .NET 應用程式中生成 PDF 的基本不同方法。CraftMyPDF提供以雲端為基礎、範本驅動的解決方案,適合適應外部資料處理和訂閱定價模式的組織。

IronPdf 提供的企業內部 PDF 生成功能可將敏感資料保持在組織邊界內,消除網路延遲,並提供可預測的一次性授權成本。 對於要求資料合規性、低延遲性、成本可預測性或模板彈性的團隊,IronPDF 可滿足這些特定需求。

在組織規劃 .NET 10、C# 14 以及到 2026 年的應用程式開發時,依賴雲端與自行託管 PDF 生成之間的架構選擇,會影響即時的開發模式與長期的營運成本。 團隊應針對每種方法的特性,評估其特定需求 (資料敏感度、預期數量、延遲容忍度及預算限制)。

免費試用開始評估 IronPDF,並探索全面的文件,以評估是否適合您的特定需求。