IRONSOFTWAREHOME
视频

如何使用 IronPDF 在 C# 中分割多页 PDF | IronPDF

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

Winnovative 一直是.NET PDF 生成领域公认的知名企业,为 C# 应用程序提供 HTML 到 PDF 的转换功能。 然而,长时间运行的经典库依赖于老式的专有渲染引擎,与当前的Chromium浏览器相比,其对现代CSS(网格、最近的Flexbox)和现代JavaScript(ES2017 +)的支持不一致。 供应商的回应是发布一个独立的Chromium级产品,Winnovative.Pdf.Next,而不是升级现有版本——这意味着现有的Winnovative客户无论如何都会面临代码迁移。

本指南为 .NET 开发人员提供从Winnovative迁移到IronPDF的路径,附带分步说明,代码比较和实际示例,供评估此过渡的开发者使用。

为什么要从 Winnovative 迁移?

Winnovative的经典库使用一个老式的专有引擎,尚未更新为现代网络标准:

**不一致的CSS网格/现代Flexbox:**依赖于CSS网格或最近Flexbox特性的布局与当前Chromium浏览器相比可能会呈现不正确。

**现代JavaScript兼容性差距:**ES2017+特性(箭头函数,异步/等待,类)无法可靠执行,这影响了React,Vue 和其他现代框架。

**节奏缓慢:**经典引擎不常更新渲染引擎; 供应商的答案是发布独立的Winnovative.Pdf.Next Chromium级产品,让Classic版本停止更新。

**双产品迁移负担:**迁移到Winnovative.Pdf.Next本身就是一次重写——Next API位于不同的命名空间(Winnovative.Pdf.Next)下,并且与Classic版本二进制不兼容。

**字体渲染边缘案例:**网络字体和自定义排版有时与现代浏览器渲染不同。

现实世界的影响

现代CSS和JavaScript在Winnovative Classic中可能呈现不一致:

<!-- 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>
HTML

##IronPDFvs Winnovative:功能对比

了解架构差异有助于技术决策者评估迁移投资:

方面Winnovative ClassicIronPDF
渲染引擎老式的专有引擎Chromium (当前)
CSS 网格不一致全面支持
Flexbox在边缘案例中不一致全面支持
JavaScript语言有限的现代JSES2024
Bootstrap 5.布局问题全面支持
Tailwind CSS 尾风 CSS有限的全面支持
React/VueSSR问题工作
网络字体在某些设置中不可靠全面支持
更新不经常每月
定价(每开发者)$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
SHELL

安装 IronPDF:

# Install IronPDF
dotnet add package IronPdf
SHELL

步骤 2:更新命名空间

用IronPDF命名空间替换Winnovative命名空间:

// Before (Winnovative)
using Winnovative;
using Winnovative.WebKit;

// After (IronPDF)
using IronPdf;

步骤 3:初始化许可证

在应用程序启动时添加许可证初始化:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

代码迁移示例

将HTML转换为PDF

最常见的使用案例展示了这些 .NET PDF 库之间的 API 差异。

创新方法:

// 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");
    }
}
C#

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");
    }
}

Winnovative要求创建一个SaveAs()方法。

有关 HTML 转 PDF 的高级应用场景,请参阅 HTML 转 PDF 指南

将 URL 转换为 PDF

URL 到 PDF 的转换显示出类似的模式。

创新方法:

// 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");
    }
}
C#

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");
    }
}

Winnovative使用ConvertUrl()返回的字节,必须手动保存。 IronPDF提供PdfDocument对象,以提供便利。

请浏览 URL to PDF 文档,了解身份验证和自定义页眉选项。

添加页眉和页脚

页眉和页脚显示了显著的架构差异。 Winnovative使用基于程序元素的TextElement对象,而IronPDF使用基于HTML的标题及占位符。

创新方法:

// 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");
    }
}
C#

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");
    }
}

Winnovative要求通过&P;占位符。 IronPDF使用具有简单属性如{total-pages}

有关基于 HTML 并带有完整 CSS 样式的页眉,请参阅 页眉和页脚文档

创新 API 到IronPDF映射参考

这种映射通过显示直接的 API 对应关系来加速迁移:

Winnovative ClassIronPDF 同等产品
HtmlToPdfConverterChromePdfRenderer
PdfDocumentPdfDocument
PdfDocumentOptionsRenderingOptions
PdfHeaderOptionsHtmlHeaderFooter
PdfFooterOptionsHtmlHeaderFooter
TextElementHtmlFragment中的HTML
ImageElementHTML <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.A4PaperSize = PdfPaperSize.A4
PdfPageSize.LetterPaperSize = PdfPaperSize.Letter
PdfPageOrientation.PortraitPaperOrientation = PdfPaperOrientation.Portrait
PdfPageOrientation.LandscapePaperOrientation = PdfPaperOrientation.Landscape
TopMargin = 20MarginTop = 20
BottomMargin = 20MarginBottom = 20
LeftMargin = 15MarginLeft = 15
RightMargin = 15MarginRight = 15
ShowHeader = true设置HtmlHeader属性
ShowFooter = true设置HtmlFooter属性
JavaScriptEnabled = trueEnableJavaScript = true
页码&p;页码{page}
总页数&P;总页数{total-pages}

常见迁移问题和解决方案

问题 1:CSS 布局看起来与众不同

**症状:**在 Winnovative 中看起来 "还行 "的布局,在IronPDF中看起来却不一样。

**原因:**Winnovative Classic的旧专有引擎有渲染问题,开发人员对此进行了修改。 IronPDF当前的Chromium引擎可以正确地呈现这些内容。

**解决方案:**删除 Winnovative 特有的 CSS hack,使用标准 CSS:

// Clean up legacy CSS
string cleanedHtml = 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);

问题 3:基础 URL 无法使用

**症状:**图像和 CSS 的相对 URL 无法解析。

**原因:**IronPDF 需要明确的基础 URL 配置。

解决方案:

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;
}
Text

问题 5:字体看起来不同

**症状:**文本显示的字体与预期的不同。

**原因:**IronPDF使用系统字体; 网络字体需要明确加载。

解决方案:

<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');

body {
    font-family: 'Roboto', Arial, sans-serif;
}
</style>
HTML

创新迁移清单

迁移前任务

审核您的代码库,确定所有 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" .
SHELL

记录当前配置,包括页面大小、页边距和页眉/页脚设置。 确定可以删除的 CSS 变通方法(webkit 前缀、浮动网格)。 请注意 JavaScript 兼容性要求。

代码更新任务

1.删除 Winnovative NuGet 软件包 2. 安装IronPDF NuGet包 3. 将所有命名空间导入从IronPdf 4. 用HtmlToPdfConverter 5. 将RenderHtmlAsPdf() 6. 将RenderUrlAsPdf() 7. 更新页面尺寸/方向设置为RenderingOptions 8.转换保证金配置 9. 将基于TextHeaderFooter 10. 将页码占位符从{total-pages} 11.在启动时添加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 和ES2024JavaScript。 现代框架,如 Bootstrap 5、Tailwind CSS 和 React/Vue 均能正确呈现。

**简化的API:**基于HTML的页眉和页脚取代了基于程序的TextElement定位。 像&p;语法。 内置的SaveAs()方法消除了手动字节处理的需要。

**积极开发:**IronPDF的每月更新确保与当前和未来的.NET版本的兼容性。

现代 CSS 无需变通方法: CSS Grid、Flexbox 和现代排版无需 webkit 前缀或基于浮动的回退方案即可工作。

现代 JavaScript: ES6+ 特性,包括箭头函数、async/await、类和模块,都能正确执行。

请注意: Winnovative 是其各自所有者的注册商标。 此网站与Winnovative Software公司没有关联、认可或赞助。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映撰写时公开可用的信息。
Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户