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. 【Azure Spring Cloud】在Azure Spring Apps上看见 App Memory Usage 和 jvm.menory.use 的指标的疑问及OOM

    问题描述 在Azure的Spring Cloud服务 (官名为:Spring Apps)中,在Metrics 页面中查看 App Memory Usage 和 jvm.memory.use,发现两则在 ...

  2. 【Azure 应用服务】App Service For Linux 中安装paping, 用于验证从App Service向外请求的网络连通性

    问题描述 App Service For Linux 中安装paping的操作步骤 解决步骤 1) 登录App Service的Kudu站点,点击Bash 2)使用命令下载paping压缩文件:#wg ...

  3. minio通过docker方式部署

    MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储. 它是与 Amazon S3 云存储服务兼容的 API 官方文档http://docs.minio.org.c ...

  4. kafka的消费

    1.消费方式 consumer 采用 pull(拉) 模式从 broker 中读取数据. push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的. 它的目标是尽可能 ...

  5. 线上RocktMQ重复投递半事务消息故障排查

    1. 故障现象 2020-11-18 10:40开始,业务线反馈线上收到大量的重复MQ半事务消息,导致容器资源消耗急剧攀升,经查看MQ日志,发现broker-b的Master服务,报出大量半事务消息回 ...

  6. 面试官:线程调用2次start会怎样?我支支吾吾没答上来

    写在开头 在写完上一篇文章<Java面试必考题之线程的生命周期,结合源码,透彻讲解!>后,本以为这个小知识点就总结完了. 但刚刚吃晚饭时,突然想到了多年前自己面试时的亲身经历,决定再回来补 ...

  7. JavaXMail发送邮件功能实现

    原文:JavaXMail发送邮件功能实现 | Stars-One的杂货小窝 好久之前实现的邮件发送功能,一直没整理出来,考虑到之后有个项目需要,先整理一波 提示: 本文代码例子是使用Kotlin语言编 ...

  8. ijkplayer编译-RTSP

    1.编译平台和版本 使用操作系统 Ubuntu 18.04 使用ndk版本:android-ndk-r14b-linux-x86_64.zip (使用r17c编译会报错) AS版本:4.2.2 1.1 ...

  9. 【Leetcode 907 907. 子数组的最小值之和】【单调栈dp】

    import java.util.LinkedList; class Solution { public int sumSubarrayMins(int[] arr) { int n = arr.le ...

  10. Spring Boot学习日记13

    学习引入Thymeleaf Thymeleaf 官网:https://www.thymeleaf.org/ Thymeleaf 在Github 的主页:https://github.com/thyme ...