PDF 工具

如何在 C++ 中创建 PDF 文件

发布 2023年七月5日
分享:

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 文件,我们需要具备以下条件:

  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)请选择".NET "或 "Python"。

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

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

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

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

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

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

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

  4. 浏览到wkhtmltox库文件所在的目录(例如,C:\Program Files\wkhtmltopdf\lib)您可以在".NET"、"Python "或 "Node.js "中选择合适的库文件。

  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 转换器,快速访问其转换方法。

下面是一个示例代码使用 IronPDF 创建 PDF使用HTML 字符串到 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 代码示例page.

结论

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

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

IronPdf 用于开发目的是免费的,但用于商业用途则需要获得许可。 它还提供了免费试用该翻译必须符合商业用途,以测试其完整功能。 下载IronPDF并亲自体验一下。

< 前一页
如何在 C++ 中查看 PDF 文件
下一步 >
如何在 C++ 中读取 PDF 文件

准备开始了吗? 版本: 2024.12 刚刚发布

免费NuGet下载 总下载量: 11,781,565 查看许可证 >