C++ PDF生成:库概览与代码示例

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

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

开始课程

C++ PDF生成:库概览与实践示例



PDF文档生成是企业应用、报告系统和文档管理系统开发中的常见任务之一。尽管C++没有内置对PDF格式的支持,但存在几个成熟的库,允许创建、编辑和渲染PDF文件。本文将介绍三种流行的工具:libharu、PoDoFo和wkhtmltopdf。我们将为每个工具提供代码示例并描述其关键功能。



1. libharu — 轻量快速的PDF生成



libharu(Haru PDF)是一个纯C语言编写的跨平台库,非常适合C++项目。它不依赖外部图形库,支持Unicode(UTF-8)、字体嵌入(TrueType)以及图像处理(JPEG、PNG)。主要应用场景是从零开始以编程方式创建文档。



安装

从GitHub下载源代码,并通过CMake构建:

mkdir build && cd buildcmake .. -DLIBHPDF_SHARED=ONmakesudo make install


示例:创建包含文本的简单PDF

#include <hpdf.h>#include <cstdio>

int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); HPDF_Page page = HPDF_AddPage(pdf); HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT);

// 字体 const char* font_name = HPDF_LoadTTFontFromFile(pdf, "arial.ttf", HPDF_TRUE); HPDF_Font font = HPDF_GetFont(pdf, font_name, "UTF-8"); HPDF_Page_SetFontAndSize(page, font, 14);

// 文本 HPDF_Page_BeginText(page); HPDF_Page_TextOut(page, 50, 750, "你好,世界!来自C++的PDF。"); HPDF_Page_EndText(page);

HPDF_SaveToFile(pdf, "output.pdf"); HPDF_Free(pdf); printf("PDF已创建:output.pdf"); return 0;}


libharu的功能

  • 创建多页文档
  • 矢量图形(线条、矩形、曲线)
  • 嵌入JPEG/PNG图像
  • 支持书签(大纲)和注释
  • 页面内容压缩


2. PoDoFo — 高级PDF处理



PoDoFo是一个C++库,可完全控制PDF结构。它不仅允许创建,还能编辑现有文档、提取文本、管理元数据和加密。PoDoFo使用CMake,需要少量配置。



安装(Ubuntu/Debian)

sudo apt install libpodofo-dev


示例:向页面添加文本

#include <podofo/podofo.h>using namespace PoDoFo;

int main() { PdfMemDocument document; document.SetPdfVersion(PdfVersion::V1_4); document.GetMetadata().SetTitle("PoDoFo文档");

PdfPage* page = document.CreatePage(PdfPage::CreateStandardPageSize(PdfPageSize::A4)); PdfPainter painter; painter.SetCanvas(*page);

PdfFont* font = document.CreateFont("Arial", false, false, false); font->SetFontSize(16); painter.SetFont(font); painter.DrawText(50, 700, "使用PoDoFo生成!");

painter.FinishDrawing(); document.Save("podofo_example.pdf"); return 0;}


PoDoFo的优势

  • 支持PDF/A(存档格式)
  • 加密和密码设置
  • 从PDF中提取文本和图像
  • 处理表单(AcroForms)
  • 编辑现有PDF(添加/删除页面)


3. wkhtmltopdf — 通过C++将HTML转换为PDF



wkhtmltopdf是一个命令行工具,使用WebKit引擎将HTML页面转换为PDF。对于C++,您可以通过system()或<

推荐