PDF库 libharu 简单操作
libharu官网:http://libharu.org/
直接下载下来编译就可以使用了(*:我下载的版本是:libharu-libharu-v2.4.3-0-g8dbcfe4.tar)
一、编译
官方编译指导:https://github.com/libharu/libharu/wiki/Installation
1. 解压 tar -zxvf libharu-libharu-v2.4.3-0-g8dbcfe4.tar 2.在解压出来文件夹中创建一个build文件夹 mkdir build 3.进入build文件夹 cd build 4.使用cmake编译 cmake .. 5.make编译 make 6.编译出来的 libhpdf.so 就是我们需要的库文件
*:在引入头文件时,需要把 build/include/hpdf_config.h 文件一起拿出来,不然会报错缺少文件
二、基本使用
// 简单添加一张图片到PDF文件中,图片按比例显示,PDF文件页面边距50px int main2() { HPDF_Doc pdf = HPDF_New(NULL, NULL); // 创建PDF文件和页面 HPDF_Page page = HPDF_AddPage (pdf); HPDF_Page_SetSize (page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT); HPDF_REAL page_width = HPDF_Page_GetWidth(page); HPDF_REAL page_height = HPDF_Page_GetHeight(page); cout << "page width:" << page_width << " height:" << page_height << endl; // 加载图片到页面上,PDF的坐标是从左下角计算的 HPDF_Image image = HPDF_LoadJpegImageFromFile (pdf, "./files/1.jpg"); HPDF_REAL width = HPDF_Image_GetWidth(image); HPDF_REAL height = HPDF_Image_GetHeight(image); HPDF_REAL image_scale = width / (page_width-100); HPDF_Page_DrawImage(page, image, 50, page_height - height / image_scale - 50, width / image_scale, height / image_scale); cout << "image width:" << width << " height:" << height << endl; HPDF_SaveToFile (pdf, "1.pdf"); HPDF_Free (pdf); cout << "save success" << endl; return 0; }
// 添加多张图片到PDF文件中,一张图片一个页面 int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); vector<string> files = {"./files/1.jpg", "./files/2.jpg", "./files/3.jpg"}; for(int i=0; i<files.size(); i++) { HPDF_Page page = HPDF_AddPage(pdf); HPDF_Page_SetSize (page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT); HPDF_Image image = HPDF_LoadJpegImageFromFile(pdf, files.at(i).c_str()); HPDF_Page_DrawImage(page, image, 50, 50, HPDF_Image_GetWidth(image), HPDF_Image_GetHeight(image)); } HPDF_SaveToFile(pdf, "2.pdf"); HPDF_Free(pdf); }
// 图片是什么尺寸,PDF的page页面就是什么尺寸 int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); HPDF_SetCompressionMode(pdf, HPDF_COMP_ALL); // 压缩 vector<string> files = { "./files/1.jpg", "./files/2.jpg", "./files/3.jpg" }; for (int i = 0; i < files.size(); i++) { HPDF_Image image = HPDF_LoadJpegImageFromFile(pdf, files.at(i).c_str()); HPDF_REAL image_width = HPDF_Image_GetWidth(image); HPDF_REAL image_height = HPDF_Image_GetHeight(image); HPDF_Page page = HPDF_AddPage(pdf); HPDF_Page_SetWidth(page, image_width); HPDF_Page_SetHeight(page, image_height); // 设置缩放 HPDF_Destination dst = HPDF_Page_CreateDestination(page); HPDF_Destination_SetXYZ(dst, 0, HPDF_Page_GetHeight(page), 1); HPDF_SetOpenAction(pdf, dst); HPDF_Page_DrawImage(page, image, 0, 0, image_width, image_height); } HPDF_SaveToFile(pdf, "1.pdf"); HPDF_Free(pdf); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具