跳過到頁腳內容
遷移指南

如何在 C# 中從 PDFmyURL 轉移到 IronPDF

Migrating fromPDFmyURLto IronPDF:完整的 C# 開發人員指南。

PDFmyURL 是一項以雲端為基礎的 API 服務,專為將 URL 和 HTML 內容轉換為 PDF 文件而設計。 該服務在外部伺服器上處理所有轉換,提供直接的整合路徑,只需最少的本機基礎架構。 然而,對於處理敏感資料、需要離線功能或需要避免持續訂閱成本的生產應用程式來說,這種依賴雲端的架構造成了很大的疑慮。

本指南提供了從PDFmyURL到IronPDF的完整轉換路徑,為評估此轉換的 .NET 專業開發人員提供了分步說明、程式碼比較以及實用範例。

為何要從PDFmyURL遷移?

PDFmyURL 的雲端處理模式引入了幾項開發團隊必須考慮的挑戰:

隱私權與資料安全性:您轉換的每一份文件都會傳送到PDFmyURL的伺服器,並經由PDFmyURL的伺服器處理,包括敏感的合約、財務報告和個人資料。

持續訂閱成本:起價為 39 美元/月,在無擁有權的情況下,每年成本超過 468 美元/年。這種訂閱模式意味著無論使用模式如何,都會持續支出。

網際網路依賴性:每次轉換都需要網路連線。 應用程式無法在離線或網路中斷時處理 PDF。

速率限制與節流:在使用高峰期,API 呼叫可能會被節流,從而可能影響應用程式的效能。

服務可用性:您的應用程式有賴於第三方服務的線上運作。

廠商鎖定:API 變更可能會在未經通知的情況下破壞您的整合,因此需要反應式的程式碼更新。

IronPDFvs PDFmyURL:功能比較

了解架構上的差異有助於技術決策者評估遷移投資:

範疇PDFmyURLIronPDF
處理地點外部伺服器本地(您的伺服器)
類型API 包裝.NET 圖書館
驗證每個請求的 API 金鑰一次性授權金鑰
網路需求每次轉換只有初始設定
定價模式按月訂閱 ($39+)提供永久授權
費率限制是 (依計劃而定)
資料隱私權從外部傳送的資料資料保持在本地
HTML/CSS/JS 支援符合 W3C 標準完整的 Chromium 引擎
同步模式必需 (僅限於 async)同步與同步選項
PDF 操作限額全套(合併、分割、編輯)
使用個案少量應用程式高產量和企業級

快速入門:PDFmyURL 到IronPDF的遷移。

只要完成這些基本步驟,就可以立即開始遷移。

步驟 1:取代 NuGet 套件

移除PDFmyURL套件:

# RemovePDFmyURLpackages
dotnet remove package PdfMyUrl
dotnet remove package Pdfcrowd
# RemovePDFmyURLpackages
dotnet remove package PdfMyUrl
dotnet remove package Pdfcrowd
SHELL

安裝 IronPDF:

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

步驟 2:更新命名空間

用 IronPdf 取代PDFmyURL命名空間:

// Before: PDFmyURL
using PdfMyUrl;
using Pdfcrowd;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: PDFmyURL
using PdfMyUrl;
using Pdfcrowd;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

步驟 3:初始化授權

在應用程式啟動時加入授權初始化:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

程式碼遷移範例

將 URL 轉換為 PDF

URL-to-PDF 操作展示了PDFmyURL與IronPDF之間基本的 API 差異。

PDFmyURL 方法:

// InstallPDFmyURLSDK
using System;
using Pdfcrowd;

class Example
{
    static void Main()
    {
        try
        {
            var client = new HtmlToPdfClient("username", "apikey");
            client.convertUrlToFile("https://example.com", "output.pdf");
        }
        catch(Error why)
        {
            Console.WriteLine("Error: " + why);
        }
    }
}
// InstallPDFmyURLSDK
using System;
using Pdfcrowd;

class Example
{
    static void Main()
    {
        try
        {
            var client = new HtmlToPdfClient("username", "apikey");
            client.convertUrlToFile("https://example.com", "output.pdf");
        }
        catch(Error why)
        {
            Console.WriteLine("Error: " + why);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF 方法:

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

class Example
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Example
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

PDFmyURL 要求為每個轉換請求建立一個HtmlToPdfClient並附上使用者名稱和 API 金鑰認證,然後以 URL 和輸出路徑呼叫 convertUrlToFile() 。 整個操作必須包裝在PDFmyURL自訂 Error 類型的 try-catch 中。

IronPDF 將此簡化為三行:建立 ChromePdfRenderer, 呼叫 RenderUrlAsPdf(), 並使用內建的 SaveAs() 方法。 不需要每次要求的憑證 - 授權會在應用程式啟動時設定一次。

如需進階的 URL-to-PDF 方案,請參閱 URL to PDF 文件

將 HTML 字串轉換為 PDF

HTML 字串轉換可清楚顯示模式差異。

PDFmyURL 方法:

// InstallPDFmyURLSDK
using System;
using Pdfcrowd;

class Example
{
    static void Main()
    {
        try
        {
            var client = new HtmlToPdfClient("username", "apikey");
            string html = "<html><body><h1>Hello World</h1></body></html>";
            client.convertStringToFile(html, "output.pdf");
        }
        catch(Error why)
        {
            Console.WriteLine("Error: " + why);
        }
    }
}
// InstallPDFmyURLSDK
using System;
using Pdfcrowd;

class Example
{
    static void Main()
    {
        try
        {
            var client = new HtmlToPdfClient("username", "apikey");
            string html = "<html><body><h1>Hello World</h1></body></html>";
            client.convertStringToFile(html, "output.pdf");
        }
        catch(Error why)
        {
            Console.WriteLine("Error: " + why);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF 方法:

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

class Example
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Example
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

PDFmyURL 使用 convertStringToFile() 將 HTML 內容傳送至外部伺服器進行處理。IronPDF的 RenderHtmlAsPdf() 使用 Chromium 渲染引擎在本地處理所有內容。

探索 HTML 至 PDF 轉換指南 以取得其他選項。

具有頁面設定的 HTML 檔案轉換

配置紙張大小、方向和頁邊需要在每個圖書館採用不同的方法。

PDFmyURL 方法:

// InstallPDFmyURLSDK
using System;
using Pdfcrowd;

class Example
{
    static void Main()
    {
        try
        {
            var client = new HtmlToPdfClient("username", "apikey");
            client.setPageSize("A4");
            client.setOrientation("landscape");
            client.setMarginTop("10mm");
            client.convertFileToFile("input.html", "output.pdf");
        }
        catch(Error why)
        {
            Console.WriteLine("Error: " + why);
        }
    }
}
// InstallPDFmyURLSDK
using System;
using Pdfcrowd;

class Example
{
    static void Main()
    {
        try
        {
            var client = new HtmlToPdfClient("username", "apikey");
            client.setPageSize("A4");
            client.setOrientation("landscape");
            client.setMarginTop("10mm");
            client.convertFileToFile("input.html", "output.pdf");
        }
        catch(Error why)
        {
            Console.WriteLine("Error: " + why);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF 方法:

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

class Example
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 10;
        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

class Example
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 10;
        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

PDFmyURL 使用具有字串參數的 setter 方法,例如setPageSize("A4")setMarginTop("10mm")。IronPDF透過 RenderingOptions 提供強式類型的屬性,其中包含諸如 PdfPaperSize.A4 之類的枚數,以及以毫米為單位的邊界整數值。

PDFmyURLAPI 至IronPDF映射參考。

此對應可透過顯示直接的 API 對應關係來加速遷移:

核心類別

PDFmyURLIronPDF筆記
HtmlToPdfClient<代碼>ChromePdfRenderer</代碼主要轉換類
<編碼>PdfMyUrlClient</編碼<代碼>ChromePdfRenderer</代碼替代客戶端類別
API 回應物件<編碼>PDF 文件</編碼結果 PDF 物件

方法

PDFmyURLIronPDF筆記
client.convertUrlToFile(url,file)renderer.RenderUrlAsPdf(url).SaveAs(file)URL 至 PDF
client.convertStringToFile(html, file)renderer.RenderHtmlAsPdf(html).SaveAs(file)HTML 字串至 PDF
client.convertFileToFile(輸入、輸出)renderer.RenderHtmlFileAsPdf(input).SaveAs(output)檔案對檔案
<代碼>response.GetBytes()</代碼<編碼>pdf.BinaryData</編碼取得原始位元組
<編碼>response.GetStream()</編碼<代碼>pdf.Stream</代碼以串流方式取得

設定選項

PDFmyURL (setXxx 方法)IronPdf (RenderingOptions)筆記
setPageSize("A4").PaperSize = PdfPaperSize.A4.紙張大小
setPageSize("Letter").PaperSize = PdfPaperSize.Letter.美國信件
setOrientation("landscape").PaperOrientation = PdfPaperOrientation.Landscape.導向
<代碼>setOrientation("portrait")</代碼.PaperOrientation=PdfPaperOrientation.Portrait肖像
setMarginTop("10mm").MarginTop = 10上邊距離 (mm)
setMarginBottom("10mm").MarginBottom = 10.底邊距離 (mm)
setMarginLeft("10mm").MarginLeft = 10.左邊距離 (mm)
setMarginRight("10mm").MarginRight = 10右邊距 (mm)
setHeaderHtml(html).HtmlHeader = new HtmlHeaderFooter { HtmlFragment = html }標題
setFooterHtml(html).HtmlFooter = new HtmlHeaderFooter { HtmlFragment = html }頁尾
setJavascriptDelay(500).RenderDelay = 500.JS 等待時間 (ms)
<編碼>setDisableJavascript(true)</編碼.EnableJavaScript = false.停用 JS
<代碼>setUsePrintMedia(true)</代碼.CssMediaType = PdfCssMediaType.Print列印 CSS

驗證比較

PDFmyURLIronPDF
new HtmlToPdfClient("username", "apikey")IronPDF.License.LicenseKey = "LICENSE-KEY"
每個請求的 API 金鑰啟動時一次性
每次通話都需要全球設定一次

常見的遷移問題與解決方案

問題 1:API 金鑰 vs 授權金鑰

PDFmyURL: 每次轉換請求都需要憑證。

解決方案:在應用程式啟動時設定一次IronPDF授權:

// PDFmyURL: API key per request
var client = new HtmlToPdfClient("username", "apikey");

// IronPDF: One-time license at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Set once, typically in Program.cs or Startup.cs
// PDFmyURL: API key per request
var client = new HtmlToPdfClient("username", "apikey");

// IronPDF: One-time license at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Set once, typically in Program.cs or Startup.cs
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

問題 2:標題/頁腳中的占位符語法

PDFmyURL: 使用 {page_number}{total_pages} 占位符。

解決方案:更新為IronPDF的占位格式:

// PDFmyURL: "Page {page_number} of {total_pages}"
// IronPDF: "Page {page} of {total-pages}"
// PDFmyURL: "Page {page_number} of {total_pages}"
// IronPDF: "Page {page} of {total-pages}"
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

第 3 期:Async 模式

PDFmyURL: 需要 async/await 模式。

解決方案:IronPDF預設是同步的; 如有需要,可為 async 包裝:

// PDFmyURL: Native async
var response = await client.ConvertUrlAsync(url);

// IronPDF: Sync by default, wrap for async
var pdf = await Task.Run(() => renderer.RenderUrlAsPdf(url));
// PDFmyURL: Native async
var response = await client.ConvertUrlAsync(url);

// IronPDF: Sync by default, wrap for async
var pdf = await Task.Run(() => renderer.RenderUrlAsPdf(url));
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

問題 4:錯誤處理

PDFmyURL: 使用自訂的 Pdfcrowd.Error 異常類型。

解決方案:更新IronPDF異常的 catch 區塊:

// PDFmyURL: Pdfcrowd.Error
catch (Pdfcrowd.Error e) { ... }

// IronPDF: Standard exceptions
catch (IronPdf.Exceptions.IronPdfRenderingException e) { ... }
// PDFmyURL: Pdfcrowd.Error
catch (Pdfcrowd.Error e) { ... }

// IronPDF: Standard exceptions
catch (IronPdf.Exceptions.IronPdfRenderingException e) { ... }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

第 5 期:組態樣式

PDFmyURL: 使用具有字串值的 setter 方法。

解決方案:使用強式類型的 RenderingOptions 屬性:

// PDFmyURL: Setter methods
client.setPageSize("A4");
client.setOrientation("landscape");

// IronPDF: Properties with enums
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// PDFmyURL: Setter methods
client.setPageSize("A4");
client.setOrientation("landscape");

// IronPDF: Properties with enums
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

PDFmyURL遷移清單

遷移前的任務

審核您的程式碼庫,找出所有PDFmyURL的使用情況:

# FindPDFmyURLusage
grep -r "PdfMyUrl\|Pdfcrowd\|HtmlToPdfClient" --include="*.cs" .

# Find API key references
grep -r "apikey\|api-key\|api_key" --include="*.cs" --include="*.json" --include="*.config" .

# Find placeholder patterns to migrate
grep -r "{page_number}\|{total_pages}" --include="*.cs" .
# FindPDFmyURLusage
grep -r "PdfMyUrl\|Pdfcrowd\|HtmlToPdfClient" --include="*.cs" .

# Find API key references
grep -r "apikey\|api-key\|api_key" --include="*.cs" --include="*.json" --include="*.config" .

# Find placeholder patterns to migrate
grep -r "{page_number}\|{total_pages}" --include="*.cs" .
SHELL

記錄目前使用的組態選項。 使用環境變數規劃授權金鑰儲存。

程式碼更新任務

1.移除 PDFmyURL/Pdfcrowd NuGet 套件 2.安裝 IronPdf NuGet 套件 3.更新所有命名空間的匯入 4.使用IronPDF授權金鑰取代 API 金鑰驗證 5.將 setter 方法轉換為 RenderingOptions 屬性 6.更新頁頭/頁尾的占位符語法({page_number}{page}, {total_pages}{total-pages}) 7.更新 IronPdf 異常類型的錯誤處理程式碼 8.在啟動時增加 IronPdf 授權初始化功能

後遷移測試

轉移後,驗證這些方面:

  • 測試 PDF 輸出品質是否符合預期
  • 驗證 async 模式是否正常運作
  • 比較與先前輸出的渲染保真度
  • 測試所有範本變化是否能正確呈現
  • 驗證頁面設定(大小、方向、邊界)
  • 如果部署到 Linux 伺服器,請安裝 Linux 相依性

遷移到IronPDF的主要優點。

從PDFmyURL轉移到IronPDF提供了幾個關鍵優勢:

完全隱私:文件從未離開您的伺服器。 所有處理都在本機進行,消除敏感內容的資料安全疑慮。

一次性成本:永久授權選項可免除經常性的訂閱費用。 無論使用量多少,都不再需要每月付款。

離線功能:初始設定後,無需網路即可使用。網路中斷不會影響 PDF 的產生。

無速率限制:處理無限制的文件,沒有節流的顧慮。

更低的延遲時間:無網路開銷意味著更快的轉換速度,特別是對於高容量的應用程式。

完全控制:您控制處理環境,而非第三方服務。

現代 Chromium 引擎:使用與 Chrome 瀏覽器相同的渲染引擎,提供完整的 CSS3 與 JavaScript 支援。

主動開發:隨著 .NET 10 和 C# 14 的採用增加至 2026 年,IronPDF 的定期更新可確保與目前和未來的 .NET 版本相容。

結論

PDFmyURL 提供直接的雲端解決方案,可滿足少量 PDF 製作的需求。 然而,外部處理模式會造成隱私權疑慮、持續成本和依賴風險,許多生產應用程式都無法接受。

IronPdf 提供本機處理功能,可將敏感資料保留在伺服器上,以永久授權免除訂閱費用,並提供基於 Chromium 的現代化渲染引擎。遷移路徑簡單直接:取代 NuGet 套件、更新 setter 方法為強式類型的屬性,以及調整佔位符語法。

立即使用 免費試用 IronPDF 開始您的遷移,體驗本機 PDF 處理的優點。

如需全面的實施指導,請探索 IronPDF 文件教學

Curtis Chau
技術作家

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

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