如何使用 IronPDF 在 C# 中分割多頁 PDF | IronPDF
Winnovative在.NET PDF生成領域中一直是一個受認可的名稱,為C#應用程式提供HTML轉PDF的轉換功能。 然而,這個長期運行的Classic程式庫依賴於較舊的專屬渲染引擎,其對現代CSS(網格、最近的Flexbox)和現代JavaScript(ES2017+)的支持相比當前Chromium瀏覽器不一致。 供應商的回應是推出一個獨立的Chromium類產品,Winnovative.Pdf.Next,而不是在原地升級Classic — 這意味著現有的Winnovative客戶無論如何都要面臨程式碼遷移。
本指南為從Winnovative遷移到IronPDF提供了一條遷移路徑,包含步驟指導、程式碼比較和針對.NET開發者評估遷移的實際範例。
為什麼要從Winnovative遷移
Winnovative的Classic程式庫使用的較舊專屬引擎未更新到現代網頁標準:
**不一致的CSS網格/現代Flexbox:**依賴CSS網格或最近Flexbox功能的布局,相比當前Chromium瀏覽器可能會渲染不正確。
**現代JavaScript相容性差距:**ES2017+功能(箭頭函式、async/await、類)執行不可靠,這影響了React、Vue和其它現代框架。
**更新緩慢:**Classic引擎不頻繁接收渲染引擎更新; 供應商的答案是推出獨立的Winnovative.Pdf.Next Chromium類產品, 讓Classic功能凍結。
**雙產品遷移負擔:**轉移到Winnovative.Pdf.Next本身需要重寫—Next API存在於不同的命名空間(Winnovative.Pdf.Next)下,且與Classic二進制不相容。
**字體渲染邊緣情況:**網頁字體和自定義字體有時會與現代瀏覽器不同渲染。
實際影響
在Winnovative Classic中可能不一致渲染的現代CSS和JavaScript:
<!-- CSS Grid can render inconsistently inWinnovative Classic-->
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;">
<div>Column 1</div>
<div>Column 2</div>
<div>Column 3</div>
</div>
<!-- Modern JavaScript may not execute reliably in Classic -->
<script>
const items = data.map(item => item.name);
const result = await fetchData();
class Report { }
</script>
##IronPDFvs Winnovative:功能比較
了解結構差異有助於技術決策者評估遷移投資:
| 方面 | Winnovative Classic | IronPDF |
|---|---|---|
| 渲染引擎 | 較舊的專屬引擎 | Chromium(當前) |
| CSS Grid CSS 網格布局 | 不一致的 | 完全支援 |
| Flexbox | 在邊緣情況下不一致 | 完全支援 |
| JavaScript | 現代JavaScript有限 | ES2024 |
| Bootstrap 5 | 佈局問題 | 完全支援 |
| Tailwind CSS | 有限 | 完全支援 |
| React/Vue SSR | 有問題 | 運行 |
| 網頁字型 | 在某些設置下不可靠 | 完全支援 |
| 更新 | 不頻繁 | 每月 |
| 定價(每位開發者) | 450美元部署 / 1,200美元可再發布 | See ironpdf.com/pricing |
快速開始:從Winnovative到IronPDF的遷移
可以立即透過這些基本步驟開始遷移。
步驟 1:替換 NuGet 套件
移除所有Winnovative套件(驗證您的專案實際使用的):
# Remove Winnovative (Classic + related utilities)
dotnet remove package Winnovative.HtmlToPdf
# Also remove any of these your project references:
# dotnet remove package Winnovative.PdfMerge
# dotnet remove package Winnovative.PdfSecurity
# dotnet remove package Winnovative.Pdf.Next.Core
# dotnet remove package Winnovative.Client
安裝 IronPDF:
# Install IronPDF
dotnet add package IronPdf
步驟 2:更新命名空間
將Winnovative命名空間替換為IronPDF命名空間:
// Before (Winnovative)
using Winnovative;
using Winnovative.WebKit;
// After (IronPDF)
using IronPdf;Imports IronPdf步驟 3:初始化授權
在應用啓動時新增授權初始化:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"程式碼遷移範例
將HTML轉換為PDF
最常見的用例展示了這些.NET PDF程式庫之間的API差異。
Winnovative方法:
// NuGet: Install-Package Winnovative.HtmlToPdf
using Winnovative;
using System;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Convert HTML string to PDF
string htmlString = "<html><body><h1>Hello World</h1></body></html>";
byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(htmlString, "");
// Save to file
System.IO.File.WriteAllBytes("output.pdf", pdfBytes);
Console.WriteLine("PDF created successfully");
}
}
IronPDF 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
string htmlString = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
// Save to file
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}' NuGet: Install-Package IronPdf
Imports IronPdf
Imports System
Module Program
Sub Main()
' Create a PDF renderer
Dim renderer As New ChromePdfRenderer()
' Convert HTML string to PDF
Dim htmlString As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlString)
' Save to file
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End ModuleWinnovative需要建立一個ConvertHtml()以接收原始字節,並手動寫入文件。 IronPDF簡化了這一過程:建立一個SaveAs()方法。
如需進階 HTML 到 PDF 的場景,請參見 HTML 到 PDF 轉換指南。
將 URL 轉換為 PDF
URL到PDF的轉換顯示了類似的模式。
Winnovative方法:
// NuGet: Install-Package Winnovative.HtmlToPdf
using Winnovative;
using System;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Convert URL to PDF
string url = "https://www.example.com";
byte[] pdfBytes = htmlToPdfConverter.ConvertUrl(url);
// Save to file
System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes);
Console.WriteLine("PDF from URL created successfully");
}
}
IronPDF 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Convert URL to PDF
string url = "https://www.example.com";
var pdf = renderer.RenderUrlAsPdf(url);
// Save to file
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}' NuGet: Install-Package IronPdf
Imports IronPdf
Imports System
Module Program
Sub Main()
' Create a PDF renderer
Dim renderer As New ChromePdfRenderer()
' Convert URL to PDF
Dim url As String = "https://www.example.com"
Dim pdf = renderer.RenderUrlAsPdf(url)
' Save to file
pdf.SaveAs("webpage.pdf")
Console.WriteLine("PDF from URL created successfully")
End Sub
End ModuleWinnovative使用ConvertUrl()返回的字節必須手動保存。 IronPDF提供PdfDocument物件。
查看 URL 到 PDF 文件,了解認證和自定義標頭選項。
新增標題和頁腳
頁眉和頁腳顯示了顯著的架構差異。 Winnovative使用基於程式元素的方法使用TextElement物件,而IronPDF使用帶有佔位符標記的HTML基頁眉。
Winnovative方法:
// NuGet: Install-Package Winnovative.HtmlToPdf
using Winnovative;
using System;
using System.Drawing;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Enable header
htmlToPdfConverter.PdfDocumentOptions.ShowHeader = true;
htmlToPdfConverter.PdfHeaderOptions.HeaderHeight = 60;
// Add header text
TextElement headerText = new TextElement(0, 0, "Document Header", new Font("Arial", 12));
htmlToPdfConverter.PdfHeaderOptions.AddElement(headerText);
// Enable footer
htmlToPdfConverter.PdfDocumentOptions.ShowFooter = true;
htmlToPdfConverter.PdfFooterOptions.FooterHeight = 60;
// Add footer with page number
TextElement footerText = new TextElement(0, 0, "Page &p; of &P;", new Font("Arial", 10));
htmlToPdfConverter.PdfFooterOptions.AddElement(footerText);
// Convert HTML to PDF
string htmlString = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>";
byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(htmlString, "");
// Save to file
System.IO.File.WriteAllBytes("document.pdf", pdfBytes);
Console.WriteLine("PDF with header and footer created successfully");
}
}
IronPDF 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Configure header and footer
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 12
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page} of {total-pages}",
FontSize = 10
};
// Convert HTML to PDF
string htmlString = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
// Save to file
pdf.SaveAs("document.pdf");
Console.WriteLine("PDF with header and footer created successfully");
}
}' NuGet: Install-Package IronPdf
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Module Program
Sub Main()
' Create a PDF renderer
Dim renderer As New ChromePdfRenderer()
' Configure header and footer
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
.CenterText = "Document Header",
.FontSize = 12
}
renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
.CenterText = "Page {page} of {total-pages}",
.FontSize = 10
}
' Convert HTML to PDF
Dim htmlString As String = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlString)
' Save to file
pdf.SaveAs("document.pdf")
Console.WriteLine("PDF with header and footer created successfully")
End Sub
End ModuleWinnovative需要通過&P;佔位符。 IronPDF使用具有簡單屬性例如FontSize, 以及直覺的佔位符例如{total-pages}。
欲了解全面CSS樣式的HTML基頁眉,請參見頁眉和頁腳說明文件。
Winnovative API到IronPDF映射參考
此映射透過展示直接的 API 等價加速遷移:
| Winnovative類 | IronPDF等價 |
|---|---|
HtmlToPdfConverter | ChromePdfRenderer |
PdfDocument | PdfDocument |
PdfDocumentOptions | RenderingOptions |
PdfHeaderOptions | HtmlHeaderFooter |
PdfFooterOptions | HtmlHeaderFooter |
TextElement | HTML 在HtmlFragment |
ImageElement | HTML <img> |
方法映射
| Winnovative方法 | IronPDF方法 |
|---|---|
ConvertUrl(url) | RenderUrlAsPdf(url) |
ConvertUrlToFile(url, path) | RenderUrlAsPdf(url).SaveAs(path) |
ConvertHtml(html, baseUrl) | RenderHtmlAsPdf(html) |
ConvertHtmlToFile(html, path) | RenderHtmlAsPdf(html).SaveAs(path) |
ConvertHtmlFile(path) | RenderHtmlFileAsPdf(path) |
MergePdf(streams) | PdfDocument.Merge(pdfs) |
AppendPdf(pdf) | pdf1.AppendPdf(pdf2) |
選項映射
| Winnovative選項 | IronPDF 選項 |
|---|---|
PdfPageSize.A4 | PaperSize = PdfPaperSize.A4 |
PdfPageSize.Letter | PaperSize = PdfPaperSize.Letter |
PdfPageOrientation.Portrait | PaperOrientation = PdfPaperOrientation.Portrait |
PdfPageOrientation.Landscape | PaperOrientation = PdfPaperOrientation.Landscape |
TopMargin = 20 | MarginTop = 20 |
BottomMargin = 20 | MarginBottom = 20 |
LeftMargin = 15 | MarginLeft = 15 |
RightMargin = 15 | MarginRight = 15 |
ShowHeader = true | 設置HtmlHeader屬性 |
ShowFooter = true | 設置HtmlFooter屬性 |
JavaScriptEnabled = true | EnableJavaScript = true |
頁碼&p; | 頁碼{page} |
總頁數&P; | 總頁數{total-pages} |
常見遷移問題及解決方案
問題1:CSS佈局看起來不同
**症狀:**在Winnovative中看起來"還好"的佈局現在看起來在IronPDF中不同。
**原因:**Winnovative Classic較舊專屬引擎存在開發者所解決的渲染問題。 IronPDF的當前Chromium引擎正確渲染這些。
**解決方案:**移除Winnovative特定的CSS黑技使用標準CSS:
// Clean up legacy CSS
string cleanedHtml = html
.Replace("-webkit-flex", "flex")
.Replace("display: -webkit-box", "display: flex");Dim cleanedHtml As String = html _
.Replace("-webkit-flex", "flex") _
.Replace("display: -webkit-box", "display: flex")問題2:JavaScript沒有執行
**症狀:**動態內容沒有出現在PDF中。
**原因:**需要明確配置JavaScript等待選項。
解決方案:
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.JavaScript(5000);
// Or wait for specific element
renderer.RenderingOptions.WaitFor.HtmlElementById("content-ready", 10000);net問題3:基本URL不起作用
**症狀:**圖片和CSS的相對URL無法解析。
**原因:**IronPDF需要明確的基本URL配置。
解決方案:
renderer.RenderingOptions.BaseUrl = new Uri("https://example.com/");renderer.RenderingOptions.BaseUrl = New Uri("https://example.com/")問題4:不同的分頁
**症狀:**內容在不同點上分頁與Winnovative不同。
**原因:**不同的渲染引擎處理分頁不同。
**解決方案:**使用明確的CSS分頁控制:
/* Control page breaks explicitly */
.no-break {
page-break-inside: avoid;
}
.page-break-before {
page-break-before: always;
}
.page-break-after {
page-break-after: always;
}
問題5:字體看起來不同
**症狀:**文字顯示的字體與期望不同。
**原因:**IronPDF使用系統字體; 網頁字體需要明確載入。
解決方案:
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
body {
font-family: 'Roboto', Arial, sans-serif;
}
</style>
Winnovative遷移檢查表
遷移前任務
審核您的程式碼庫以確定所有Winnovative的使用:
# Find all Winnovative references
grep -r "Winnovative" --include="*.cs" .
grep -r "HtmlToPdfConverter" --include="*.cs" .
grep -r "PdfDocumentOptions" --include="*.cs" .
grep -r "ConvertUrl\|ConvertHtml" --include="*.cs" .
記錄當前配置,只包括頁面大小、邊距和頁眉/頁腳設置。 識別CSS黑技(webkit前綴,基於浮動的網格)可以移除。 註明JavaScript的相容性要求。
程式碼更新任務
- 移除Winnovative NuGet套件
- 安裝IronPDFNuGet 套件
- 更新所有命名空間導入從
IronPdf - 用
HtmlToPdfConverter - 將
RenderHtmlAsPdf() - 將
RenderUrlAsPdf() - 更新頁面大小/方向設置至
RenderingOptions - 轉換邊距配置
- 將基於
TextHeaderFooter - 將頁碼佔位符從
{total-pages} - 在啟動時新增IronPDF授權初始化
遷移後測試
遷移後,驗證以下方面:
- 測試基本的HTML到PDF轉換
- 測試 URL 到 PDF 的轉換
- 驗證CSS Grid布局正確渲染
- 驗證Flexbox布局正確渲染
- 使用現代ES6+語法測試JavaScript密集的頁面
- 驗證Bootstrap 5的相容性
- 測試頁首/頁尾渲染
- 驗證分頁斷點
- 比較PDF輸出質量
清理任務
- 移除Winnovative CSS的黑技(webkit前綴)
- 將ES5 JavaScript更新為現代語法
- 移除基於浮動的網格墊片
- 更新文件
遷移到IronPDF的關鍵好處
從Winnovative遷移到IronPDF提供了幾個關鍵優勢:
**現代渲染引擎:**IronPDF使用當前的Chromium引擎,確保全面的CSS3,CSS Grid,Flexbox和ES2024 JavaScript支持。 現代框架如Bootstrap 5,Tailwind CSS和React/Vue能夠正確渲染。
**簡化API:**HTML基頁眉和頁腳取代程式TextElement定位。 直覺的佔位符例如&p;語法。 內建的SaveAs()方法消除了手動字節處理。
**活躍的開發:**IronPDF的每月更新確保了與當前和即將推出的.NET版本的相容性。
**不帶黑技的現代CSS:**CSS Grid,Flexbox和現代字體無需webkit前綴或基於浮動的墊片工作。
**現代JavaScript:**ES6+功能包括箭頭函式、async/await、類和模塊正確執行。

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。