如何在 C++ 中创建 PDF 文件
PDF(便携式文档格式)文件广泛用于在不同平台上以一致的格式共享和保存文档。 在本文中,我们将探讨如何使用 wkhtmltopdf 库在 C++ 中生成 PDF 文件。 它是一个开源命令行工具,用于将 HTML 内容转换成 PDF 文件。 通过利用这个库的强大功能,我们可以在 C++ 应用程序中从 HTML 内容程序化地创建 PDF 文档。
WkhtmltoPdf 库
wkhtmltopdf 是一个开源的命令行工具和渲染引擎,用于将 HTML 网页或 HTML 内容转换为 PDF 文档。 它利用 WebKit 渲染引擎解析和渲染 HTML、CSS 和 JavaScript,然后根据渲染内容生成 PDF 文件。
"wkhtmltopdf C++ 库"(也称为"wkhtmltopdf C API")。 该库为 wkhtmltopdf 命令行工具提供 C++ 接口,允许您直接在 C++ 应用程序中从 HTML 内容创建 PDF 文件。 让我们深入了解使用 Wkhtmltopdf 库在 C++ 中进行 HTML 到 PDF 转换的逐步过程。
前提条件
在 C++ 中创建 PDF 文件,我们需要以下内容:
- 在您的系统上安装诸如 GCC 或 Clang 的 C++ 编译器。 您可以使用任何支持 C++ 编程的 IDE。
- wkhtmltopdf 库 已下载并安装。 您可以从官方的 wkhtmltopdf 网站下载最新版本并根据您的操作系统说明进行安装。
- 具备 C++ 编程的基础知识。
C++ 在 Code::Blocks 中创建 PDF 项目
在 Code::Blocks 中创建一个项目,然后按照以下步骤链接库文件夹和文件。如果您使用其他 IDE,选项可能不同,但您需要在项目中引用下载的库才能使其工作。
1. 在搜索目录中添加 include 文件夹
为了确保 Code::Blocks 能找到必要的头文件,我们需要设置搜索目录。
- 点击菜单栏中的"项目"菜单,选择"构建选项"。 确保选择"调试"。
- 在"构建选项"对话框中,选择"搜索目录"选项卡。
- 在"编译器"选项卡下,点击"添加"按钮。
- 浏览到 wkhtmltox 头文件所在的目录(例如:C:\Program Files\wkhtmltopdf\include),并选择它。
- 最后,点击"确定"关闭对话框。

2. 在链接器设置中链接库
要链接 wkhtmltox 库,请按照以下步骤操作:
- 再次单击菜单栏中的"项目"菜单,然后选择"构建选项"。 确保选择"调试"。
- 在"构建选项"对话框中,选择"链接器设置"选项卡。
- 在"链接库"选项卡下,点击"添加"按钮。
- 浏览到 wkhtmltox 库文件所在的目录(例如:C:\Program Files\wkhtmltopdf\lib),并选择适当的库文件。
- 点击"打开"将库添加到您的项目。
- 最后,点击"确定"关闭对话框。

使用 Wkhtmltopdf 在 C++ 中创建 PDF 的步骤
1. 包含必要的库
首先,我们将包含必要的头文件以便在 C++ 程序中利用 wkhtmltopdf 库的功能。 在您的 main.cpp 源代码文件开头包含以下头文件:
#include <iostream>
#include <fstream>
#include <string>
#include <wkhtmltox/pdf.h> // Include wkhtmltopdf library headers#include <iostream>
#include <fstream>
#include <string>
#include <wkhtmltox/pdf.h> // Include wkhtmltopdf library headers2. 禁用 GUI 组件
如果您不使用 GUI,则需要禁用它以避免错误。 代码如下
wkhtmltopdf_init(false); // Initialize the wkhtmltopdf library in non-GUI modewkhtmltopdf_init(false); // Initialize the wkhtmltopdf library in non-GUI mode3. 初始化设置和转换器
接下来,我们需要初始化全局和对象设置指针,然后是 wkhtmltopdf 转换器。
wkhtmltopdf_global_settings* gs = wkhtmltopdf_create_global_settings();
wkhtmltopdf_object_settings* os = wkhtmltopdf_create_object_settings();
wkhtmltopdf_converter* converter = wkhtmltopdf_create_converter(gs);wkhtmltopdf_global_settings* gs = wkhtmltopdf_create_global_settings();
wkhtmltopdf_object_settings* os = wkhtmltopdf_create_object_settings();
wkhtmltopdf_converter* converter = wkhtmltopdf_create_converter(gs);4. 添加 PDF 内容
现在,让我们创建一个 HTML 字符串以在新创建的 PDF 文档中填充一些内容。 代码如下
std::string htmlString = "<html><body><h1>Create a PDF in C++ using WKHTMLTOPDF Library</h1></body></html>";
wkhtmltopdf_add_object(converter, os, htmlString.c_str());std::string htmlString = "<html><body><h1>Create a PDF in C++ using WKHTMLTOPDF Library</h1></body></html>";
wkhtmltopdf_add_object(converter, os, htmlString.c_str());5. 将 HTML 字符串转换为 PDF 文件
Wkhtmltopdf 提供转换器方法,将 HTML 内容转换为 PDF。 以下是代码片段:
wkhtmltopdf_convert(converter); // Converts HTML content to PDFwkhtmltopdf_convert(converter); // Converts HTML content to PDF6. 以内存缓冲的形式获取输出
使用 wkhtmltopdf_get_output 函数可以获取 PDF 数据作为内存缓冲流。 它还返回 PDF 的长度。 以下示例将执行此任务:
const unsigned char* pdfData;
int pdfLength = wkhtmltopdf_get_output(converter, &pdfData); // Get PDF data and lengthconst unsigned char* pdfData;
int pdfLength = wkhtmltopdf_get_output(converter, &pdfData); // Get PDF data and length7. 保存 PDF 文件
pdfData 指针现在将拥有来自 wkhtmltopdf_converter 的字符流。 要保存到 PDF 文件,首先我们指定保存 PDF 的文件路径。 然后,使用输出文件流,我们在二进制模式下打开文件,并通过使用 reinterpret_cast 函数将 pdfData 写入其中。 最后,我们关闭文件。
const char* outputPath = "file.pdf";
std::ofstream outputFile(outputPath, std::ios::binary); // Open file in binary mode
outputFile.write(reinterpret_cast<const char*>(pdfData), pdfLength); // Write PDF data
outputFile.close(); // Close the fileconst char* outputPath = "file.pdf";
std::ofstream outputFile(outputPath, std::ios::binary); // Open file in binary mode
outputFile.write(reinterpret_cast<const char*>(pdfData), pdfLength); // Write PDF data
outputFile.close(); // Close the file8. 释放内存
成功创建 PDF 文件后,清理由 Wkhtmltopdf 分配的资源是至关重要的,否则将导致内存泄漏。
wkhtmltopdf_destroy_converter(converter); // Destroy the converter
wkhtmltopdf_destroy_object_settings(os); // Destroy object settings
wkhtmltopdf_destroy_global_settings(gs); // Destroy global settings
wkhtmltopdf_deinit(); // Deinitialize the library
std::cout << "PDF created successfully." << std::endl; // Inform the userwkhtmltopdf_destroy_converter(converter); // Destroy the converter
wkhtmltopdf_destroy_object_settings(os); // Destroy object settings
wkhtmltopdf_destroy_global_settings(gs); // Destroy global settings
wkhtmltopdf_deinit(); // Deinitialize the library
std::cout << "PDF created successfully." << std::endl; // Inform the user9. 执行代码并生成 PDF 文件
现在,构建项目并使用 F9 执行代码。输出将在项目文件夹中生成并保存。 生成的 PDF 如下:

在 C# 中创建 PDF 文件
IronPDF。
IronPDF 是一个 .NET C# PDF 库,允许开发人员轻松地从 HTML 创建 PDF 文档。 它提供了简化从 HTML 创建 PDF 文件过程的直观 API。
IronPDF 是处理 PDF 时的稳健且多功能的解决方案。 它不仅可以从简单的 HTML 文档创建 PDF,还可以处理带有 CSS 样式、JavaScript 交互甚至动态内容的复杂网页。 此外,您可以开发不同的 PDF 转换器,快速访问其转换方法。
以下是使用 IronPDF 创建 PDF 的示例代码,使用 HTML 字符串转换为 PDF:
using IronPdf;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");using IronPdf;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");我们创建了一个 ChromePdfRenderer 实例来将 HTML 内容渲染为 PDF。 我们在 renderer 对象上调用 RenderHtmlAsPdf 方法并传入 HTML 字符串。 这会生成 PDF 文档,然后我们使用 SaveAs 方法保存 PDF 文档。

有关如何 从 IronPDF 创建 PDF 的更多详细信息,请访问此 IronPDF 代码示例页面。
结论
在本文中,我们探讨了使用 wkhtmltopdf C++ 库 在 C++ 中生成 PDF ,以及学习了如何使用 IronPDF 在 C# 中生成 PDF 文档。
有关如何将不同的 HTML 文件、网页 URL 和图像转换为 PDF 的更多详细信息,请访问此 HTML 到 PDF 代码示例。 其广泛的功能集使其成为开发人员需要在其 C# 项目中进行 HTML 到 PDF 转换时的有价值工具。 其直观的 API 和广泛的功能集使其成为需要在 C# 项目中转换 HTML 到 PDF 的开发人员的重要工具。
IronPDF 供开发目的免费使用,但若用于商业用途,则需要获得许可。 它还为商业用途提供一个 免费试用 ,以测试其完整功能。 下载 IronPDF 并自己试试。






