C++提取PDF页成BMP图片

背景:之前接了一个小单子,需求就是将PDF转成.tif图片,刚好闲着,就搜了许多资料,最后选择的是PDFium SDK。
1、首先是打开PDF文件,

//chPDF为文件路径
FPDF_DOCUMENT pdf_doc = FPDF_LoadDocument(chPDF, NULL);
if (pdf_doc == NULL)
{printf("open file failed.");return;
}

2、获取PDF文件页数

int pageCount = FPDF_GetPageCount(pdf_doc);
if (pageCount <= 0)
{FPDF_CloseDocument(pdf_doc);continue;
}

3、对每页的处理

for (int pageIndex = 0; pageIndex < pageCount; pageIndex++)
{//根绝页面号加载页面FPDF_PAGE page = FPDF_LoadPage(pdf_doc, pageIndex);if (page == NULL){continue;}//获取页面默认大小double page_width = 0.0, page_height = 0.0;FPDF_GetPageSizeByIndex(pdf_doc, pageIndex, &page_width, &page_height);//以灰度的格式将页面渲染到FPDF_BITMAP ,这里的可以选择渲染的图片分辨率,我这里写成原来的两倍FPDF_BITMAP bitmap = FPDFBitmap_CreateEx(page_width*2, page_height*2 , FPDFBitmap_Gray, NULL, 0);//创建空位图FPDF_DWORD fill_color = 0xFFFFFFFF;//默认填充,可以不写FPDFBitmap_FillRect(bitmap, 0, 0, need_l, need_w, 255, 255, 255,0);//开始渲染,FPDF_RenderPageBitmap耗时跟分辨率有关FPDF_RenderPageBitmap(bitmap, page, 0, 0, need_l, need_w, 0, 0);//保存成BMP,SaveImage是我自己实现方法,其实就是在数据前面加上BMP图片格式的文件头SaveImage(文件名,图片数据,一行所占的像素值,图片高)SaveImage("123.bmp", (BYTE*)FPDFBitmap_GetBuffer(bitmap), FPDFBitmap_GetStride(bitmap), FPDFBitmap_GetHeight(bitmap));//关闭页面FPDF_ClosePage(page);
}
//关闭文件
FPDF_CloseDocument(pdf_doc);

至此就完成了将PDF的页面抽取封装成BMP图片,至于转为.TIF格式,我是在BMP的基础上使用另外的方法转的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Agile in a Flash:重新定义纪律

今天偶遇《Agile in a Flash》一书&#xff0c;第一眼就有想一口气读完的冲动。但好书需要的是慢慢品味&#xff0c;偶尔翻翻也会有不一样的感悟。看过一部分后就有了翻译它的想法&#xff0c;一方面可以让自己慢下来细细研读&#xff0c;另一方面也可以和更多人分享。 专注工作…

cad文字递增快捷键_十年经验总结,100个CAD快捷键。

CAD绘图快捷键命令&#xff1a;1. 圆 > C2. 点 > PO3. 直线 > L4. 圆弧 > A5. 椭圆 > EL6. 表格 > TB7. 矩形 > REC8. 面域 > REG9. 创建块 > B10. 插入块 > I11. 多段线 > PL12. 构造线 > XL13. 图案填充 > H14. 样条曲线 > SPL15.…

【MySql】linux下,设置mysql表名忽略大小写

【障碍再现】 状况描述01&#xff1a;在LINUX下调一个程序经常报出找不到表&#xff0c;但是我明明是建了表的&#xff0c;测试的时候&#xff0c;遇到一些问题&#xff0c;从Windows平台访问虚拟机中的Web应用&#xff0c;经常报出找不到表&#xff0c;但自己明明在数据库中看…

HDOJ1861 游船出租

题目&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1861 代码&#xff1a; #include<stdio.h> #include<stdlib.h> struct info{//记录的数据结构&#xff1b; int id;//船号&#xff1b; char key;//键值&#xff1b; int time;//时间(分钟表示)&#x…

BZOJ 2588 Spoj 10628 Count on a tree | 树上主席树

BZOJ 2588 Count on a tree 题面 求树上两点之间路径上第k大的点权。 题解 一开始看到这道题觉得是树剖&#xff0c;然后又听说是主席树&#xff0c;然后以为是主席树树剖&#xff0c;差点没吓死…… 然后发现&#xff0c;如果每个点都挂一棵主席树&#xff0c;每棵都通过修改父…

会计未来十年发展趋势_谈未来十年会计行业的发展趋势

谈未来十年会计行业的发展方向&#xff0c;会计行业未来十年将变成什么样子?信息化和数据化改变着各行各业&#xff0c;会计行业也不例外&#xff0c;近十年会计行业发生了翻天覆地的变化&#xff0c;10年后&#xff0c;我想还会有巨大的变化。具体变化预想如下&#xff1a;1.…

QT使用Q_OBJECT链接不通过的一种情况

今天在main里自定义继承于QObject的类&#xff0c;添加了Q_OBJECT宏和信号之后&#xff0c;总是链接不通过&#xff0c;提示XXXX::staticMetaObject等等不存在。 后来得知在cpp里定义的Q_OBJECT,需要添加额外步骤才能编译通过。 下面是找到的一段文档&#xff0c;原文&#xff…

实验5: IOS的升级与恢复

实验5: IOS的升级与恢复 实验目的通过本实验可以掌握 1) 掌握IOS 正常的情况下升级IOS2) IOS 丢失的情况下使用TFTP恢复IOS3) IOS 丢失的情况下使用Xmodem恢复IOS 拓扑结构 实验步骤n IOS 正常的情况下升级IOS (TFTP)Router#conf t //进…

element的分页怎么改中文配置_vue想改变element分页样式

我想要把左边靠左 右边pager靠右.el-pagination .btn-next {background: center center no-repeat #fff;background-size: 16px;cursor: pointer;color: #103133;float:right;}.el-pagination .btn-prev {background: center center no-repeat #fff;background-size: 16px;curs…

MYSQL:基础——触发器

MYSQL基础——触发器 引入触发器 什么是触发器 如果你想要某条语句(或某些语句)在事件发生时自动执行。比如&#xff1a; 每当订购一个产品时&#xff0c;都从库存数量中减去订购的数量&#xff1b;无论何时删除一行&#xff0c;都在某个存档表中保留一个副本。就需要用到触发器…

双线macd指标参数最佳设置_常用指标知多少(二)

均线日期的选择种类有很多&#xff0c;一般行情软件常用的均线日期是5日、10日、20日、30日和60日&#xff0c;一般也会默认是这些日期&#xff0c;也有的加上了长线的120日和250日&#xff0c;很好理解&#xff0c;因为每周交易日是5天&#xff0c;所以以倍数做比较。使用海龟…

VI高级命令集锦

1.交换两个字符位置xp2.上下两行调换ddp3.把文件内容反转:g/^/m0/ (未通过)4.上下两行合并 J5.删除所有行 dG6.从当前位置删除到行尾d$7.从当前位置复制到行尾y$ 如果要粘贴到其他地方 p 就可以了由于vi 是建立在 EX 上的 所以 当键入 : 时就来到了 EX 命令状态 8.:ab string s…

图片合成gif_使用在线图片工具处理静态和动态图片的技巧

图片一般分为两种&#xff0c;一种是静态图片&#xff0c;常用的图片格式有jpg&#xff0c;png等。处理静态图片可用用手机自己带的图片处理工具处理&#xff0c;也能够使用线上的在线作图工具来进行操作&#xff0c;比如找图设计&#xff0c;懒设计&#xff0c;稿定设计等设计…

Redis源代码分析之sds, 动态数组

Redis是用C语言编写的。C语言处理字符串一向是个难点。很容易出现内存越界问题。 其它高级语言很容易实现的字符串拼接&#xff0c;在C这里却是百般艰难。因为需要实现计算出字符串所占内存的大小。即不能过大&#xff08;浪费内存&#xff09;&#xff0c;也不能太小&#xff…

kaldi windows安装_kaldi在Windows下的使用

其实不是特别推荐在Windows下使用kaldi&#xff0c;因为在egs下所有的脚本都无法运行&#xff0c;我也是弄了很久才在Windows下配置好kaldi&#xff0c;都一度差点弃坑。就连官方也说There is no commitment to support Windows. The Windows port of Kaldi is targeted at exp…

C#委托的异步调用[转]

本文将主要通过“同步调用”、“异步调用”、“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊。 首先&#xff0c;通过代码定义一个委托和下面三个示例将要调用的方法&#xff1a; /*添加的命名空间using System.Threading;using System.Runtime.…

[Python] isinstance() for checking object type

isinstance("foo", str) isinstance(1, int) isinstance(4.0, float) 转载于:https://www.cnblogs.com/Answer1215/p/8018722.html

钉钉微应用怎么进入_蓝凌携手钉钉走进越秀地产,零距离热聊企业数字化转型...

8月18日&#xff0c;蓝凌携手钉钉一同走进越秀地产&#xff0c;举办了《地产行业数字化实战闭门分享会》主题活动&#xff0c;与30余名嘉宾欢聚一堂&#xff0c;体验智慧管理实践与数字工作模式&#xff0c;探索企业数字化转型升级之道。越秀地产CIO陈磊、越秀地产信息总监郑毅…

mysql5.7半自动同步设置【转】

mysql的主从复制主要有3种模式&#xff1a; a..主从同步复制&#xff1a;数据完整性好&#xff0c;但是性能消耗高 b.主从异步复制&#xff1a;性能消耗低&#xff0c;但是容易出现主从数据唯一性问题 c.主从半自动复制&#xff1a;介于上面两种之间。既能很好的保持完整性&…

virsh 关机_kvm虚拟机不能使用virsh shutdownw命令关闭虚拟机的解决方法

今天笔者在对kvm虚拟机进行管理时&#xff0c;使用virsh shutdown命令关闭指定的虚拟机时&#xff0c;发现虽然有如下的提示&#xff0c;但其实虚拟机却一直不会真正的关闭。经过查看virsh命令帮助和上网查询&#xff0c;才得知virsh shutdown命令使用发送acpi指令来控制虚拟机…