Qt 通过pdfium将网络上的pdf显示为图片

前言

遇到个需求,就是在qt客户端显示服务器上的pdf文档,文档以base64格式返回给客户端。以下是实现方法:

1、在pro文件增加以下代码:

INCLUDEPATH += $$PWD/PDFiumSDK/include/publicDEPENDPATH += $$PWD/PDFiumSDK/include/publicLIBS += -l$$PWD/PDFiumSDK/lib/x86/pdfium

2、pdf转图片
 

FPDF_InitLibrary();
// base64的数据要先转为二进制
QByteArray bytes = QByteArray::fromBase64(strBase64Code.toUtf8());
FPDF_DOCUMENT doc = FPDF_LoadMemDocument(bytes.data(), bytes.size(), "");
int pageCount = FPDF_GetPageCount(doc);
for (int t = 0; t < pageCount; t++)
{FPDF_PAGE page = FPDF_LoadPage(doc, t);int width = static_cast<int>(FPDF_GetPageWidth(page));int height = static_cast<int>(FPDF_GetPageHeight(page));FPDF_BITMAP bitmap = FPDFBitmap_Create(width, height, 0);FPDFBitmap_FillRect(bitmap, 0, 0, width, height, 0xFFFFFFFF);FPDF_RenderPageBitmap(bitmap, page, 0, 0, width, height, 0, 0);const char* buffer = reinterpret_cast<const char* >(FPDFBitmap_GetBuffer(bitmap));// 数据转图片,使用不同的Format可能会有图片失真的现象,要多试几次QImage image((uchar*)buffer, width, height, QImage::Format_RGB32);QLabel *label = new QLabel(this);label->setPixmap(QPixmap::fromImage(image));label->setFixedSize(width, height);// TODO addwidget(label);把label添加到显示控件中FPDF_ClosePage(page);count++;
}
FPDF_CloseDocument(doc);
FPDF_DestroyLibrary();

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

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

相关文章

Python 全栈系列232 再次搭建RabbitMQ

说明 最近想重新上RabbitMQ&#xff0c;主要目的还是为了分布式任务调度。在Kafka和RabbitMQ两者犹豫了一下&#xff0c;还是觉得RabbitMQ好一些。 在20年的时候有搞过一阵子的RabbitMQ,看了下当时的几篇文章&#xff0c;觉得其实想法一直没变过。 Python - 装机系列24 消息…

常用“树”数据结构

哈夫曼树 在许多应用中&#xff0c;树中结点常常被赋予一个表示某种意义的数值&#xff0c;称为该结点的权。从树的根到任意结点的路径长度(经过的边数)与该结点上权值的乘积&#xff0c;称为该结点的带权路径长度。树中所有叶结点的带权路径长度之和称为该树的带权路径长度&am…

出现身份验证错误,无法连接到本地安全机构 顺利解决这个问题希望能帮助大家

出现身份验证错误&#xff0c;无法连接到本地安全机构&#xff0c;远程计算机&#xff1a;XX&#xff0c;这可能是由于密码过期&#xff0c;如果密码已过期请更新密码。 我们可以在系统属性中对远程进行设置&#xff0c;以解决远程桌面无法连接到本地安全机构这一问题。 步骤…

倒计时34天

L2-1 堆宝塔 - B107 2023级选拔春季开学测重现 (pintia.cn) #include<bits/stdc.h> using namespace std; //#define int long long const int N2e56; const int inf0x3f3f3f3f; const double piacos(-1.0); vector<int>ve1,ve2; vector<vector<int> >…

企业出海WAS安全自动化解决方案

随着企业出海的日益激烈&#xff0c;安全风险正在成为企业日益关注的问题之一&#xff0c;九河云携手AWS带来了使用Amazon WAF 与 Amazon Shield 的 CloudFront安全自动化。Aws WAF是一种web应用防火墙&#xff0c;可帮助保护客户的web应用程序或api免遭常规web漏洞的攻击。Aws…

【R语言教程】

R语言简介&#xff1a; R 是一种自由、开源的编程语言&#xff0c;专门用于统计分析、数据挖掘、数据可视化以及整理和清洗数据。 R 的强大功能和丰富的扩展包使得它在全球统计学家、数据科学家甚至其它领域的研究员和技术人员中都非常受欢迎。 R语言环境&#xff1a; 要开始…

【Hadoop大数据技术】——Hadoop概述与搭建环境(学习笔记)

&#x1f4d6; 前言&#xff1a;随着大数据时代的到来&#xff0c;大数据已经在金融、交通、物流等各个行业领域得到广泛应用。而Hadoop就是一个用于处理海量数据的框架&#xff0c;它既可以为海量数据提供可靠的存储&#xff1b;也可以为海量数据提供高效的处理。 目录 &#…

【数据结构】用栈实现队列

前言&#xff1a;本节博客分享了用栈实现队列效果的思路以及代码&#xff0c;有需要借鉴即可。 1.题目及链接 LINK 2.思路分析 如果要用栈实现队列&#xff0c;我们直到栈是先入后出的一个效果&#xff0c;所以我们可以用两个栈&#xff0c;这样逆转两次数不就是入栈之前数组…

Scanner类的九大输入方法,三种输出方法

目录 输入方法 Scanner类的9大输入方法 输出方法 print println printf 例题实战 题目进阶 输入方法 最常见的输入输出方法 输入Scanner类 Scanner是Java5的新特征&#xff0c;在java.util包里&#xff0c;可以完成用户输入&#xff1a; 导入java.util包 构造Scanner对象&…

Linux环境下终端( 串口)接口应用

目录 概述 1 了解串口应用编程 1.1 认识 struct termios 结构体 1.1.1 认识c_iflag 1.1.2 认识c_oflag 1.1.3 认识 c_cflag 的配置参数 1.1.4 认识c_lflag 1.2 终端相关的函数库 2 编写串口应用接口 2.1 设置baud函数 2.2 设置停止位函数 2.3 设置奇偶校验函数 2.4…

SpringBoot约定大于配置

什么是约定大于配置 "约定大于配置"&#xff08;Convention Over Configuration&#xff09;是一种理念&#xff0c;旨在通过默认约定和规则来减少开发人员需要做的配置工作。在Spring Boot框架中&#xff0c;这一原则得到了充分应用&#xff0c;帮助开发者更快地构…

Blender和3ds Max哪个会是行业未来?

Blender和3ds Max都是很强大的三维建模和渲染软件&#xff0c;各有各的好处。选择哪个软件更好&#xff0c;要看你的需求、预算、技术水平以及行业趋势等因素。 Blender最大的优点是免费且开源&#xff0c;这对预算有限的个人和小团队来说很有吸引力。它有很多建模工具和功能&…

在电脑桌面打开任意应用程序的快捷键

首先为某个程序&#xff08;比如谷歌浏览器&#xff09;创建一个快捷方式&#xff0c; 其次右键快捷方式&#xff0c;找到属性一栏 单击快捷键三个字右边的方框&#xff08;里面有一个“无”&#xff09;&#xff0c;然后按下你所需要设置的快捷键

【强化学习的数学原理-赵世钰】课程笔记(七)时序差分方法

一.内容概述 第五节课蒙特卡洛&#xff08;Mento Carlo&#xff09;方法是全课程中第一次介绍 model-free 的方法&#xff0c;本节课的 Temporal-difference learning&#xff08;TD learning&#xff09;是我们要介绍的第二种 model-free 的方法。基于蒙特卡洛&#xff08;Me…

【数据结构高阶】并查集

目录 一、什么是并查集 二、并查集的原理 三、并查集的作用 四、并查集的代码实现 一、什么是并查集 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个 单元素集合&#xff0c;然后按一定的规律将归于同一组元…

【LeetCode每日一题】【BFS模版与例题】【二维数组】1293. 网格中的最短路径

BFS基本模版与案例可以参考&#xff1a; 【LeetCode每日一题】【BFS模版与例题】863.二叉树中所有距离为 K 的结点 【LeetCode每日一题】【BFS模版与例题】【二维数组】130被围绕的区域 && 994 腐烂的橘子 思路&#xff1a; 特殊情况&#xff1a; 最短的路径是向下再向…

【电路笔记】-双极晶体管

双极晶体管 文章目录 双极晶体管1、概述2、双极晶体管结构3、双极晶体管配置3.1 共基极 (CB) 配置3.2 共发射极 (CE) 配置3.3 共集极 (CC) 配置4、总结1、概述 双极结型晶体管是一种可用于开关或放大的半导体器件。 与半导体二极管不同,半导体二极管由两片半导体材料组成,形…

【Java基础面试题2】

目录 前言 1.11 int和Integer有什么区别&#xff0c;二者在做运算时会得到什么结果&#xff1f; 1.12 说一说你对面向对象的理解 1.13 面向对象的三大特征是什么&#xff1f; 1.14 封装的目的是什么&#xff0c;为什么要有封装&#xff1f; 1.15 说一说你对多态的理解 1…

ElasticSearch|ES|架构介绍|原理浅析

架构介绍 节点 (Nodes): Elasticsearch 集群由多个节点组成&#xff0c;每个节点是一个独立运行的 Elasticsearch 实例。节点之间通过内部通信协议相互协作。 Master Node: 主节点负责管理集群范围的操作&#xff0c;例如创建或删除索引、分配和重新分配分片、维护集群状态等。…

StarUML6.0.1使用

1. 简介 作为一个软件开发人员&#xff0c;平时免不了做一定的软件设计&#xff0c;标准做法就是采用UML来设计&#xff1a; 讨论功能流程时采用时序图、活动图来表达&#xff1b;做业务功能架构时采用组件图来表达&#xff1b;做系统部署架构时采用部署图来表达&#xff1b;做…