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);
}

PDF库 libharu 简单操作的更多相关文章

  1. spider _其他库的简单操作与方法

    PHP : 网络IO java : 代码笨重,代码量很大 C/C++ :虽然效率高,但是代码成型很慢 1 通用网络爬虫(搜索引擎引用,需要遵守robots协议) 1 搜索引擎如何获取一个新网站的 UR ...

  2. TortoiseSVN搭建本地版本库及简单操作使用

    TortoiseSVN是windows上一款著名的版本控制软件,对于我们管理自己的代码,特别是对一个团队来说,非常重要. 本文探讨的是如何搭建本地的版本库. (1)安装TortoiseSVN之后需要创 ...

  3. TortoiseSVN 搭建本地版本库及简单操作使用

    TortoiseSVN是windows上一款著名的版本控制软件,对于我们管理自己的代码,特别是对一个团队来说,非常重要. 本文探讨的是如何搭建本地的版本库. (1)安装TortoiseSVN之后需要创 ...

  4. Python 数据分析中金融数据的来源库和简单操作

    目录 金融数据 pandas-datareader TuShare 金融学图表 案例 金融数据 数据分析离不开数据的获取,这里介绍几种常用的获取金融方面数据的方法. pandas-datareader ...

  5. python操作JIRA的库简单操作

    因公司需要,我们开发的PRISM又需要和JIRA对接啦, 今天找了一个JIRA库撸了一发~~~ jira库地址: https://pypi.python.org/pypi/jira/1.0.3 简单操 ...

  6. C++标准库<string>简单总结

    C++标准库<string>简单总结 在C++中,如果需要对字符串进行处理,那么它自带的标准库<string>无疑是最好的选择,它实现了很多常用的字符处理函数. 要想使用标准C ...

  7. app 下载更新 file-downloader 文件下载库的简单介绍和使用

    app 下载更新 file-downloader 文件下载库的简单介绍和使用 今天介绍一个下载库:file-downloader 文件下载库 说明: * 本文内容来自原 file-downloader ...

  8. MongoDB数据库简单操作

    之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数 ...

  9. MongoDB的简单操作

    一.简介 二.MongoDB基础知识 三.安装 四.基本数据类型 五.增删改查操作 六.可视化工具 七.pymongo 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoD ...

  10. Linux下MySQL的简单操作

    Linux下MySQL的简单操作 更改mysql数据库root的密码 首次进入数据库是不用密码的: [root@localhost ~]# /usr/local/mysql/bin/mysql -ur ...

随机推荐

  1. 学会了MySql高级查询让你在工作中游刃有余

    一.单元概述 通过本章的学习能够理解MySQL数据库中分组查询的含义,掌握常用分组函数的使用,掌握GROUP BY子句的使用规则,掌握分组后数据结果的条件过滤,掌握SELECT语句执行过程,理解子查询 ...

  2. 51从零开始用Rust编写nginx,江湖救急,TLS证书快过期了

    wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 负载均衡, 静态文件服务器,websocket代理,四层TCP/UDP转发,内网穿透等,会将实 ...

  3. 【Azure Function】Function本地调试时遇见跨域问题(blocked by CORS policy)

    问题描述 在本地调试Azure Function时,遇见了跨域问题: Access to XMLHttpRequest at 'http://localhost:7071/api/HttpTrigge ...

  4. 【Azure 环境】标准版 Logic App 如何查看 Workflow的执行成功数和失败数的指标呢?

    问题描述 在Azure中创建逻辑应用(Logic App),有两种计划类型.一是消费型,另一种是标准型. 在消费型的Logic App Metrics页面中,我们可以看见Workflow的执行成功数指 ...

  5. 【Azure 事件中心】Spring Boot 集成 Event Hub(azure-spring-cloud-stream-binder-eventhubs)指定Partition Key有异常消息

    问题描述 在Spring Boot应用中集成Event Hub,发送消息时指定Partition Key,日志中发现异常: 应用使用Event Hub版本为 <dependency> &l ...

  6. Isito 入门(二):Istio 的部署

    本教程已加入 Istio 系列:https://istio.whuanle.cn 目录 2,部署 Istio 安装 Helm 部署 istio-base 部署 istiod 部署 istio-ingr ...

  7. Hibernate-Validator扩展之自定义注解

    一.Hibernate-Validator介绍 ​ Hibernate-Validator框架提供了一系列的注解去校验字段是否符合预期,如@NotNull注解可以校验字段是否为null,如果为null ...

  8. [C/C++] PCWSTR LPCTSTR等等

    目录 为什么会有这个 L"" 宏 LPCWSTR字符串比较 wchar_t 和 char 之间转换 关于 ANSI编码 乌拉~~~ 这是我第一百篇博文咯~ 为什么会有这个 真的开发 ...

  9. SQL之 逻辑库,数据表

    SQL语言三大类 创建逻辑库 创建数据表 例子 数据表其他操作 ps:desc仅仅查看表的结构,不能查看内容 添加字段 ps: 修改字段类型和约束 修改字段名称 删除字段

  10. vue3在typescript下对props类型判断

    使用vue3.0 对 props 进行复杂类型验证的时候,可以直接用 PropType 进行强制转换: callback: Function as PropType<()=>void> ...