PDF 工具

如何在 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”)。 该库为 C++ 提供了一个接口,用于与 wkhtmltopdf 命令行工具连接,使您可以在 C++ 应用程序中直接从 HTML 内容创建 PDF 文件。 让我们一步步深入了解使用 Wkhtmltopdf 库在 C++ 中将 HTML 转换为 PDF 的过程。

先决条件

要以 C++ 创建 PDF 文件,我们需要具备以下条件:

  1. 系统中已安装 GCC 或 Clang 等 C++ 编译器。 您只需使用任何支持 C++ 编程的集成开发环境即可。

  2. wkhtmltopdf 库已下载并安装。 您可以从官方wkhtmltopdf网站下载最新版本,并根据您的操作系统说明进行安装。

  3. 具备 C# 编程的基础知识。

C++ 在 Code:Blocks 中创建 PDF 项目

在 Code::Blocks 中创建一个项目,然后按照以下步骤链接库文件夹和文件。如果您使用的是其他集成开发环境,选项可能有所不同,但您需要在项目中引用下载的库,使其生效。

1.在搜索目录中添加 include 文件夹

为了确保 Code::Blocks 能够找到必要的头文件,我们需要设置搜索目录。

  1. 单击菜单栏中的 "项目 "菜单,选择 "构建选项"。 请确保选择 "调试"。

  2. 在 "构建选项 "对话框中,选择 "搜索目录 "选项卡。

  3. 在 "编译器 "选项卡下,单击 "添加 "按钮。

  4. 浏览到wkhtmltox头文件所在的目录(例如,C:\Program Files\wkhtmltopdf\include),然后选择它。

  5. 最后,单击 "确定 "关闭对话框。

    如何在C++中创建PDF文件:图1

2.在链接器设置中链接库

要链接wkhtmltox库,请按照以下步骤操作:

  1. 再次点击菜单栏中的 "项目 "菜单,选择 "构建选项"。 请确保选择 "调试"。

  2. 在 "构建选项 "对话框中,选择 "链接器设置 "选项卡。

  3. 在 "链接库 "选项卡下,单击 "添加 "按钮。

  4. 浏览到 wkhtmltox 库文件所在的目录(例如,C:\Program Files\wkhtmltopdf\lib),并选择适当的库文件。

  5. 单击 "打开 "将库添加到您的项目中。

  6. 最后,单击 "确定 "关闭对话框。

    如何在 C++ 中创建 PDF 文件:图 2

使用 Wkhtmltopdf 在 C++ 中创建 PDF 的步骤

1.包含必要的库

首先,我们将在 C# 程序中加入必要的头文件,以使用 wkhtmltopdf 库的功能。 在 main.cpp 源代码文件开头包含以下头文件:

#include <iostream>
#include <fstream>
#include <string>
#include <wkhtmltox/pdf.h>
#include <iostream>
#include <fstream>
#include <string>
#include <wkhtmltox/pdf.h>
C++

2.禁用图形用户界面组件

如果您不使用图形用户界面,则需要将其禁用,以避免出错。 代码如下

wkhtmltopdf_init(false);
wkhtmltopdf_init(false);
C++

3.初始化设置和转换器

接下来,我们需要初始化全局和对象设置指针,然后初始化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);
C++

4.添加 PDF 内容

现在,让我们创建一个 HTML 字符串,在新创建的 PDF 文档中填充一些内容。 代码如下

string htmlString = "<html><body><h1>Create a PDF in C++ using WKHTMLTOPDF Library</h1></body></html>";
wkhtmltopdf_add_object(converter, os, htmlString.c_str());
string htmlString = "<html><body><h1>Create a PDF in C++ using WKHTMLTOPDF Library</h1></body></html>";
wkhtmltopdf_add_object(converter, os, htmlString.c_str());
C++

5.将 HTML 字符串转换为 PDF 文件

Wkhtmltopdf 提供了一种将 HTML 内容转换为 PDF 的转换器方法。 以下是代码片段:

wkhtmltopdf_convert(converter);
wkhtmltopdf_convert(converter);
C++

6.以内存缓冲区的形式获取输出

通过wkhtmltopdf_get_output函数,我们可以将PDF数据作为内存缓冲流获取。 它还会返回 PDF 的长度。 以下示例将完成这项任务:

const unsigned char* pdfData;
const int pdfLength = wkhtmltopdf_get_output(converter, &pdfData);
const unsigned char* pdfData;
const int pdfLength = wkhtmltopdf_get_output(converter, &pdfData);
C++

7.保存 PDF 文件

pdfData指针现在将拥有来自wkhtmltopdf_converter的字符流。 要保存为 PDF 文件,首先我们要指定保存 PDF 的文件路径。 然后,使用输出文件流,我们以二进制模式打开文件,并通过使用reinterpret_cast函数来类型转换pdfData后将其写入。 最后,我们关闭文件。

const char* outputPath = "file.pdf";
ofstream outputFile(outputPath, ios::binary);
outputFile.write(reinterpret_cast<const char*>(pdfData), pdfLength);
outputFile.close();
const char* outputPath = "file.pdf";
ofstream outputFile(outputPath, ios::binary);
outputFile.write(reinterpret_cast<const char*>(pdfData), pdfLength);
outputFile.close();
C++

8.释放内存

成功创建 PDF 文件后,必须清理 Wkhtmltopdf 分配的资源,否则将导致内存泄漏。

wkhtmltopdf_destroy_converter(converter);
wkhtmltopdf_destroy_object_settings(os);
wkhtmltopdf_destroy_global_settings(gs);
wkhtmltopdf_deinit();

cout << "PDF created successfully." << endl;
wkhtmltopdf_destroy_converter(converter);
wkhtmltopdf_destroy_object_settings(os);
wkhtmltopdf_destroy_global_settings(gs);
wkhtmltopdf_deinit();

cout << "PDF created successfully." << endl;
C++

9.执行代码并生成 PDF 文件

现在,构建项目并使用 F9 执行代码。输出结果将生成并保存在项目文件夹中。 最终的 PDF 文件如下:

如何在C++中创建PDF文件:图3

在 C&num 中创建 PDF 文件;

IronPDF

IronPDF 是一个 .NET C# PDF 库,允许开发人员毫不费力地从 HTML 创建 PDF 文档。 它提供了一个直观的 API,简化了从 HTML 创建 PDF 文件的过程。

IronPdf 在处理 PDF 方面功能强大、用途广泛。 它不仅能从简单的 HTML 文档创建 PDF,还能创建带有 CSS 样式、JavaScript 交互甚至动态内容的复杂网页。 此外,您还可以开发不同的 PDF 转换器,快速访问其转换方法。

以下是一个使用HTML字符串到PDF转换通过IronPDF创建PDF的示例代码:

using IronPdf;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create a PDF from a 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 a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");

// Export to a file or Stream
pdf.SaveAs("output.pdf");
C++

我们创建一个ChromePdfRenderer实例,以将 HTML 内容渲染为 PDF。 我们在renderer对象上调用RenderHtmlAsPdf方法,并传入HTML字符串。 这将生成 PDF 文档,然后我们使用SaveAs方法保存 PDF 文档。

如何在 C++ 中创建 PDF 文件:图 4

有关如何使用IronPDF从各种资源创建PDF的更多详细信息,请访问此IronPDF代码示例页面。

结论

在本文中,我们探讨了使用 wkhtmltopdf C++ 库 在 C++ 中生成 PDF,并且学习了如何使用 IronPDF 在 C# 中生成 PDF 文档。

有了 IronPDF,用 .NET Framework 语言从 HTML 内容生成 PDF 文件就变得简单易行。 其广泛的功能集使其成为开发人员在 C# 项目中需要将HTML 转换为 PDF时的宝贵工具。 无论是生成报告、发票,还是其他任何需要将 HTML 精确转换为 PDF 的文档,IronPDF 都是可靠高效的解决方案。

IronPdf 用于开发目的是免费的,但用于商业用途则需要获得许可。 它还提供一个免费试用,用于商业用途以测试其完整功能。 下载 IronPDF 并亲自试用。

Chipego
软件工程师
Chipego 拥有出色的倾听技巧,这帮助他理解客户问题并提供智能解决方案。他在 2023 年加入 Iron Software 团队,此前他获得了信息技术学士学位。IronPDF 和 IronOCR 是 Chipego 主要专注的两个产品,但他对所有产品的了解每天都在增长,因为他不断找到支持客户的新方法。他喜欢 Iron Software 的合作氛围,公司各地的团队成员贡献他们丰富的经验,以提供有效的创新解决方案。当 Chipego 离开办公桌时,你经常可以发现他在看书或踢足球。
< 前一页
如何在 C++ 中查看 PDF 文件
下一步 >
如何在 C++ 中读取 PDF 文件