本文概述
- 要求
- 1.安装Pechkin
- 2.生成PDF
- 3.保存PDF
在本文中, 你将学习如何在Windows Forms应用程序中轻松地将wkhtmltopdf与C#一起使用。
要求
- 你将需要带有NuGet软件包管理器(> = 2010)的Visual Studio。
1.安装Pechkin 为了使用Windows窗体中的C#从HTML文件生成PDF, 我们将使用Pechkin(用于wkhtmltopdf DLL的.NET包装器), 该库使用Webkit引擎将HTML页面转换为PDF。 Pechkin作为NuGet软件包提供, 在大多数情况下, 你应该使用SynchronizedPechkin, 因为它可以保护多线程代码免遭lib崩溃。但是对于一个线程的简单使用, 你可以直接使用SimplePechkin。
注意 Pechkin在项目(和NuGet包)中包括最新版本的wkhtmltox DLL及其依赖项, 并复制到项目构建的build文件夹中。因此, 在计算机上使用该库之前, 无需安装任何先决条件。
通过访问NuGET程序包管理器, 使用Visual Studio安装程序包。在Visual Studio右上方的解决方案资源管理器中右键单击你的项目, 然后在下拉菜单中选择” 管理NuGet程序包” :
文章图片
现在, 从紧急窗口中搜索Pechkin.Synchronized包, 选择它并将其安装在你的项目中:
文章图片
设置完成后, 你将可以在项目中使用包装器。
2.生成PDF Convert方法使用给定的设置将HTML字符串(或配置对象)转换为PDF, 并返回存储PDF二进制数据的字节数组。
注意 对于所有示例, pdfContent变量将仅生成PDF的内容, 你将看不到任何内容, 因此请不要忘记按照步骤3将创建的内容写入文件。
A.从HTML字符串生成简单的PDF
你可以使用空的全局配置对象快速创建PDF。在你的课程中导入Pechkin类型:
using Pechkin;
然后使用以下代码段创建PDF的内容:
byte[] pdfContent = new SimplePechkin(new GlobalConfig()).Convert("<
html>
<
body>
<
h1>
Hello world!<
/h1>
<
/body>
<
/html>
");
B.从网站生成PDF
你可以使用配置中的SetPageUri方法通过其URL呈现网站, 而不是普通的HTML字符串。在类的顶部导入Pechkin.Synchronized类型:
using Pechkin.Synchronized;
然后使用以下代码从网站创建PDF:
// create global configuration objectGlobalConfig gc = new GlobalConfig();
// set it up using fluent notation// Remember to import the following type://using System.Drawing.Printing;
//// a new instance of Margins with 1-inch margins.gc.SetMargins(new Margins(100, 100, 100, 100)).SetDocumentTitle("Test document").SetPaperSize(PaperKind.Letter)// Set to landscape//.SetPaperOrientation(true);
// Create converterIPechkin pechkin = new SynchronizedPechkin(gc);
// Create document configuration objectObjectConfig configuration = new ObjectConfig();
// and set it up using fluent notation tooconfiguration.SetCreateExternalLinks(false).SetFallbackEncoding(Encoding.ASCII).SetLoadImages(true).SetPageUri("http://ourcodeworld.com");
// Generate the PDF with the given configuration// The Convert method will return a Byte Array with the content of the PDF// You will need to use another method to save the PDF (mentioned on step #3)byte[] pdfContent = pechkin.Convert(configuration);
C.从本地HTML文件生成PDF
要从本地HTML文件创建PDF, 可以通过使用SetPageUri方法(使用网站的方式)为文件的本地文件路径提供文件, 但同时允许使用本地资源使用SetAllowLocalContent方法(请注意, 你需要将前缀file:///附加到html文件路径中)。在类的顶部导入Pechkin.Synchronized类型:
using Pechkin.Synchronized;
并使用以下代码从本地HTML文件创建PDF:
// create global configuration objectGlobalConfig gc = new GlobalConfig();
// set it up using fluent notation// Remember to import the following type://using System.Drawing.Printing;
//// a new instance of Margins with 1-inch margins.gc.SetMargins(new Margins(100, 100, 100, 100)).SetDocumentTitle("Test document").SetPaperSize(PaperKind.Letter);
// Create converterIPechkin pechkin = new SynchronizedPechkin(gc);
// Create document configuration objectObjectConfig configuration = new ObjectConfig();
string HTML_FILEPATH = "C:/Users/sdkca/Desktop/example.html";
// and set it up using fluent notation tooconfiguration.SetAllowLocalContent(true).SetPageUri(@"file:///" + HTML_FILEPATH);
// Generate the PDF with the given configuration// The Convert method will return a Byte Array with the content of the PDF// You will need to use another method to save the PDF (mentioned on step #3)byte[] pdfContent = pechkin.Convert(configuration);
现在你知道了如何生成PDF的内容, 你只需要学习如何保存它即可。
3.保存PDF 如前所述, Pechkin生成PDF并将数据作为字节数组返回, 这意味着你将需要自己编写数据。我们将使用程序集System.IO中包含的FileStream类将PDF写入文件。使用FileStream, 你可以读取, 写入, 打开和关闭文件系统上的文件, 还可以操纵其他与文件相关的操作系统句柄, 包括管道, 标准输入和标准输出。在使用它之前, 请在类顶部使用using指令导入以下类型:
using System.IO;
【如何在WinForms中使用wkhtmltopdf和C#从HTML生成PDF】然后, 使用该类创建一个以返回的ByteArray作为内容的文件。你可以使用以下方法将文件的绝对路径作为第一个参数, 并将要写入的数据作为第二个参数(pdf内容):
/// <
summary>
/// Writes a byte array (format returned by SimplePechkin) into a file/// <
/summary>
/// <
param name="_FileName">
<
/param>
/// <
param name="_ByteArray">
<
/param>
/// <
returns>
<
/returns>
public bool ByteArrayToFile(string _FileName, byte[] _ByteArray){try{// Open file for readingFileStream _FileStream = new FileStream(_FileName, FileMode.Create, FileAccess.Write);
// Writes a block of bytes to this stream using data froma byte array._FileStream.Write(_ByteArray, 0, _ByteArray.Length);
// Close file stream_FileStream.Close();
return true;
}catch (Exception _Exception){Console.WriteLine("Exception caught in process while trying to save : {0}", _Exception.ToString());
}return false;
}
然后可以如以下示例所示使用它:
// Simple PDF from Stringbyte[] pdfBuffer = new SimplePechkin(new GlobalConfig()).Convert("<
html>
<
body>
<
h1>
Hello world!<
/h1>
<
/body>
<
/html>
");
// Folder where the file will be created string directory = "C:\\Users\\sdkca\\Desktop\\";
// Name of the PDFstring filename = "hello_world.pdf";
if (ByteArrayToFile(directory + filename, pdfBuffer)){Console.WriteLine("PDF Succesfully created");
}else{Console.WriteLine("Cannot create PDF");
}
编码愉快!
推荐阅读
- 如何在XAMPP Windows中安装和启用Imagick扩展
- Symfony 3中的Tesseract光学字符识别(OCR)入门
- 如何解决PHP cURL警告(curl_set_opt_array():设置open_basedir时无法激活CURLOPT_FOLLOWLOCATION)
- 如何使用C#在Winforms中检索基本和高级硬件和软件信息(GPU,硬盘,处理器,操作系统,打印机)
- 如何在PHP中加密由TCPDF生成的PDF(密码保护)
- 如何在Symfony 3中使用phpseclib连接到SFTP服务器
- 如何在Symfony 3中使用Twig(或在控制器中)在表单上显示所有(或单个)错误
- 如何为特定活动禁用Android Soft Keyboard()
- 没有标签视图使用android(labelFor =“@ + id / @ + id /”属性指向此文本字段)