C++ PDF生成:库、工具与代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C++ PDF生成:库与工具概览



生成PDF文档是C++软件开发中的常见任务之一。从创建简单的报表到生成包含表格、图像和图形的复杂多页文档。本文将介绍最流行的C++ PDF处理库和工具,分析其功能、优缺点,并提供实用的代码示例。



为什么需要在C++中生成PDF?

PDF(便携式文档格式)是一种跨平台格式,无论设备或操作系统如何,都能保持文档排版。在C++中,生成PDF常用于:

  • 在商业应用中创建报表和发票
  • 根据模板生成文档
  • 从数据库导出数据
  • 在会计系统中生成收据和运单


C++中主要的PDF处理库



1. libharu (HARU PDF)

最流行且易于使用的PDF生成库之一。用C语言编写,但拥有出色的C++接口。支持从零创建PDF文档,添加文本、图像、线条、矩形和注释。

特点:

  • 体积小,性能高
  • 支持TrueType字体
  • 页面压缩
  • 支持图像(JPEG、PNG)
  • 许可证:ZLIB/Libpng(自由开源)

生成简单PDF的示例:

#include <hpdf.h>#include <stdio.h>

int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); HPDF_Page page = HPDF_AddPage(pdf); // 设置A4页面大小 HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_LANDSCAPE); // 添加文本 HPDF_Page_BeginText(page); HPDF_Page_SetFontAndSize(page, HPDF_GetFont(pdf, "Helvetica", NULL), 24); HPDF_Page_TextOut(page, 100, 500, "你好,C++ PDF世界!"); HPDF_Page_EndText(page); // 保存文档 HPDF_SaveToFile(pdf, "output.pdf"); HPDF_Free(pdf); return 0;}


2. PoDoFo

一个现代化的开源C++ PDF处理库。不仅支持创建,还支持编辑现有PDF文件。文档完善,维护活跃。

特点:

  • 纯C++代码(符合现代标准)
  • 支持Unicode和西里尔字母
  • 支持表单、书签、元数据
  • 支持PDF读写
  • 许可证:LGPL

创建带表格的PDF示例:

#include <podofo/podofo.h>

using namespace PoDoFo;

int main() { PdfMemDocument document; PdfPage* page = document.CreatePage(PdfPage::CreateStandardPageSize(PdfPageSize::A4)); PdfPainter painter; painter.SetCanvas(*page); // 绘制表格 painter.DrawRect(50, 700, 500, 30); painter.DrawText(60, 710, "表格标题"); // 保存 painter.FinishPage(); document.Save("table.pdf"); return 0;}


3. wkhtmltopdf

严格来说并非库,而是一个命令行工具,使用WebKit引擎将HTML转换为PDF。在C++中可通过system()调用,或使用封装库。

特点:

  • 非常适合从HTML模板生成PDF
  • 支持CSS、JavaScript、SVG
  • 高质量排版(如同浏览器渲染)
  • 支持页眉页脚、目录、页码
  • 许可证:LGPLv3

从C++调用的示例:

#include <cstdlib>

int main() { // 将HTML文件转换为PDF int result = std::system("w

推荐