跳至页脚内容
产品比较

IronPDF vs Accusoft PDF Viewer:哪个C#库最适合HTML到PDF转换?

IronPDF和Accusoft PDF Viewer都可以在.NET中将HTML转换为PDF。 IronPDF提供简单的语法、本地处理且无需云依赖,从$699起进行无限制转换。而Accusoft需要互联网连接,并按交易收费。

## 比较 IronPDF 与 Accusoft PDF Viewer
  • 将 HTML 转换为 PDF
  • 为 PDF 文件设置页眉和页脚
  • 将 PDF 转换为图像文件
  • 比较许可、免费试用选项等

概述

什么是IronPDF及其工作原理?

IronPDF是一个C# HTML到PDF库,使开发人员能够从源创建PDF文件,如HTML字符串网页URL。 它还允许设置属性,如水印书签页眉和页脚。 此外,开发人员可以将多个PDF文件合并为一个,或将PDF页面转换为图像,反之亦然,使用图像到PDF转换

IronPDF对开发是免费的,并为实时项目提供30天部署试用。 它提供完整的文档代码示例API参考,帮助开发人员快速入门。

Developers can download a file project from this link.

What Is Accusoft PrizmDoc Viewer and How Does It Work?

PrizmDoc Viewer是一个REST API,与PDF文件一起工作,并远程将其转换为其他格式。 PrizmDoc 可以将超过100种不同文件格式转换为PDF,并将PDF转换为PNG、JPGTIFF和SVG。 它还为应用程序提供各种电子签名选项

How Do IronPDF and PrizmDoc Viewer Compare?

IronPDF `PrizmDoc` Viewer
Work with [PDF files programmatically](/how-to/csharp-parse-pdf/). 以编程方式处理 PDF 文件。
Supports [.NET Core](/docs/) with [Windows](/get-started/windows/), [Mac](/get-started/macos/), or [Linux](/get-started/linux/). 支持使用 Windows、Mac 或 Linux 的 .NET Core。
[Works Locally](/get-started/installation-overview/) Sends Documents to a [remote server](/get-started/ironpdfengine/).
Work with or without [Asynchronous Programming](/how-to/async/). Must use Asynchronous Programming with `System.Threading.Tasks`.
Works offline once [installed](/get-started/installation-overview/). Requires internet connection for `PrizmDoc` server requests.
Provides many [predefined functions](/features/). 提供一些预定义的功能。
Often requires [minimal lines of code](/tutorials/html-to-pdf/). 通常需要许多行代码。
[无限 conversions](/licensing/) per project in each license. 云托管许可中的交易有限。
[Free for development](/get-started/quickstart/) without time limits. 仅有 300 笔交易可试用。

让我们安装这两个库并比较代码。


第 1 步:安装

如何在我的.NET项目中安装IronPDF?

在项目中安装IronPDF有两种方式,两种方式没有差别。 IronPDF支持多种环境,包括Azure部署AWS LambdaDocker容器Blazor应用程序

下载IronPDF的不同方式是什么?

下载IronPDF.dll并将其引用添加到项目中。 开发人员还可以使用Windows安装程序进行系统范围的安装。 之后,可以使用以下方式访问IronPdf命名空间:

using IronPdf;
using IronPdf;
$vbLabelText   $csharpLabel

现在,开发人员可以轻松访问IronPDF提供的函数和类,包括用于渲染的ChromePdfRendererPDF文档操作安全功能

如何通过NuGet包管理器安装IronPDF?

  • 软件包管理器控制台:

    如果使用包管理器控制台,请运行以下命令:

    _CODEBLOCK1

  • 管理解决方案的软件包:

    如果使用NuGet包管理器 GUI,请在搜索栏中浏览IronPDF并安装。 有关高级安装选项,包括LinuxmacOSWindows的特定平台包,请查阅安装指南


How Do I Install PrizmDoc Viewer from Accusoft?

PrizmDoc Viewer有两个部分:一个服务器端组件称为PrizmDoc Server,表现为RESTful API,和一个客户端项目,发送请求到API并接收响应。 与没有外部依赖本地运行的IronPDF不同,PrizmDoc需要网络连接以进行基于云的操作。

How Can I Access the PrizmDoc Server?

PrizmDoc服务器是一个服务器端应用程序,它接收包含文档的基本信息作为请求(输入),将文档转换为PDF文件,然后将转换后的PDF文件返回作为响应(输出)。 它作为产品的技术核心——一个文档处理和转换引擎。开发人员可以通过两种不同方法使用它,这两种方法具有相同的编程结构和技术:

1.自行托管:

此选项需要安排一个服务器。 下载PrizmDoc服务器然后安装它。 阅读更多关于如何在Windows上安装PrizmDoc服务器的信息。

注意: 它需要至少32 GB RAM和4核CPU以提高性能。 相比之下,IronPDF的系统要求要低得多。

2.云托管:

这种基于云的服务消除了安排服务器的需要。 要使用此选项,请创建一个账户并从首页的API key

首先,让我们检查与PrizmDoc Viewer一起工作的基本结构,以通过C#控制台应用程序使用Accusoft server直接与其交互,将文档转换为PDF文件。

注意:以下示例演示PrizmDoc如何在概念上处理PDF文件。 它很长,所以可以跳过这个例子,直接继续对比

Accusoft的工作结构是如何运作的?

这个例子将sample.pdf。 与IronPDF的简单HTML到PDF转换不同,PrizmDoc需要多次API调用。

注意:必须在项目中安装并引用Newtonsoft.Json库。

首先,将以下库添加到项目中:

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq; // Install Newtonsoft.Json via NuGet Package Manager
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq; // Install Newtonsoft.Json via NuGet Package Manager
$vbLabelText   $csharpLabel

然后创建一个公共变量Accusoft API Key并将API密钥粘贴在其中:

static string ApiKey = "Your-API-KEY";
static string ApiKey = "Your-API-KEY";
$vbLabelText   $csharpLabel

使用PrizmDoc Viewer处理PDF文件有三个步骤:

  1. 将文件上传到PrizmDoc服务器。 2.转换上传的文件。
  2. PrizmDoc服务器下载转换后的文件。

每个步骤都有一个单独的函数处理:

static void Main(string[] args)
{
    //---Upload file to Server---
    JObject uploadResults = UploadToServer("myWebpage.html").Result;
    string fileID = (string)uploadResults.SelectToken("fileId");
    string affinityToken = (string)uploadResults.SelectToken("affinityToken");

    //---Convert the uploaded file to PDF---
    JObject convertResults = Convert(affinityToken, fileID).Result;
    string processId = (string)convertResults.SelectToken("processId");
    affinityToken = (string)convertResults.SelectToken("affinityToken");

    //---Check the status that conversion is completed---
    JObject convertStatusResults = ConvertStatus(processId, affinityToken).Result;
    string convertStatus = (string)convertStatusResults.SelectToken("state");

    //---Continuously checking whether conversion completed---
    while (!(convertStatus.Equals("complete")))
    {
        System.Threading.Thread.Sleep(30000);
        convertStatusResults = ConvertStatus(processId, affinityToken).Result;
        convertStatus = (string)convertStatusResults.SelectToken("state");
    }

    //---Download the converted file from server---
    string newFileID = (string)convertStatusResults.SelectToken("output.results[0].fileId");
    DownloadFromServer(affinityToken, newFileID, "sample.pdf").Wait();

    Console.WriteLine("PDF file created successfully...!");
    Console.ReadKey();
}
static void Main(string[] args)
{
    //---Upload file to Server---
    JObject uploadResults = UploadToServer("myWebpage.html").Result;
    string fileID = (string)uploadResults.SelectToken("fileId");
    string affinityToken = (string)uploadResults.SelectToken("affinityToken");

    //---Convert the uploaded file to PDF---
    JObject convertResults = Convert(affinityToken, fileID).Result;
    string processId = (string)convertResults.SelectToken("processId");
    affinityToken = (string)convertResults.SelectToken("affinityToken");

    //---Check the status that conversion is completed---
    JObject convertStatusResults = ConvertStatus(processId, affinityToken).Result;
    string convertStatus = (string)convertStatusResults.SelectToken("state");

    //---Continuously checking whether conversion completed---
    while (!(convertStatus.Equals("complete")))
    {
        System.Threading.Thread.Sleep(30000);
        convertStatusResults = ConvertStatus(processId, affinityToken).Result;
        convertStatus = (string)convertStatusResults.SelectToken("state");
    }

    //---Download the converted file from server---
    string newFileID = (string)convertStatusResults.SelectToken("output.results[0].fileId");
    DownloadFromServer(affinityToken, newFileID, "sample.pdf").Wait();

    Console.WriteLine("PDF file created successfully...!");
    Console.ReadKey();
}
$vbLabelText   $csharpLabel

1.将文件上传到服务器: 2.

public static async Task<JObject> UploadToServer(string fileToUpload)
{
    FileInfo input = new FileInfo(fileToUpload);
    if (input == null)
    {
        throw new ArgumentException("Missing parameter input", nameof(input));
    }
    var fileName = input.Name;
    var endpoint = new Uri("___PROTECTED_URL_123___");
    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Content-Type", "application/octet-stream");
        using (var reader = new BinaryReader(input.OpenRead()))
        {
            var data = reader.ReadBytes((int)reader.BaseStream.Length);
            var results = await client.UploadDataTaskAsync(endpoint, "POST", data);
            string getResult = Encoding.ASCII.GetString(results);
            return JObject.Parse(getResult);
        }
    }
}
public static async Task<JObject> UploadToServer(string fileToUpload)
{
    FileInfo input = new FileInfo(fileToUpload);
    if (input == null)
    {
        throw new ArgumentException("Missing parameter input", nameof(input));
    }
    var fileName = input.Name;
    var endpoint = new Uri("___PROTECTED_URL_123___");
    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Content-Type", "application/octet-stream");
        using (var reader = new BinaryReader(input.OpenRead()))
        {
            var data = reader.ReadBytes((int)reader.BaseStream.Length);
            var results = await client.UploadDataTaskAsync(endpoint, "POST", data);
            string getResult = Encoding.ASCII.GetString(results);
            return JObject.Parse(getResult);
        }
    }
}
$vbLabelText   $csharpLabel

2.将上传的文件转换为 PDF:

public static async Task<JObject> Convert(string affinityToken, string fileID)
{
    var endpoint = new Uri("___PROTECTED_URL_124___");
    using (var client = new WebClient())
    {
        client.Headers.Add("Content-Type", "application/json");
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        JObject myJson =
            new JObject(
                new JProperty("input",
                    new JObject(
                        new JProperty("sources",
                            new JArray(
                                new JObject(
                                    new JProperty("fileId", fileID)
                                )
                            )
                        ),
                        new JProperty("dest",
                            new JObject(
                                new JProperty("format", "pdf")
                            )
                        )
                    )
                )
            );
        string results = await client.UploadStringTaskAsync(endpoint, "POST", myJson.ToString());
        return JObject.Parse(results);
    }
}
public static async Task<JObject> Convert(string affinityToken, string fileID)
{
    var endpoint = new Uri("___PROTECTED_URL_124___");
    using (var client = new WebClient())
    {
        client.Headers.Add("Content-Type", "application/json");
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        JObject myJson =
            new JObject(
                new JProperty("input",
                    new JObject(
                        new JProperty("sources",
                            new JArray(
                                new JObject(
                                    new JProperty("fileId", fileID)
                                )
                            )
                        ),
                        new JProperty("dest",
                            new JObject(
                                new JProperty("format", "pdf")
                            )
                        )
                    )
                )
            );
        string results = await client.UploadStringTaskAsync(endpoint, "POST", myJson.ToString());
        return JObject.Parse(results);
    }
}
$vbLabelText   $csharpLabel

下面的JSON是myJson对象的结果值:

{
  "input": {
    "sources": 
    [
      {"fileId": "Auto Generated FileId Value"}
    ],
    "dest": {
      "format": "pdf"
    }
  }
}

检查转换是否完成

public static async Task<JObject> ConvertStatus(string processId, string affinityToken)
{
    string endpoint = "___PROTECTED_URL_125___" + processId;
    using (var client = new WebClient())
    {
        client.BaseAddress = endpoint;
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        string results = await client.DownloadStringTaskAsync(endpoint);
        return JObject.Parse(results);
    }
}
public static async Task<JObject> ConvertStatus(string processId, string affinityToken)
{
    string endpoint = "___PROTECTED_URL_125___" + processId;
    using (var client = new WebClient())
    {
        client.BaseAddress = endpoint;
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        string results = await client.DownloadStringTaskAsync(endpoint);
        return JObject.Parse(results);
    }
}
$vbLabelText   $csharpLabel

3.从服务器下载转换后的文件

public static async Task DownloadFromServer(string affinityToken, string fileId, string outfile)
{
    var endpoint = new Uri("___PROTECTED_URL_126___" + fileId);

    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        FileInfo output = new FileInfo(outfile);

        using (var writeStream = output.Create())
        {
            var results = await client.DownloadDataTaskAsync(endpoint);
            await writeStream.WriteAsync(results, 0, results.Length);
        }
    }
}
public static async Task DownloadFromServer(string affinityToken, string fileId, string outfile)
{
    var endpoint = new Uri("___PROTECTED_URL_126___" + fileId);

    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        FileInfo output = new FileInfo(outfile);

        using (var writeStream = output.Create())
        {
            var results = await client.DownloadDataTaskAsync(endpoint);
            await writeStream.WriteAsync(results, 0, results.Length);
        }
    }
}
$vbLabelText   $csharpLabel

上述示例需要大量精力。 为了减轻工作量,Accusoft推出了一个名为Accusoft.PrizmDocServerSDK的.NET库,这是PrizmDoc Server REST API 的一个封装。 让我们看看如何在.NET项目中安装和使用这个库。

How Do I Install Accusoft.PrizmDocServerSDK?

有两种安装包装器的方法。

  • 软件包管理器控制台:

    如果使用包管理器控制台,请运行以下命令:

    _CODEBLOCK10

  • 管理解决方案的软件包:

    如果使用NuGet包管理器GUI,请在搜索栏中查找Accusoft.PrizmDocServerSDK并安装它。

现在,开发人员可以轻松访问Accusoft.PrizmDocServer命名空间并使用它:

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer;
$vbLabelText   $csharpLabel

教程

IronPDF与PrizmDoc Viewer在代码示例中的比较如何?

在审查了两个组件的介绍和安装后,是时候与两者一起工作了。 以下用例展示了使用这两个组件的实现,帮助理解编程结构,并确定哪一个最适合项目需求。


如何使用IronPDF转换HTML为PDF与PrizmDoc Viewer?

在这个比较中,让我们将一个名为myWebPage.html的网页转换为PDF文件并将其保存到目标位置。 IronPDF的Chrome渲染引擎提供像素完美的转换,完全支持CSSJavaScriptweb字体

IronPDF如何将HTML转换为PDF?

using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Render HTML file to PDF
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Render HTML file to PDF
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
$vbLabelText   $csharpLabel

上述代码创建bin>debug文件夹中。 IronPDF还支持HTML字符串URL,甚至是包含HTML的ZIP文件作为输入源。

开发人员还可以指定这个位置:PDF.SaveAs("E:/sample.pdf");,或者保存到内存流中以进行云部署。

阅读更多关于使用IronPDF处理PDF文件的信息。

现在,使用PrizmDoc Viewer执行相同的任务以作比较。

PrizmDoc Viewer如何将HTML转换为PDF?

PrizmDoc Viewer安装部分中,讨论了如何获取Accusoft API Key。 以下是如何使用它的方法。

首先,向PrizmDoc服务器发送请求并接收响应。 这个过程需要时间,需要异步编程。 IronPDF也支持异步方法以提高性能。

注意:使用PrizmDoc Viewer的云服务创建PDF文件时,请确保系统连接到互联网。

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ChromePdfRenderer().GetAwaiter().GetResult();
}

private static async Task ChromePdfRenderer()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_127___", "Your-API-KEY");
    // Specify HTML file and convert it to a PDF.
    ConversionResult result = await prizmDocServer.ConvertToPdfAsync("myWebPage.html");
    // Save PDF file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ChromePdfRenderer().GetAwaiter().GetResult();
}

private static async Task ChromePdfRenderer()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_127___", "Your-API-KEY");
    // Specify HTML file and convert it to a PDF.
    ConversionResult result = await prizmDocServer.ConvertToPdfAsync("myWebPage.html");
    // Save PDF file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
$vbLabelText   $csharpLabel

阅读更多关于使用PrizmDoc Viewer的信息。

哪个库提供更简单的HTML到PDF转换?

这些示例表明,IronPDF提供了更简单的方法来创建PDF文件,并且需要更少的时间。IronPDF还提供渲染选项以进行输出的微调,包括自定义纸张尺寸边距视口设置


在使用IronPDF和PrizmDoc Viewer进行图像转PDF的比较中如何?"

此比较演示如何从debug文件夹中的图像创建PDF文件。 开发人员从IronPDF开始。

IronPDF如何将图像转换为PDF?

using IronPdf;

static void Main(string[] args)
{
    // Specify the image to be converted
    using var converted = ImageToPdfConverter.ImageToPdf("google.png");
    // Save PDF file to the target location
    converted.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Specify the image to be converted
    using var converted = ImageToPdfConverter.ImageToPdf("google.png");
    // Save PDF file to the target location
    converted.SaveAs("sample.pdf");
}
$vbLabelText   $csharpLabel

IronPDF还支持多帧TIFF转换嵌入来自Azure Blob存储的图像Base64图像嵌入

输出:

此截图显示上述代码创建的新的PDF文件sample.pdf

PDF文档显示Google徽标居中白色背景,展示了IronPDF的图像转PDF转换能力。

使用IronPDF从图像创建PDF文件很简单。 现在,让我们使用PrizmDoc Viewer执行相同的任务并检查其生成的PDF文件。

PrizmDoc Viewer如何将图像转换为PDF?

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ImageToPDF().GetAwaiter().GetResult();
}

private static async Task ImageToPDF()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_128___", "Your-API-KEY");
    // Specify the image to be converted
    ConversionResult results = await prizmDocServer.ConvertToPdfAsync("google.png");
    // Save PDF file to the target location
    await results.RemoteWorkFile.SaveAsync("sample.pdf");
}
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ImageToPDF().GetAwaiter().GetResult();
}

private static async Task ImageToPDF()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_128___", "Your-API-KEY");
    // Specify the image to be converted
    ConversionResult results = await prizmDocServer.ConvertToPdfAsync("google.png");
    // Save PDF file to the target location
    await results.RemoteWorkFile.SaveAsync("sample.pdf");
}
$vbLabelText   $csharpLabel

输出:此截图显示以上代码创建的新的PDF文件sample.pdf

PDF viewer displaying the Google logo on a gray background, showing `PrizmDoc`'s image conversion result

哪个库需要更少的代码进行图像到PDF转换?

IronPDF只需要两行代码。 相比之下,使用PrizmDoc服务器需要更多行代码并使用异步编程。 IronPDF的输出也自动提供了一个可用的全页面文档。 IronPDF提供附加选项可用于图像定位多个图像转换


如何在使用IronPDF和PrizmDoc Viewer合并多个PDF文件的比较中?"

在这个比较中,假设存在三个名为C.pdf的PDF文件。 任务是要将它们合并为一个PDF文件。 这两个组件都可以执行此任务。 首先,示例显示如何使用IronPDF执行此操作。

IronPDF如何合并PDF文件?

using IronPdf;
using System.Collections.Generic;

static void Main(string[] args)
{
    // Create rendering converter  
    var Renderer = new IronPdf.ChromePdfRenderer();
    // Create a list of pdf files
    var PDFs = new List<PdfDocument>();
    PDFs.Add(PdfDocument.FromFile("A.pdf"));
    PDFs.Add(PdfDocument.FromFile("B.pdf"));
    PDFs.Add(PdfDocument.FromFile("C.pdf"));
    // Merge the list of pdf file
    using PdfDocument PDF = PdfDocument.Merge(PDFs);
    // Save merged file to the target location
    PDF.SaveAs("sample.pdf");

    foreach(var pdf in PDFs)
    {
        pdf.Dispose();
    }
}
using IronPdf;
using System.Collections.Generic;

static void Main(string[] args)
{
    // Create rendering converter  
    var Renderer = new IronPdf.ChromePdfRenderer();
    // Create a list of pdf files
    var PDFs = new List<PdfDocument>();
    PDFs.Add(PdfDocument.FromFile("A.pdf"));
    PDFs.Add(PdfDocument.FromFile("B.pdf"));
    PDFs.Add(PdfDocument.FromFile("C.pdf"));
    // Merge the list of pdf file
    using PdfDocument PDF = PdfDocument.Merge(PDFs);
    // Save merged file to the target location
    PDF.SaveAs("sample.pdf");

    foreach(var pdf in PDFs)
    {
        pdf.Dispose();
    }
}
$vbLabelText   $csharpLabel

上述代码创建C.pdf组合在一起。 IronPDF还支持在PDF之间添加和复制页面拆分PDF

现在,让我们使用PrizmDoc Viewer执行相同的任务。

PrizmDoc Viewer如何合并PDF文件?

using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfMerge().GetAwaiter().GetResult();
}

private static async Task PdfMerge()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_129___", "Your-API-KEY");
    // Pass the list of pdf files to PrizmDoc Server
    ConversionResult result = await prizmDocServer.CombineToPdfAsync(
        new []
        {
            new ConversionSourceDocument("A.pdf"),
            new ConversionSourceDocument("B.pdf"),
            new ConversionSourceDocument("C.pdf"),
        });
    // Save merged file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfMerge().GetAwaiter().GetResult();
}

private static async Task PdfMerge()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_129___", "Your-API-KEY");
    // Pass the list of pdf files to PrizmDoc Server
    ConversionResult result = await prizmDocServer.CombineToPdfAsync(
        new []
        {
            new ConversionSourceDocument("A.pdf"),
            new ConversionSourceDocument("B.pdf"),
            new ConversionSourceDocument("C.pdf"),
        });
    // Save merged file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
$vbLabelText   $csharpLabel

上述代码也创建了一个C.pdf文件组合在一起。


如何在使用IronPDF和PrizmDoc Viewer中添加页眉和页脚到PDF中?"

在这个比较中,假设存在一个简单的myWebPage.html,包含以下HTML和CSS:

<html>
<head>
    <style>
        li {
            font-size: x-large;
            color: rgba(156, 89, 13, 0.897);
            list-style: square;
        }
    </style>
</head>
<body>
    <h1 style="text-align: center;">Hello World..!</h1>
    <h1>Main Menu</h1>
    <ul>
        <li>SubMenu 1</li>
        <li>SubMenu 2</li>
        <li>SubMenu 3</li>
        <li>SubMenu 4</li>
        <li>SubMenu 5</li>
    </ul>
</body>
</html>
<html>
<head>
    <style>
        li {
            font-size: x-large;
            color: rgba(156, 89, 13, 0.897);
            list-style: square;
        }
    </style>
</head>
<body>
    <h1 style="text-align: center;">Hello World..!</h1>
    <h1>Main Menu</h1>
    <ul>
        <li>SubMenu 1</li>
        <li>SubMenu 2</li>
        <li>SubMenu 3</li>
        <li>SubMenu 4</li>
        <li>SubMenu 5</li>
    </ul>
</body>
</html>
HTML

目标是将此WebPage转换为PDF文件,具有以下页眉和页脚属性:

  • Page Title在页眉的左侧
  • DateTime在页眉的右侧
  • Page Number of Total Pages在页脚的右侧

首先,让我们检查IronPDF如何处理页眉和页脚。

IronPDF如何处理PDF页眉和页脚?

为了处理PDF文件的页眉和页脚,IronPDF在RenderingOptions,可以如下使用:

  • 供标题:

    _CODEBLOCK19

  • 页脚:

    _CODEBLOCK20

初始化TextHeaderFooter()时可以设置以下属性:

  • CenterText将文本打印在页眉或页脚的中间
  • LeftText将文本打印在页眉或页脚的左侧
  • RightText将文本打印在页眉或页脚的右侧
  • DrawDividerLine绘制一条分隔页面内容与页眉或页脚的线
  • FontFamily指定页眉或页脚的字体家族
  • FontSize指定页眉或页脚的字体大小
  • Spacing调整页面内容与页眉或页脚之间的空间

以下预定义属性有助于设置页眉或页脚内容。 它们以花括号{ }编写:

  • {page}在页眉或页脚中打印当前页码
  • {total-pages}在页眉或页脚中打印总页数
  • {url}在页眉或页脚中打印渲染页面的URL
  • {date}在页眉或页脚中打印当前日期
  • {time}在页眉或页脚中打印当前时间
  • {html-title}在页眉或页脚中打印渲染网页的标题
  • {pdf-title}在页眉或页脚中打印文档标题

阅读更多关于使用IronPDF处理页眉和页脚的详细信息。 IronPDF还支持更多复杂设计的HTML页眉和页脚

示例示范了如何根据用例实现并演示如何使用上述属性:

using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Setting Header properties
    converter.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        DrawDividerLine = true,
        LeftText = "Page Title",
        RightText = "{date} {time}",
        FontSize = 13
    };
    // Setting footer properties
    converter.RenderingOptions.TextFooter = new TextHeaderFooter()
    {
        RightText = "Page {page} of {total-pages}",
        FontSize = 12
    };
    // Specify the file to be converted
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Setting Header properties
    converter.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        DrawDividerLine = true,
        LeftText = "Page Title",
        RightText = "{date} {time}",
        FontSize = 13
    };
    // Setting footer properties
    converter.RenderingOptions.TextFooter = new TextHeaderFooter()
    {
        RightText = "Page {page} of {total-pages}",
        FontSize = 12
    };
    // Specify the file to be converted
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
$vbLabelText   $csharpLabel

输出:上述代码创建的PDF文件sample.pdf的新截图:

PDF文档包含自定义页眉,显示

使用IronPDF处理页眉和页脚涉及直观语言,同时创建PDF文件。 现在,示例显示PrizmDoc Viewer如何处理页眉和页脚。

PrizmDoc Viewer如何处理PDF页眉和页脚?

PrizmDoc Viewer提供了HeaderFooterOptions类来处理页眉和页脚,具有以下属性:

  • Lines指定页眉和页脚的行,每一行具有以下属性:
    • Left 在页眉或页脚行的左侧打印文本
    • Center 在页眉或页脚行的中间打印文本
    • Right 在页眉或页脚行的右侧打印文本
  • FontFamily指定页眉或页脚文本的字体系列
  • FontSize指定页眉或页脚文本的字体大小
  • Color指定页眉或页脚文本的颜色

阅读更多关于使用PrizmDoc服务器设置PDF页面的页眉和页脚。

示例展示了如何使用上述属性实现用例:

using System.Threading.Tasks;
using System.Collections.Generic;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    SetHeaderFooter().GetAwaiter().GetResult();
}

private static async Task SetHeaderFooter()
{
    // Instantiate PrizmDocServerClient object with Header and footer properties
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_130___", "Your-API-KEY");

    ConversionResult result = await prizmDocServer.ConvertToPdfAsync(
        "myWebPage.html",
        header: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Left = "Page Title", Right = DateTime.Now.ToString() }
            },
        },
        footer: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Right = "Page {{pageNumber}} of {{pageCount}}" },
            },
        });

    // Save to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using System.Threading.Tasks;
using System.Collections.Generic;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    SetHeaderFooter().GetAwaiter().GetResult();
}

private static async Task SetHeaderFooter()
{
    // Instantiate PrizmDocServerClient object with Header and footer properties
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_130___", "Your-API-KEY");

    ConversionResult result = await prizmDocServer.ConvertToPdfAsync(
        "myWebPage.html",
        header: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Left = "Page Title", Right = DateTime.Now.ToString() }
            },
        },
        footer: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Right = "Page {{pageNumber}} of {{pageCount}}" },
            },
        });

    // Save to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
$vbLabelText   $csharpLabel

输出:

上述代码创建的新PDF文件的截图:

PDF with header showing 'Page Title' and timestamp, comparing `PrizmDoc`'s header/footer implementation

哪个库为页眉和页脚提供更多灵活性?

IronPDF提供了更多的功能来设置页眉和页脚属性,并且与PrizmDoc Viewer相比,编程结构更加简单。 IronPDF生成的PDF文件也比PrizmDoc Viewer生成的文件更易读,更吸引人。IronPDF还支持页码分页符以改进文档控制。


如何在使用IronPDF和PrizmDoc Viewer中将PDF页面转换为图像的比较中?"

在这个比较中,假设您有一个名为Sample_PDF.pdf的简单PDF文件,共有两页。

第1页 第2页
PDF查看器显示具有Lorem ipsum文本和标准查看器控件的示例PDF的第一页
PDF查看器显示具有Lorem ipsum文本和导航控件的示例PDF的第二页

任务是为每个页面创建一个图像。 首先,示例将看看如何使用IronPDF执行此任务。

IronPDF如何将PDF页面转换为图像?

using IronPdf;

static void Main(string[] args)
{
    // Specify file to be converted
    var pdf = PdfDocument.FromFile("Sample_PDF.pdf");
    // Save images to the target location
    pdf.RasterizeToImageFiles("image_*.png");
}
using IronPdf;

static void Main(string[] args)
{
    // Specify file to be converted
    var pdf = PdfDocument.FromFile("Sample_PDF.pdf");
    // Save images to the target location
    pdf.RasterizeToImageFiles("image_*.png");
}
$vbLabelText   $csharpLabel

IronPDF还支持将图像保存到内存流,并支持包括JPEG、TIFF等不同的图像格式

输出:

上述代码创建了以下两个.png图像:

第 1 页 图片 第 2 页 图片
从PDF页面1生成的PNG图像,显示了虚拟机械教程内容,具有清晰的文本渲染
从PDF页面2生成的PNG图像,显示了IronPDF的光栅化质量的连续文本内容

使用IronPDF将PDF页面转换为图像是简单的。 现在,让我们使用PrizmDoc Viewer执行相同的任务。

PrizmDoc Viewer如何将PDF页面转换为图像?

using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfToImage().GetAwaiter().GetResult();
}

private static async Task PdfToImage()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_131___", "Your-API-KEY");
    // Convert PDF file to images
    IEnumerable<ConversionResult> results = await prizmDocServer.ConvertAsync("Sample_PDF.pdf", DestinationFileFormat.Png);

    // Save each image.
    for (int i = 0; i < results.Count(); i++)
    {
        await results.ElementAt(i).RemoteWorkFile.SaveAsync($"page-{i + 1}.png");
    }
}
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfToImage().GetAwaiter().GetResult();
}

private static async Task PdfToImage()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_131___", "Your-API-KEY");
    // Convert PDF file to images
    IEnumerable<ConversionResult> results = await prizmDocServer.ConvertAsync("Sample_PDF.pdf", DestinationFileFormat.Png);

    // Save each image.
    for (int i = 0; i < results.Count(); i++)
    {
        await results.ElementAt(i).RemoteWorkFile.SaveAsync($"page-{i + 1}.png");
    }
}
$vbLabelText   $csharpLabel

输出:

上述代码也创建了以下两个.png图像:

第1页 第2页
PNG image generated from PDF page 1 using `PrizmDoc`'s conversion service with sample text content
PNG image generated from PDF page 2 showing `PrizmDoc`'s image conversion output quality

哪个库使PDF到图像的转换更简单?

PrizmDoc Viewer相比,IronPDF允许开发人员轻松创建每个页面的图像,只需最少的代码行,甚至无需遍历页面。


我可以使用IronPDF与Bootstrap 5数据表吗?

IronPDF的Chrome V8渲染引擎提供了对Bootstrap 5数据表的出色支持,使开发人员能够生成具有复杂表格布局的专业PDF报告。 此示例展示了渐变页眉、状态徽章、分页控件和摘要指标—这些功能突显了IronPDF相对于传统PDF查看器如PrizmDoc的优势。 IronPDF完全支持现代CSS功能,包括flexbox布局渐变响应式设计

using IronPdf;

var renderer = new ChromePdfRenderer();

string dataTableReport = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='___PROTECTED_URL_132___ rel='stylesheet'>
    <style>
        .table-header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 10px 10px 0 0;
        }
        .table-container {
            background: white;
            border-radius: 0 0 10px 10px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.1);
            overflow: hidden;
        }
        .table th {
            background: #f8f9fa;
            font-weight: 600;
            text-transform: uppercase;
            font-size: 0.85rem;
            letter-spacing: 0.5px;
        }
        .status-badge {
            padding: 0.35em 0.65em;
            border-radius: 0.25rem;
            font-weight: 600;
            font-size: 0.75rem;
        }
        .trend-positive { color: #198754; font-weight: 700; }
        .trend-negative { color: #dc3545; font-weight: 700; }
        @media print {
            .table-container { page-break-inside: avoid; }
        }
    </style>
</head>
<body class='bg-light'>
    <div class='container py-5'>
        <div class='table-container'>
            <div class='table-header'>
                <div class='row align-items-center'>
                    <div class='col-md-8'>
                        <h2 class='mb-2'>Sales Performance Report</h2>
                        <p class='mb-0 opacity-75'>Q4 2024 Regional Analysis</p>
                    </div>
                    <div class='col-md-4 text-end'>
                        <div class='btn-group btn-group-sm'>
                            <button class='btn btn-light'>Export</button>
                            <button class='btn btn-light'>Filter</button>
                            <button class='btn btn-light'>Sort</button>
                        </div>
                    </div>
                </div>
            </div>

            <div class='p-4'>
                <div class='row mb-3'>
                    <div class='col-md-4'>
                        <input type='text' class='form-control form-control-sm' placeholder='Search regions...'>
                    </div>
                    <div class='col-md-8 text-end'>
                        <span class='text-muted small'>Showing 1-10 of 48 results</span>
                    </div>
                </div>

                <div class='table-responsive'>
                    <table class='table table-hover align-middle'>
                        <thead>
                            <tr>
                                <th>Region</th>
                                <th>Revenue</th>
                                <th>Units Sold</th>
                                <th>Growth</th>
                                <th>Status</th>
                                <th>Action</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>
                                    <strong>North America</strong><br>
                                    <small class='text-muted'>USA, Canada, Mexico</small>
                                </td>
                                <td>$4,280,000</td>
                                <td>12,450</td>
                                <td><span class='trend-positive'>↑ 18.5%</span></td>
                                <td><span class='status-badge bg-success text-white'>Exceeding</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Europe</strong><br>
                                    <small class='text-muted'>EU, UK, Switzerland</small>
                                </td>
                                <td>$3,650,000</td>
                                <td>10,890</td>
                                <td><span class='trend-positive'>↑ 12.3%</span></td>
                                <td><span class='status-badge bg-success text-white'>On Track</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Asia Pacific</strong><br>
                                    <small class='text-muted'>Japan, Australia, Singapore</small>
                                </td>
                                <td>$2,940,000</td>
                                <td>8,320</td>
                                <td><span class='trend-positive'>↑ 24.7%</span></td>
                                <td><span class='status-badge bg-primary text-white'>Growing</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Latin America</strong><br>
                                    <small class='text-muted'>Brazil, Argentina, Chile</small>
                                </td>
                                <td>$1,580,000</td>
                                <td>4,670</td>
                                <td><span class='trend-positive'>↑ 8.9%</span></td>
                                <td><span class='status-badge bg-info text-white'>Stable</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Middle East</strong><br>
                                    <small class='text-muted'>UAE, Saudi Arabia, Israel</small>
                                </td>
                                <td>$980,000</td>
                                <td>2,890</td>
                                <td><span class='trend-negative'>↓ 3.2%</span></td>
                                <td><span class='status-badge bg-warning text-dark'>Review</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                        </tbody>
                        <tfoot class='table-light'>
                            <tr>
                                <td><strong>Total</strong></td>
                                <td><strong>$13,430,000</strong></td>
                                <td><strong>39,220</strong></td>
                                <td><strong class='trend-positive'>↑ 14.8%</strong></td>
                                <td colspan='2'></td>
                            </tr>
                        </tfoot>
                    </table>
                </div>

                <div class='d-flex justify-content-between align-items-center mt-4'>
                    <div>
                        <select class='form-select form-select-sm' style='width: auto; display: inline-block;'>
                            <option>10 per page</option>
                            <option>25 per page</option>
                            <option>50 per page</option>
                        </select>
                    </div>
                    <nav>
                        <ul class='pagination pagination-sm mb-0'>
                            <li class='page-item disabled'><a class='page-link' href='#'>Previous</a></li>
                            <li class='page-item active'><a class='page-link' href='#'>1</a></li>
                            <li class='page-item'><a class='page-link' href='#'>2</a></li>
                            <li class='page-item'><a class='page-link' href='#'>3</a></li>
                            <li class='page-item'><a class='page-link' href='#'>Next</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
        </div>

        <div class='row g-3 mt-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-primary mb-1'>$13.4M</h3>
                        <small class='text-muted'>Total Revenue</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-success mb-1'>39,220</h3>
                        <small class='text-muted'>Units Sold</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-info mb-1'>14.8%</h3>
                        <small class='text-muted'>Growth Rate</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-warning mb-1'>5</h3>
                        <small class='text-muted'>Active Regions</small>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(dataTableReport);
pdf.SaveAs("data-table-report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string dataTableReport = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='___PROTECTED_URL_132___ rel='stylesheet'>
    <style>
        .table-header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 10px 10px 0 0;
        }
        .table-container {
            background: white;
            border-radius: 0 0 10px 10px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.1);
            overflow: hidden;
        }
        .table th {
            background: #f8f9fa;
            font-weight: 600;
            text-transform: uppercase;
            font-size: 0.85rem;
            letter-spacing: 0.5px;
        }
        .status-badge {
            padding: 0.35em 0.65em;
            border-radius: 0.25rem;
            font-weight: 600;
            font-size: 0.75rem;
        }
        .trend-positive { color: #198754; font-weight: 700; }
        .trend-negative { color: #dc3545; font-weight: 700; }
        @media print {
            .table-container { page-break-inside: avoid; }
        }
    </style>
</head>
<body class='bg-light'>
    <div class='container py-5'>
        <div class='table-container'>
            <div class='table-header'>
                <div class='row align-items-center'>
                    <div class='col-md-8'>
                        <h2 class='mb-2'>Sales Performance Report</h2>
                        <p class='mb-0 opacity-75'>Q4 2024 Regional Analysis</p>
                    </div>
                    <div class='col-md-4 text-end'>
                        <div class='btn-group btn-group-sm'>
                            <button class='btn btn-light'>Export</button>
                            <button class='btn btn-light'>Filter</button>
                            <button class='btn btn-light'>Sort</button>
                        </div>
                    </div>
                </div>
            </div>

            <div class='p-4'>
                <div class='row mb-3'>
                    <div class='col-md-4'>
                        <input type='text' class='form-control form-control-sm' placeholder='Search regions...'>
                    </div>
                    <div class='col-md-8 text-end'>
                        <span class='text-muted small'>Showing 1-10 of 48 results</span>
                    </div>
                </div>

                <div class='table-responsive'>
                    <table class='table table-hover align-middle'>
                        <thead>
                            <tr>
                                <th>Region</th>
                                <th>Revenue</th>
                                <th>Units Sold</th>
                                <th>Growth</th>
                                <th>Status</th>
                                <th>Action</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>
                                    <strong>North America</strong><br>
                                    <small class='text-muted'>USA, Canada, Mexico</small>
                                </td>
                                <td>$4,280,000</td>
                                <td>12,450</td>
                                <td><span class='trend-positive'>↑ 18.5%</span></td>
                                <td><span class='status-badge bg-success text-white'>Exceeding</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Europe</strong><br>
                                    <small class='text-muted'>EU, UK, Switzerland</small>
                                </td>
                                <td>$3,650,000</td>
                                <td>10,890</td>
                                <td><span class='trend-positive'>↑ 12.3%</span></td>
                                <td><span class='status-badge bg-success text-white'>On Track</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Asia Pacific</strong><br>
                                    <small class='text-muted'>Japan, Australia, Singapore</small>
                                </td>
                                <td>$2,940,000</td>
                                <td>8,320</td>
                                <td><span class='trend-positive'>↑ 24.7%</span></td>
                                <td><span class='status-badge bg-primary text-white'>Growing</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Latin America</strong><br>
                                    <small class='text-muted'>Brazil, Argentina, Chile</small>
                                </td>
                                <td>$1,580,000</td>
                                <td>4,670</td>
                                <td><span class='trend-positive'>↑ 8.9%</span></td>
                                <td><span class='status-badge bg-info text-white'>Stable</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Middle East</strong><br>
                                    <small class='text-muted'>UAE, Saudi Arabia, Israel</small>
                                </td>
                                <td>$980,000</td>
                                <td>2,890</td>
                                <td><span class='trend-negative'>↓ 3.2%</span></td>
                                <td><span class='status-badge bg-warning text-dark'>Review</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                        </tbody>
                        <tfoot class='table-light'>
                            <tr>
                                <td><strong>Total</strong></td>
                                <td><strong>$13,430,000</strong></td>
                                <td><strong>39,220</strong></td>
                                <td><strong class='trend-positive'>↑ 14.8%</strong></td>
                                <td colspan='2'></td>
                            </tr>
                        </tfoot>
                    </table>
                </div>

                <div class='d-flex justify-content-between align-items-center mt-4'>
                    <div>
                        <select class='form-select form-select-sm' style='width: auto; display: inline-block;'>
                            <option>10 per page</option>
                            <option>25 per page</option>
                            <option>50 per page</option>
                        </select>
                    </div>
                    <nav>
                        <ul class='pagination pagination-sm mb-0'>
                            <li class='page-item disabled'><a class='page-link' href='#'>Previous</a></li>
                            <li class='page-item active'><a class='page-link' href='#'>1</a></li>
                            <li class='page-item'><a class='page-link' href='#'>2</a></li>
                            <li class='page-item'><a class='page-link' href='#'>3</a></li>
                            <li class='page-item'><a class='page-link' href='#'>Next</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
        </div>

        <div class='row g-3 mt-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-primary mb-1'>$13.4M</h3>
                        <small class='text-muted'>Total Revenue</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-success mb-1'>39,220</h3>
                        <small class='text-muted'>Units Sold</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-info mb-1'>14.8%</h3>
                        <small class='text-muted'>Growth Rate</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-warning mb-1'>5</h3>
                        <small class='text-muted'>Active Regions</small>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(dataTableReport);
pdf.SaveAs("data-table-report.pdf");
$vbLabelText   $csharpLabel

该代码会生成一份复杂的数据表格报告,其中包含渐变标题、响应式表格、状态徽章和汇总指标。 IronPDF的Chrome渲染引擎保留了所有Bootstrap样式,包括表格悬停效果、徽章颜色和分页控件—这些能力超越了传统的PDF查看器。 该引擎还支持JavaScript渲染以实现动态内容、 自定义字体UTF-8国际字符

PrizmDoc Viewer相比的主要优势:

有关Bootstrap PDF生成的更多详细信息,请参阅完整的渲染文档。 开发人员还可以探索Angular到PDF转换及其他JavaScript框架支持。## IronPDF和PrizmDoc Viewer的许可证成本如何比较?

在审查了两个组件的技术结构和可用功能后,以下概括了许可证定价。 这非常重要,因为开发人员希望在预算限制内满足需求。

IronPDF的许可证选项有哪些?

IronPDF的许可证从单个项目的一个开发人员$699起。 IronPDF提供灵活的许可选项,包括开发许可、部署许可扩展选项以获取持续的支持和更新。

对于服务于多个客户的公司或代理商的开发者而言,许可证的起价为$699,并可根据团队规模和项目数量进行调整。 随着需求的发展,IronPDF提供许可证升级路径

以下许可证需要一次性付款:

开发人员数量 价格
1-5 $699
6-10 $799
11-20 $899
21-50 $1,199
无限 $1,199
  • 对于拥有多个地点的公司,许可证起价为$1199
  • 对于SaaS服务,许可证起价为$1099
  • 对于免版税的OEM再分发,许可证起价为$1599

注意:上述所有许可证套餐均包括1年支持和更新

了解更多关于IronPDF的所有可用许可证套餐。 开发者还可以通过多种方式应用许可证密钥,包括Web.config和环境变量。

PrizmDoc查看器的许可证选项有哪些?

What Is the Cost of Self-Hosted PrizmDoc?

对于自管理服务器,许可证价格为$7,900每年,包括标准支持。

了解更多关于PrizmDoc查看器的所有可用套餐。

How Much Does Cloud-Based PrizmDoc Cost?

此许可证涵盖云端的PrizmDoc查看器服务,根据交易数量进行扩展。

术语:

PrizmDoc查看器服务器发送请求并接收输出(生成的文档)。

预付费桶意指一次性支付并获得不失效的交易。

交易数量 预付费桶 每月 每年
200 $18
1,000 $89
2,000 $119
6,000 $254 $169 1,859 美元(6,000 笔交易/月)
12,000 $434 $289 3,179 美元(12,000 笔交易/月)
25,000 $699 $499 5,459 美元(25,000 笔交易/月)
50,000 $1,199 $799 8,789 美元(50,000 笔交易/月)
100,000 $1,199 $1,199 10,989 美元(100,000 笔交易/月)
200,000 $2,549 $1,699 19,188 美元(200,000 笔交易/月)
300,000 $3,299 $2,199 $25,188(300,000次交易/月)
400,000 $4,049 $2,699 31,188 美元(400,000 笔交易/月)
500,000 $4,799 $3,199 37,188 美元(每月 500,000 笔交易)

教程快速访问

Html To Pdf Icon related to 教程快速访问
### 获取 C# IronPDF 快速入门手册

一份免费的PDF资源指南,简化了为.NET开发PDF的过程,其中包含常用功能的演示以及用于项目中在C#和VB.NET中操作、编辑、生成和保存PDF的示例。

下载指南
### 探索 IronPDF API 参考资料

探索IronPDF C#库的API参考,其中包括IronPDF的所有功能、类、方法字段、命名空间和枚举的详细信息。

查看 API 参考
Documentation related to 教程快速访问

请注意Accusoft的PrizmDoc查看器是其相关所有者的注册商标。 本网站与Accusoft的PrizmDoc查看器没有关联、认可或赞助关系。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映撰写时公开可用的信息。)}]

常见问题解答

如何在C#中将HTML转换为PDF?

你可以使用IronPDF的RenderHtmlAsPdf方法将HTML字符串转换为PDF。你还可以使用RenderHtmlFileAsPdf将HTML文件转换为PDF。

使用IronPDF进行PDF转换比PrizmDoc Viewer有什么优势?

IronPDF提供了一种简单的本地PDF渲染解决方案,支持离线工作而不需要异步编程。而PrizmDoc Viewer通过REST API运行,需要互联网连接以进行远程服务器交互。

我可以使用PDF库合并多个PDF文档吗?

可以,使用IronPDF,你可以使用MergePdf方法合并多个PDF,实现无缝结合的文件。

IronPDF如何处理PDF到图像的转换?

IronPDF允许你使用内置方法轻松将PDF页面转换为图像,提供了比其他软件更简化的方法。

IronPDF中的页眉和页脚自定义选项有哪些?

IronPDF提供了广泛的功能,以简单的编程结构设置页眉和页脚属性,使自定义文档变得容易。

IronPDF适用于离线PDF处理吗?

是的,IronPDF支持离线PDF处理,这意味着你可以在没有互联网连接的情况下工作,与一些需要远程服务器交互的解决方案不同。

IronPDF许可证的成本结构是什么?

IronPDF许可证起价为699美元,用于一个项目的单一开发人员,提供可扩展的公司和SaaS服务选项,提供了一种具有成本效益的一次性付款方案。

我可以免费使用IronPDF进行开发吗?

可以,IronPDF开发免费且无时间限制,并提供30天的部署试用期以便你的项目上线。

PrizmDoc Viewer如何处理HTML到PDF的转换?

PrizmDoc Viewer使用REST API进行HTML到PDF的转换,需要异步编程和互联网连接来进行远程服务器交互。

托管PrizmDoc服务器的系统要求是什么?

自托管PrizmDoc服务器需要至少32 GB RAM和4核CPU,以满足其处理需求。

IronPDF 是否完全兼容 .NET 10?

是的。IronPDF 支持 .NET 10(以及 .NET 9、8、7、6、.NET Core、.NET Standard 和 .NET Framework)。它通过 NuGet 安装,可在 Windows、Linux 和 macOS 上运行,并使用其基于 Chrome 的原生渲染器,在 .NET 10 应用程序中提供像素级精准的 HTML 转 PDF 渲染效果。

Curtis Chau
技术作家

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

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

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me