在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
选择以编程方式处理 PDF 文件的最佳组件可能是一项艰巨的任务,但最终却能为您节省时间和精力。我们将探讨使用 wkhtmltopdf 和 IronPDF 处理 PDF 的必要代码和分步教程,以及它们的系统兼容性和许可结构,以帮助您决定哪种最适合您的项目。
请阅读下面的教程,了解如何创建 PDF 文件、使用预定义功能(如执行页眉和页脚)、生成文件等。
IronPDF 是一个用于处理 PDF 文件的组件,由 Iron Software C# 库.使用 IronPDF我们很容易 创建 PDF IronPDF 可通过 URL 或 HTML 字符串创建 PDF 文件,并以编程方式设置页眉、页脚、水印、页边距和其他 PDF 文件属性。IronPDF 以其享有盛誉的产品库、清晰的文档和自然语言而闻名,使其易于在开发人员项目中实施。
wkhtmltopdf 是一款用于渲染 PDF 文件的 C++ 二进制软件。它可用于通过 URL 或 HTML 字符串创建 PDF 文件。它还能通过命令行界面设置 PDF 文件的页眉、页脚、页边距和其他属性。 (CLI).但是,它不是在 .NET 框架内设计的,因此可能难以与 .NET 应用程序集成。 (阅读更多,了解我们的解决方法).此外,它也不是由一家公司持续更新维护的。相反,它最初是由 雅各布-特鲁尔森 并由 阿希什-库尔卡尼,几个开发人员。
为了帮助您选择最适合您项目的组件,我们将提供代码示例和教程,指导您如何使用 wkhtmltopdf 和 IronPDF 创建、编辑和管理 PDF 文件。以下是对这两种资源的功能和可用性的快速概述。
IronPDF | wkhtmltopdf |
---|---|
IronPDF 可将 HTML 转换为 PDF | wkhtmltopdf 将 HTML 转换为 PDF |
支持 Windows、Linux 和 macOS | 支持 Windows、Ubuntu、Amazon Linux 和 macOS |
使用 C# 在 .NET Framework 中设计 | 用 C++ 设计 |
动态链接库(.dll),成为项目的一部分 | 单独使用的 .exe 文件 |
IronPDF 设置页眉、页脚和方向页边距 | wkhtmltopdf 设置页眉、页脚和方向页边距 |
RenderDelay "函数可延迟渲染,确保网页加载成功 | javascript-delay "函数,用于延迟渲染,直到 JavaScript 执行完毕 |
经常更新新功能和产品修复程序 | 产品更新不频繁 |
适用于 .NET 项目 | 非常适合 CLI / Shell 项目 |
为特定页面添加水印的预定义功能 | 没有添加水印的预定义功能 |
渲染、编辑、填充、解析和签署 PDF。 | 仅为渲染。 |
技术支持团队随时待命 | 没有已知的技术支持 |
IronPDF 可以通过两种不同的方法安装到系统中,您可以根据自己的项目需要选择最简单的方法。
第一种方法是使用 Visual Studio 的 "NuGet 包管理器"。打开并浏览 `IronPDF (由 "铁 "提供)然后安装。
Install-Package IronPdf
第二种方法是 下载 IronPDF.dll 文件。下载后,请在项目引用中提供该文件的路径,以便添加其引用。
注意:您可以通过编写以下行 using IronPdf;
来导入 IronPDF
的库
IronPDF 兼容多种语言和平台。
使用.NET 框架 4.0 或更高版本
视窗
使用.NET Standard 2.0 & Core 2 & 3
云托管服务包括
微软 Azure
Docker
IronPDF 可用于
ASP.NET MVC 应用程序
ASP.NET Web 窗体应用程序
控制台应用程序
云应用程序
服务
功能
使用 IronPDF 需要以下依赖项。
安装完成后,如果您安装的是 32 位,它会在 C:\Program Files
中创建一个名为 wkhtmltopdf
的新文件夹。 (x86)包括一些必要的文件。
如果安装的是 64 位,则该文件夹将创建为 C:\Program Files
。
创建文件夹后,wkhtmltopdf 将成功安装到您的系统中。
当我们谈到如何处理 PDF 文件时,脑海中浮现的基本用例就是如何从 URL 创建 PDF 文件。
使用 IronPDF,我们可以进行以下简单的转换。
/**
URL to PDF
anchor-url-to-pdf-using-ironpdf
**/
using IronPdf;
{
var converter = new ChromePdfRenderer();
//Specify URL
using var PDF = converter.RenderUrlAsPdf("URL");
//Save the file
PDF.SaveAs("Sample.pdf");
Console.WriteLine("successfully created!");
Console.ReadKey();
}
/**
URL to PDF
anchor-url-to-pdf-using-ironpdf
**/
using IronPdf;
{
var converter = new ChromePdfRenderer();
//Specify URL
using var PDF = converter.RenderUrlAsPdf("URL");
//Save the file
PDF.SaveAs("Sample.pdf");
Console.WriteLine("successfully created!");
Console.ReadKey();
}
'''
'''URL to PDF
'''anchor-url-to-pdf-using-ironpdf
'''*
Private ReadOnly Property IronPdf() As using
Dim converter = New ChromePdfRenderer()
'Specify URL
Dim PDF = converter.RenderUrlAsPdf("URL")
'Save the file
PDF.SaveAs("Sample.pdf")
Console.WriteLine("successfully created!")
Console.ReadKey()
End Property
上述代码将从指定的 URL 创建一个完整网页的 Sample.pdf
文件,并将其保存到指定位置。
注:
bin\Debug
文件夹中创建。Local Disk E
,那么你可以写入E:\Sample.pdf
。现在,让我们看看如何使用 wkhtmltopdf 通过 URL 创建 PDF 文件。
如上所述,wkhtmltopdf 并不是在 .NET 框架中设计的。但我们仍然可以在 .NET 应用程序中使用它。
为此,我们将使用 wkhtmltopdf.exe
文件启动一个新进程来执行命令,如下例所示。
为避免复杂和混乱,我们创建一个方法并将其称为 `Main()功能如下
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
//function calling
ConvertChromePdfRenderer("URL", "Sample.pdf");
Console.WriteLine("successfully created!");
Console.ReadKey();
}
//function declaration
public static void ConvertChromePdfRenderer(string url, string filename)
{
//function definition
StringBuilder paramsBuilder = new StringBuilder();
//make CLI command
paramsBuilder.AppendFormat("\"{0}\" \"{1}\"", url, filename);
//create new process
using (Process process = new Process())
{
//specify wkhtmltopdf.exe file path to execute above CLI
process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
//assign CLI as process argument
process.StartInfo.Arguments = paramsBuilder.ToString();
//setting the credentials
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
//start execution
process.Start();
if (!process.WaitForExit(60000))
{
process.Kill();
}
}
}
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
//function calling
ConvertChromePdfRenderer("URL", "Sample.pdf");
Console.WriteLine("successfully created!");
Console.ReadKey();
}
//function declaration
public static void ConvertChromePdfRenderer(string url, string filename)
{
//function definition
StringBuilder paramsBuilder = new StringBuilder();
//make CLI command
paramsBuilder.AppendFormat("\"{0}\" \"{1}\"", url, filename);
//create new process
using (Process process = new Process())
{
//specify wkhtmltopdf.exe file path to execute above CLI
process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
//assign CLI as process argument
process.StartInfo.Arguments = paramsBuilder.ToString();
//setting the credentials
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
//start execution
process.Start();
if (!process.WaitForExit(60000))
{
process.Kill();
}
}
}
Imports System.Text
Imports System.Diagnostics
Shared Sub Main(ByVal args() As String)
'function calling
ConvertChromePdfRenderer("URL", "Sample.pdf")
Console.WriteLine("successfully created!")
Console.ReadKey()
End Sub
'function declaration
Public Shared Sub ConvertChromePdfRenderer(ByVal url As String, ByVal filename As String)
'function definition
Dim paramsBuilder As New StringBuilder()
'make CLI command
paramsBuilder.AppendFormat("""{0}"" ""{1}""", url, filename)
'create new process
Using process As New Process()
'specify wkhtmltopdf.exe file path to execute above CLI
process.StartInfo.FileName = "C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe"
'assign CLI as process argument
process.StartInfo.Arguments = paramsBuilder.ToString()
'setting the credentials
process.StartInfo.UseShellExecute = False
process.StartInfo.RedirectStandardOutput = True
process.StartInfo.RedirectStandardError = True
'start execution
process.Start()
If Not process.WaitForExit(60000) Then
process.Kill()
End If
End Using
End Sub
请不要在生产中使用上述代码。 它不是线程安全的,会在服务器应用程序中造成死锁 !
这段代码将创建以下命令,并使用进程 wkhtmltopdf.exe
执行该命令
URL""FileName.pdf"。
上述代码还创建了一个 Sample.pdf
文件,就像我们使用 IronPDF 创建文件一样,并将其保存到指定位置。
我们可以很容易地观察到,在短短几行代码中使用 IronPDF 是多么容易。使用 wkhtmltopdf 时,我们需要运行一个单独的进程,除了要编写多行代码外,还会影响系统性能。
现在,让我们来谈谈这两个组件提供的函数,了解它们的功能。
当我们对两个不同的组件进行评估并需要选择最佳组件时,了解哪个组件提供的功能最多、在项目中使用起来有多方便以及哪个组件所需的代码行数最少是非常重要的。
我们可以在 Curly Brackets 中使用 IronPDF 函数。{}
如下:
`{html-title}打印网页标题。
如何在项目中使用上述函数?让我们看看下面的例子。
/**
PDF Functions
anchor-ironpdf-functions
**/
using IronPdf;
{
var converter = new IronPdf.ChromePdfRenderer();
//setting header
converter.RenderingOptions.TextHeader = new TextHeaderFooter()
{
RightText = "{date} {time}"
};
//setting footer
converter.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText= "Page {page} of {total-pages}"
};
using var PDF = converter.RenderUrlAsPdf("URL");
PDF.SaveAs("Sample.pdf");
Console.WriteLine("successfully created..!");
Console.ReadKey();
}
/**
PDF Functions
anchor-ironpdf-functions
**/
using IronPdf;
{
var converter = new IronPdf.ChromePdfRenderer();
//setting header
converter.RenderingOptions.TextHeader = new TextHeaderFooter()
{
RightText = "{date} {time}"
};
//setting footer
converter.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText= "Page {page} of {total-pages}"
};
using var PDF = converter.RenderUrlAsPdf("URL");
PDF.SaveAs("Sample.pdf");
Console.WriteLine("successfully created..!");
Console.ReadKey();
}
'''
'''PDF Functions
'''anchor-ironpdf-functions
'''*
Private ReadOnly Property IronPdf() As using
Dim converter = New IronPdf.ChromePdfRenderer()
'setting header
converter.RenderingOptions.TextHeader = New TextHeaderFooter() With {.RightText = "{date} {time}"}
'setting footer
converter.RenderingOptions.TextFooter = New TextHeaderFooter() With {.CenterText= "Page {page} of {total-pages}"}
Dim PDF = converter.RenderUrlAsPdf("URL")
PDF.SaveAs("Sample.pdf")
Console.WriteLine("successfully created..!")
Console.ReadKey()
End Property
该代码将创建指定 URL 网页的 PDF 文件,在右侧页眉处打印日期和时间,并在页脚中央打印当前页码。
下面给出了 wkhtmltopdf 的一些基本功能。这些函数可在 方括号 ` 中使用。[]如下
了解更多 wkhtmltopdf 功能 这里。
让我们看看如何在项目中使用这些函数的示例。
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
ConvertChromePdfRenderer("URL", "Sample.pdf");
Console.WriteLine("ok");
Console.ReadKey();
}
public static void ConvertChromePdfRenderer(string url, string filename)
{
StringBuilder paramsBuilder = new StringBuilder();
paramsBuilder.AppendFormat("--header-right \"[date][time]\" --footer-center \"Page [page] of [topage]\" \"{0}\" \"{1}\"", url, filename);
using (Process process = new Process())
{
process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
process.StartInfo.Arguments = paramsBuilder.ToString();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.Start();
if (!process.WaitForExit(60000))
{
process.Kill();
}
}
}
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
ConvertChromePdfRenderer("URL", "Sample.pdf");
Console.WriteLine("ok");
Console.ReadKey();
}
public static void ConvertChromePdfRenderer(string url, string filename)
{
StringBuilder paramsBuilder = new StringBuilder();
paramsBuilder.AppendFormat("--header-right \"[date][time]\" --footer-center \"Page [page] of [topage]\" \"{0}\" \"{1}\"", url, filename);
using (Process process = new Process())
{
process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
process.StartInfo.Arguments = paramsBuilder.ToString();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.Start();
if (!process.WaitForExit(60000))
{
process.Kill();
}
}
}
Imports System.Text
Imports System.Diagnostics
Shared Sub Main(ByVal args() As String)
ConvertChromePdfRenderer("URL", "Sample.pdf")
Console.WriteLine("ok")
Console.ReadKey()
End Sub
Public Shared Sub ConvertChromePdfRenderer(ByVal url As String, ByVal filename As String)
Dim paramsBuilder As New StringBuilder()
paramsBuilder.AppendFormat("--header-right ""[date][time]"" --footer-center ""Page [page] of [topage]"" ""{0}"" ""{1}""", url, filename)
Using process As New Process()
process.StartInfo.FileName = "C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe"
process.StartInfo.Arguments = paramsBuilder.ToString()
process.StartInfo.UseShellExecute = False
process.StartInfo.RedirectStandardOutput = True
process.StartInfo.RedirectStandardError = True
process.Start()
If Not process.WaitForExit(60000) Then
process.Kill()
End If
End Using
End Sub
这段代码将创建以下命令,并使用进程 wkhtmltopdf.exe
执行:
标题--右"[日期][时间]" --footer-center "页面 [页码] 的 [拓扑]""URL" "Sample.pdf"`
它还将创建与我们用 IronPDF 创建的 PDF 文件相同的文件,右侧页眉为 "日期时间",页脚中央为 "当前总页数"。
使用 HTML 字符串创建 PDF 文件是一项非常常见的要求。为此,这两个组件都提供了创建 PDF 文件的方法。请记住,IronPDF 是在 .NET 框架下开发的,而 wkhtmltopdf 是在 "C++"下开发的,因此这两个组件处理 PDF 文件的方式完全不同。
/**
HTML String to PDF
anchor-html-string-to-pdf-using-ironpdf
**/
using IronPdf;
{
var converter = new ChromePdfRenderer();
//HTML string
string HTML = "<h1>Hello IronPDF!</h1> <h2>Welcome to PDF File</h2> ";
//convert HTML string to PDF file
using var PDF = converter.RenderHtmlAsPdf(HTML);
//Save the file
PDF.SaveAs("Sample.pdf");
Console.WriteLine("successfully created..!");
Console.ReadKey();
}
/**
HTML String to PDF
anchor-html-string-to-pdf-using-ironpdf
**/
using IronPdf;
{
var converter = new ChromePdfRenderer();
//HTML string
string HTML = "<h1>Hello IronPDF!</h1> <h2>Welcome to PDF File</h2> ";
//convert HTML string to PDF file
using var PDF = converter.RenderHtmlAsPdf(HTML);
//Save the file
PDF.SaveAs("Sample.pdf");
Console.WriteLine("successfully created..!");
Console.ReadKey();
}
'''
'''HTML String to PDF
'''anchor-html-string-to-pdf-using-ironpdf
'''*
Private ReadOnly Property IronPdf() As using
Dim converter = New ChromePdfRenderer()
'HTML string
Dim HTML As String = "<h1>Hello IronPDF!</h1> <h2>Welcome to PDF File</h2> "
'convert HTML string to PDF file
Dim PDF = converter.RenderHtmlAsPdf(HTML)
'Save the file
PDF.SaveAs("Sample.pdf")
Console.WriteLine("successfully created..!")
Console.ReadKey()
End Property
输出:
下面是 IronPDF 新创建的 "Sample.pdf "文件的截图:
注:
bin\Debug
文件夹中创建。wkhtmltopdf 的工作有点复杂,为了使其更加清晰易懂,我们定义了一个函数并将其称为 `Main()功能如下
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
//Html string
string HTML = "<h1>Hello wkhtmltopdf!</h1><h2>Welcome to PDF File</h2>";
//Function calling
ConvertChromePdfRenderer(HTML, "Sample.pdf");
Console.WriteLine("ok");
Console.ReadKey();
}
//Function Declaration
public static void ConvertChromePdfRenderer(string html, string path)
{
//Function Definition
StringBuilder paramsBuilder = new StringBuilder();
//Build command
paramsBuilder.AppendFormat("\"-\" \"{0}\"", path);
//process to execute above command
using (Process process = new Process())
{
//path of wkhtmltopdf.exe file
string filepath= "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
//specify path
process.StartInfo.FileName = filepath;
//set command by argument
process.StartInfo.Arguments = paramsBuilder.ToString();
//set credentials
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
//start process
process.Start();
using (var stream = process.StandardInput)
{
byte [] buffer = Encoding.UTF8.GetBytes(html);
stream.BaseStream.Write(buffer, 0, buffer.Length);
stream.WriteLine();
}
}
}
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
//Html string
string HTML = "<h1>Hello wkhtmltopdf!</h1><h2>Welcome to PDF File</h2>";
//Function calling
ConvertChromePdfRenderer(HTML, "Sample.pdf");
Console.WriteLine("ok");
Console.ReadKey();
}
//Function Declaration
public static void ConvertChromePdfRenderer(string html, string path)
{
//Function Definition
StringBuilder paramsBuilder = new StringBuilder();
//Build command
paramsBuilder.AppendFormat("\"-\" \"{0}\"", path);
//process to execute above command
using (Process process = new Process())
{
//path of wkhtmltopdf.exe file
string filepath= "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
//specify path
process.StartInfo.FileName = filepath;
//set command by argument
process.StartInfo.Arguments = paramsBuilder.ToString();
//set credentials
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
//start process
process.Start();
using (var stream = process.StandardInput)
{
byte [] buffer = Encoding.UTF8.GetBytes(html);
stream.BaseStream.Write(buffer, 0, buffer.Length);
stream.WriteLine();
}
}
}
Imports System.Text
Imports System.Diagnostics
Shared Sub Main(ByVal args() As String)
'Html string
Dim HTML As String = "<h1>Hello wkhtmltopdf!</h1><h2>Welcome to PDF File</h2>"
'Function calling
ConvertChromePdfRenderer(HTML, "Sample.pdf")
Console.WriteLine("ok")
Console.ReadKey()
End Sub
'Function Declaration
Public Shared Sub ConvertChromePdfRenderer(ByVal html As String, ByVal path As String)
'Function Definition
Dim paramsBuilder As New StringBuilder()
'Build command
paramsBuilder.AppendFormat("""-"" ""{0}""", path)
'process to execute above command
Using process As New Process()
'path of wkhtmltopdf.exe file
Dim filepath As String= "C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe"
'specify path
process.StartInfo.FileName = filepath
'set command by argument
process.StartInfo.Arguments = paramsBuilder.ToString()
'set credentials
process.StartInfo.UseShellExecute = False
process.StartInfo.RedirectStandardError = True
process.StartInfo.RedirectStandardInput = True
'start process
process.Start()
Using stream = process.StandardInput
Dim buffer() As Byte = Encoding.UTF8.GetBytes(html)
stream.BaseStream.Write(buffer, 0, buffer.Length)
stream.WriteLine()
End Using
End Using
End Sub
输出:
wkhtmltopdf 新建的 "Sample.pdf "文件截图:
WkhtmlToPdf 是一款开源产品。它不具备 IronPDF 的所有功能。
比较的最好方法就是进行实际测试。
IronPDF 和 WkHtmlToPdf 在渲染 PDF 的质量上存在明显差异。
用户界面设计
WkHtmlToPdf 错过了所有必须应用于网页的 CSS 文件。
CSS 和 JS 文件对用户界面设计非常重要。WkHtmlToPdf 无需加载这些必要文件即可开始渲染页面。
相比之下,IronPDF 能高精度地渲染 CSS 和 JS 文件。
颜色
WkHtmlToPdf 文件渲染无法捕捉背景颜色。 同样,IronPDF 的效果更好,渲染中显示的颜色更准确。
标题
在 WkHtmlToPdf 渲染中,页眉完全缺失。而在 IronPDF 效果图中,页眉是有特色的,而且位置正确。
按钮
网页上按钮的位置显然很重要。更改按钮和 CTA (行动呼吁) 改变了意图。在 WkHtmlToPdf 中,按钮的位置并不准确。这与最初的网页设计完全不同。
另一方面,如果我们看 IronPDF 文件,就会发现按钮的位置是准确的。
结论
IronPDF 在渲染前暂停并等待所有文件加载的方式。这一步骤本身就能改善结果。总体而言,IronPDF 能提供更准确的结果。
阅读完上述文章并理解了上述两个示例后,我们可以清楚地看到,IronPDF 提供了一种创建 PDF 文件的简单方法,而且其生成的 PDF 文件比 wkhtmltopdf 更具有可读性,因为它会自动调整左右两边的边距。
IronPdf 还允许我们解析、编辑、合并和签署 PDF 文件。
另一方面,wkhtmltopdf 更为复杂,因为我们需要添加一个单独的进程并运行它,这会影响项目的性能。
这两个组件都提供在 PDF 文件中添加页眉和页脚的功能,但两者的编程结构不同 (使用 .NET Framework 的 IronPDF 和 C++ 中的 wkhtmltopdf).
IronPDF 提供以下函数来设置页眉和页脚的属性。可使用 "CamelCase "编写。
RightText用于在页眉或页脚右侧书写文本。
/**
Add Header Footer
anchor-add-headers-and-footers-using-ironpdf
**/
using IronPdf;
{
var converter = new IronPdf.ChromePdfRenderer();
converter.RenderingOptions.TextHeader = new TextHeaderFooter()
{
LeftText = "MyTask",
RightText = "{date} - {time}",
DrawDividerLine = true,
};
converter.RenderingOptions.TextFooter = new TextHeaderFooter()
{
RightText = "Page {page} of {total-pages}"
};
using var PDF = converter.RenderHtmlAsPdf("<h1 style='text-align:center'>Welcome To IronPdf</h1>");
PDF.SaveAs("Sample.pdf");
Console.WriteLine("successfully created..!");
Console.ReadKey();
}
/**
Add Header Footer
anchor-add-headers-and-footers-using-ironpdf
**/
using IronPdf;
{
var converter = new IronPdf.ChromePdfRenderer();
converter.RenderingOptions.TextHeader = new TextHeaderFooter()
{
LeftText = "MyTask",
RightText = "{date} - {time}",
DrawDividerLine = true,
};
converter.RenderingOptions.TextFooter = new TextHeaderFooter()
{
RightText = "Page {page} of {total-pages}"
};
using var PDF = converter.RenderHtmlAsPdf("<h1 style='text-align:center'>Welcome To IronPdf</h1>");
PDF.SaveAs("Sample.pdf");
Console.WriteLine("successfully created..!");
Console.ReadKey();
}
'''
'''Add Header Footer
'''anchor-add-headers-and-footers-using-ironpdf
'''*
Private ReadOnly Property IronPdf() As using
Dim converter = New IronPdf.ChromePdfRenderer()
converter.RenderingOptions.TextHeader = New TextHeaderFooter() With {
.LeftText = "MyTask",
.RightText = "{date} - {time}",
.DrawDividerLine = True
}
converter.RenderingOptions.TextFooter = New TextHeaderFooter() With {.RightText = "Page {page} of {total-pages}"}
Dim PDF = converter.RenderHtmlAsPdf("<h1 style='text-align:center'>Welcome To IronPdf</h1>")
PDF.SaveAs("Sample.pdf")
Console.WriteLine("successfully created..!")
Console.ReadKey()
End Property
输出:
这是 IronPDF 新创建的 "Sample.pdf "文件的截图。
我们可以很容易地看到,"我的任务 "文本打印在页眉左侧,"日期时间 "打印在页眉右侧,"当前总页数 "打印在页脚右侧。
注:
bin\Debug
文件夹中创建。wkhtmltopdf 还提供了许多处理 PDF 文件页眉和页脚的功能。它为页眉和页脚提供了单独的函数。为此,我们需要加上两个破折号 (--
) 和一个破折号 (-
) 以连接属性名称,如下所示
了解更多关于 页眉和页脚 wkhtmltopdf 函数 以及更多。
在本例中,为了避免复杂性,我们将单独创建一个函数,以便于理解其工作原理。我们将创建与上例相同的 PDF 文件:
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
ConvertChromePdfRenderer("<h1 style='text-align:center'>Welcom to wkhtmltopdf</h1>", "MyTask", "Sample.pdf");
Console.WriteLine("Successfully Created");
Console.ReadKey();
}
public static void ConvertChromePdfRenderer(string html, string header, string path)
{
StringBuilder paramsBuilder = new StringBuilder();
paramsBuilder.AppendFormat("--header-left \"{0}\" --header-right \"[date] - [time]\" --header-line --footer-right \"Page [page] of [topage]\" \"-\" \"{1}\"", header, path);
using (Process process = new Process())
{
process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
process.StartInfo.Arguments = paramsBuilder.ToString();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
process.Start();
using (var stream = process.StandardInput)
{
byte [] buffer = Encoding.UTF8.GetBytes(html);
stream.BaseStream.Write(buffer, 0, buffer.Length);
stream.WriteLine();
}
}
}
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
ConvertChromePdfRenderer("<h1 style='text-align:center'>Welcom to wkhtmltopdf</h1>", "MyTask", "Sample.pdf");
Console.WriteLine("Successfully Created");
Console.ReadKey();
}
public static void ConvertChromePdfRenderer(string html, string header, string path)
{
StringBuilder paramsBuilder = new StringBuilder();
paramsBuilder.AppendFormat("--header-left \"{0}\" --header-right \"[date] - [time]\" --header-line --footer-right \"Page [page] of [topage]\" \"-\" \"{1}\"", header, path);
using (Process process = new Process())
{
process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
process.StartInfo.Arguments = paramsBuilder.ToString();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
process.Start();
using (var stream = process.StandardInput)
{
byte [] buffer = Encoding.UTF8.GetBytes(html);
stream.BaseStream.Write(buffer, 0, buffer.Length);
stream.WriteLine();
}
}
}
Imports System.Text
Imports System.Diagnostics
Shared Sub Main(ByVal args() As String)
ConvertChromePdfRenderer("<h1 style='text-align:center'>Welcom to wkhtmltopdf</h1>", "MyTask", "Sample.pdf")
Console.WriteLine("Successfully Created")
Console.ReadKey()
End Sub
Public Shared Sub ConvertChromePdfRenderer(ByVal html As String, ByVal header As String, ByVal path As String)
Dim paramsBuilder As New StringBuilder()
paramsBuilder.AppendFormat("--header-left ""{0}"" --header-right ""[date] - [time]"" --header-line --footer-right ""Page [page] of [topage]"" ""-"" ""{1}""", header, path)
Using process As New Process()
process.StartInfo.FileName = "C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe"
process.StartInfo.Arguments = paramsBuilder.ToString()
process.StartInfo.UseShellExecute = False
process.StartInfo.RedirectStandardError = True
process.StartInfo.RedirectStandardInput = True
process.Start()
Using stream = process.StandardInput
Dim buffer() As Byte = Encoding.UTF8.GetBytes(html)
stream.BaseStream.Write(buffer, 0, buffer.Length)
stream.WriteLine()
End Using
End Using
End Sub
上述代码将使用 wkhtmltopdf.exe
文件执行以下命令
标题--left "MyTask" 标题--right "[日期] - [时间]" --header-line --footer-right "页码 [页码] 的 [拓扑]""-" "Sample.pdf"`
output
这是 wkhtmltopdf 新建的 "Sample.pdf "文件的截图。
假设我们想通过 URL 创建 PDF 文件,并设置页边距。这两个组件都提供了从左、上、右和下设置页边距的功能。
/**
Adjust Margins
anchor-add-and-adjust-margins-using-ironpdf
**/
using IronPdf;
{
//create rendering converter
var converter = new ChromePdfRenderer();
converter.RenderingOptions.MarginTop = 20;
converter.RenderingOptions.MarginLeft = 40;
//Specify URL
using var PDF = converter.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
//Save the file
PDF.SaveAs("Sample.pdf");
Console.WriteLine("successfully created..!");
Console.ReadKey();
}
/**
Adjust Margins
anchor-add-and-adjust-margins-using-ironpdf
**/
using IronPdf;
{
//create rendering converter
var converter = new ChromePdfRenderer();
converter.RenderingOptions.MarginTop = 20;
converter.RenderingOptions.MarginLeft = 40;
//Specify URL
using var PDF = converter.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
//Save the file
PDF.SaveAs("Sample.pdf");
Console.WriteLine("successfully created..!");
Console.ReadKey();
}
'''
'''Adjust Margins
'''anchor-add-and-adjust-margins-using-ironpdf
'''*
Private ReadOnly Property IronPdf() As using
'create rendering converter
Dim converter = New ChromePdfRenderer()
converter.RenderingOptions.MarginTop = 20
converter.RenderingOptions.MarginLeft = 40
'Specify URL
Dim PDF = converter.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")
'Save the file
PDF.SaveAs("Sample.pdf")
Console.WriteLine("successfully created..!")
Console.ReadKey()
End Property
输出:
下面是 IronPDF 的 "Sample.pdf "文件截图。
很明显,上述代码从指定的 URL 创建了 PDF 文件,并设置了 margin-left 40 mm
和 margin-top 20 mm
。现在,让我们使用 wkhtmltopdf 完成同样的操作。
要使用 wkhtmltopdf,我们需要使用 wkhtmltopdf.exe
文件执行单独的进程。为避免复杂性,我们将定义一个新函数并将其称为 `main()功能如下
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
ConvertChromePdfRenderer(20, 40, "https://en.wikipedia.org/wiki/PDF", "Sample.pdf");
Console.WriteLine("ok");
Console.ReadKey();
}
public static void ConvertChromePdfRenderer(int margin_top, int margin_left, string url, string filename)
{
StringBuilder paramsBuilder = new StringBuilder();
paramsBuilder.AppendFormat("--margin-top \"{0}\" --margin-left \"{1}\" \"{2}\" \"{3}\"", margin_top, margin_left, url, filename);
using (Process process = new Process())
{
process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
process.StartInfo.Arguments = paramsBuilder.ToString();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.Start();
if (!process.WaitForExit(60000))
{
process.Kill();
}
}
}
using System.Text;
using System.Diagnostics;
static void Main(string [] args)
{
ConvertChromePdfRenderer(20, 40, "https://en.wikipedia.org/wiki/PDF", "Sample.pdf");
Console.WriteLine("ok");
Console.ReadKey();
}
public static void ConvertChromePdfRenderer(int margin_top, int margin_left, string url, string filename)
{
StringBuilder paramsBuilder = new StringBuilder();
paramsBuilder.AppendFormat("--margin-top \"{0}\" --margin-left \"{1}\" \"{2}\" \"{3}\"", margin_top, margin_left, url, filename);
using (Process process = new Process())
{
process.StartInfo.FileName = "C:\\Program Files (x86)\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
process.StartInfo.Arguments = paramsBuilder.ToString();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.Start();
if (!process.WaitForExit(60000))
{
process.Kill();
}
}
}
Imports System.Text
Imports System.Diagnostics
Shared Sub Main(ByVal args() As String)
ConvertChromePdfRenderer(20, 40, "https://en.wikipedia.org/wiki/PDF", "Sample.pdf")
Console.WriteLine("ok")
Console.ReadKey()
End Sub
Public Shared Sub ConvertChromePdfRenderer(ByVal margin_top As Integer, ByVal margin_left As Integer, ByVal url As String, ByVal filename As String)
Dim paramsBuilder As New StringBuilder()
paramsBuilder.AppendFormat("--margin-top ""{0}"" --margin-left ""{1}"" ""{2}"" ""{3}""", margin_top, margin_left, url, filename)
Using process As New Process()
process.StartInfo.FileName = "C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe"
process.StartInfo.Arguments = paramsBuilder.ToString()
process.StartInfo.UseShellExecute = False
process.StartInfo.RedirectStandardOutput = True
process.StartInfo.RedirectStandardError = True
process.Start()
If Not process.WaitForExit(60000) Then
process.Kill()
End If
End Using
End Sub
这段代码将使用 wkhtmltopdf.exe
的进程执行以下命令:
--margin-top "20" --margin-left "40" "https://en.wikipedia.org/wiki/PDF" "Sample.pdf"
输出:
下面是 wkhtmltopdf 制作的 "Sample.pdf "文件。
它创建的 PDF 文件与我们使用 IronPDF 创建的文件相同。
任何项目的性能都非常重要,不幸的是,wkhtmltopdf 会影响性能,因为它需要执行单独的进程和线程。另一方面,如果我们使用 IronPDF,就不需要运行单独的进程和线程。
让我们来谈谈这两种产品的许可和定价。
IronPDF 可免费用于开发,并提供为期 30 天的免费部署试用。如需全面部署使用,许可证起价为"$liteLicense",可在以下网址获得适用于多个开发人员、项目和免版税再分发产品的软件包 IronPDF 许可.
IronPDF 几乎每月都会发布一个新版本,以跟上最新的技术和错误修复。该组件非常可靠,由 IronSoftware 的全职工程团队提供支持,可为客户提供高质量和高性能的产品。
wkhtmltopdf 是一款开源组件,可免费使用。因此,它不提供任何类型的软件更新、错误修复、支持、热修复或公司担保。如果我们在项目中使用了 wkhtmltopdf,那么调试和管理它的成功与否就取决于我们自己了。
IronPDF | wkhtmltopdf |
---|---|
IronPDF 成为项目的一部分 | wkhtmltopdf 不会成为项目的一部分 |
无需单独流程 | 需要运行单独的进程 |
自动设置空格以提高可读性 | 页眉和页面内容之间没有自动空格 |
可启用或禁用 JavaScript | 可启用或禁用 JavaScript |
可在不同尺寸的纸张上打印 | 可在不同尺寸的纸张上打印 |
提供大量文件 | 文献资料很少 |
无需指定单独的文件路径 | 需要指定 "wkhtmltopdf.exe "文件的路径 |
C# 库,需要在项目中添加其引用 | 基于 CLI,在 .NET 应用程序中使用 Process 执行命令。不建议在网络或服务器应用程序中使用。 |
提供将`.aspx`页面转换为 PDF 文件的通用方法 | 未提供将`.aspx`页面转换为 PDF 的通用方法 |
可在 PDF 文件中轻松添加分页符 | 分页可能需要研究。 |
免费用于开发,许可证提供版本更新和工程师支持 | 开放源代码,无已知支持 |