首页
/ LibHaru 开源PDF库教程

LibHaru 开源PDF库教程

2026-01-16 10:16:03作者:董斯意

1. 项目介绍

LibHaru 是一个跨平台的开源库,用于生成PDF文件。它支持创建线条、文本、图像、大纲文本注解、链接注解等基本功能。此外,LibHaru还允许压缩文档、嵌入PNG和JPEG图片、添加Type1字体和TrueType字体以及创建加密的PDF文件。值得注意的是,此库目前不支持读取或编辑已存在的PDF文件。

2. 项目快速启动

环境准备

确保你的系统中安装了以下组件:

  • C编译器(如GCC)
  • Make工具

安装步骤

  1. 克隆仓库到本地:

    git clone https://github.com/libharu/libharu.git
    
  2. 进入项目目录:

    cd libharu
    
  3. 配置并编译项目(这一步可能因操作系统不同而略有差异):

    ./configure
    make
    
  4. 安装到系统路径(需要管理员权限):

    sudo make install
    

编写简单示例

以下是一个使用C语言的基本示例,创建一个简单的PDF文件:

#include <hpdf.h>

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

    HPDF_Page_SetWidth(page, 210 * HPDF_MM);
    HPDF_Page_SetHeight(page, 297 * HPDF_MM);

    HPDF_Font font = HPDF_GetFont(pdf, "Helvetica", NULL);
    HPDF_Page_SetFontAndSize(page, font, 12);

    HPDF_Page_BeginText(page);
    HPDF_Page_ShowText(page, "Hello World!");
    HPDF_Page_EndText(page);

    const char* filename = "hello.pdf";
    HPDF_SaveAsToFile(pdf, filename);
    HPDF_Free(pdf);

    return 0;
}

编译此示例:

gcc example.c -lharu -o hello_pdf

运行生成PDF:

./hello_pdf

3. 应用案例和最佳实践

  1. 嵌入图像: 使用HPDF_LoadPngImageFromFile()函数加载PNG图像,然后使用HPDF_Page_DrawImage()在页面上绘制。
  2. 加密PDF: 在创建文档时调用HPDF_SetEncryptionMode()设置密码保护。
  3. 多语言支持: 利用LibHaru支持多种编码,可以轻松创建包含非ASCII字符的PDF。

最佳实践:

  • 总是在使用资源(如PDF对象)后释放它们,以避免内存泄漏。
  • 根据需求选择合适的安全模式,防止未经授权的复制或编辑PDF。

4. 典型生态项目

  • PHP绑定: libharu-php 提供PHP接口与LibHaru交互。
  • Python绑定: pyharu 是一个Python封装库,使Python程序员能够利用LibHaru的功能。
  • Ruby绑定: ruby-haru 将LibHaru的功能暴露给Ruby程序员。

通过这些生态系统中的绑定,开发者可以在各自熟悉的编程环境中轻松地利用LibHaru的功能来生成PDF文件。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
atomcodeatomcode
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get Started
Rust
438
78
docsdocs
暂无描述
Dockerfile
690
4.46 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
407
326
pytorchpytorch
Ascend Extension for PyTorch
Python
549
671
kernelkernel
deepin linux kernel
C
28
16
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.59 K
925
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
955
930
communitycommunity
本项目是CANN开源社区的核心管理仓库,包含社区的治理章程、治理组织、通用操作指引及流程规范等基础信息
650
232
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.08 K
564
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
C
436
4.43 K