跳至页脚内容
视频

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

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中可能呈现不一致:


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

<script>
const items = data.map(item => item.name);
const result = await fetchData();
class Report { }
</script>

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

<script>
const items = data.map(item => item.name);
const result = await fetchData();
class Report { }
</script>
HTML

IronPDFvs Winnovative:功能对比

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

方面 Winnovative Classic IronPDF
渲染引擎 老式的专有引擎 Chromium (当前)
CSS 网格 不一致 全面支持
Flexbox 在边缘案例中不一致 全面支持
JavaScript语言 有限的现代JS ES2024
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
# 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
# Install IronPDF
dotnet add package IronPdf
SHELL

步骤 2:更新命名空间

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

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

// After (IronPDF)
using IronPdf;
// Before (Winnovative)
using Winnovative;
using Winnovative.WebKit;

// After (IronPDF)
using IronPdf;
Imports IronPdf
$vbLabelText   $csharpLabel

步骤 3:初始化许可证

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

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

代码迁移示例

将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");
    }
}
// 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");
    }
}
Imports Winnovative
Imports System

Module Program
    Sub Main()
        ' Create the HTML to PDF converter
        Dim htmlToPdfConverter As New HtmlToPdfConverter()

        ' Set license key
        htmlToPdfConverter.LicenseKey = "your-license-key"

        ' Convert HTML string to PDF
        Dim htmlString As String = "<html><body><h1>Hello World</h1></body></html>"
        Dim pdfBytes As Byte() = htmlToPdfConverter.ConvertHtml(htmlString, "")

        ' Save to file
        System.IO.File.WriteAllBytes("output.pdf", pdfBytes)

        Console.WriteLine("PDF created successfully")
    End Sub
End Module
$vbLabelText   $csharpLabel

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

Class Program
    Shared 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 Class
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports Winnovative
Imports System

Module Program
    Sub Main()
        ' Create the HTML to PDF converter
        Dim htmlToPdfConverter As New HtmlToPdfConverter()

        ' Set license key
        htmlToPdfConverter.LicenseKey = "your-license-key"

        ' Convert URL to PDF
        Dim url As String = "https://www.example.com"
        Dim pdfBytes As Byte() = htmlToPdfConverter.ConvertUrl(url)

        ' Save to file
        System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes)

        Console.WriteLine("PDF from URL created successfully")
    End Sub
End Module
$vbLabelText   $csharpLabel

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

Class Program
    Shared 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 Class
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports Winnovative
Imports System
Imports System.Drawing

Module Program
    Sub Main()
        ' Create the HTML to PDF converter
        Dim htmlToPdfConverter As New HtmlToPdfConverter()

        ' Set license key
        htmlToPdfConverter.LicenseKey = "your-license-key"

        ' Enable header
        htmlToPdfConverter.PdfDocumentOptions.ShowHeader = True
        htmlToPdfConverter.PdfHeaderOptions.HeaderHeight = 60

        ' Add header text
        Dim headerText As 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
        Dim footerText As New TextElement(0, 0, "Page &p; of &P;", New Font("Arial", 10))
        htmlToPdfConverter.PdfFooterOptions.AddElement(footerText)

        ' 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 pdfBytes As Byte() = htmlToPdfConverter.ConvertHtml(htmlString, "")

        ' Save to file
        System.IO.File.WriteAllBytes("document.pdf", pdfBytes)

        Console.WriteLine("PDF with header and footer created successfully")
    End Sub
End Module
$vbLabelText   $csharpLabel

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
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");
    }
}
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 Module
$vbLabelText   $csharpLabel

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

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

创新 API 到IronPDF映射参考

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

Winnovative Class IronPDF 同等产品
HtmlToPdfConverter ChromePdfRenderer
PdfDocument PdfDocument
PdfDocumentOptions RenderingOptions
PdfHeaderOptions HtmlHeaderFooter
PdfFooterOptions HtmlHeaderFooter
TextElement HtmlFragment中的HTML
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 hack,使用标准 CSS:

// Clean up legacy CSS
string cleanedHtml = html
    .Replace("-webkit-flex", "flex")
    .Replace("display: -webkit-box", "display: flex");
// 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")
$vbLabelText   $csharpLabel

问题 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);
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.JavaScript(5000);
// Or wait for specific element
renderer.RenderingOptions.WaitFor.HtmlElementById("content-ready", 10000);
$vbLabelText   $csharpLabel

问题 3:基础 URL 无法使用

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

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

解决方案:

renderer.RenderingOptions.BaseUrl = new Uri("https://example.com/");
renderer.RenderingOptions.BaseUrl = new Uri("https://example.com/");
renderer.RenderingOptions.BaseUrl = New Uri("https://example.com/")
$vbLabelText   $csharpLabel

问题 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>
<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" .
# 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 软件包

  1. 安装IronPDF NuGet包
  2. 将所有命名空间导入从IronPdf
  3. HtmlToPdfConverter
  4. RenderHtmlAsPdf()
  5. RenderUrlAsPdf()
  6. 更新页面尺寸/方向设置为RenderingOptions 8.转换保证金配置
  7. 将基于TextHeaderFooter
  8. 将页码占位符从{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。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我