当前位置: 首页 > news >正文

qt pdf 模块简介

文章目录

  • 1. 技术平台
  • 2. Qt pdf 模块
  • 3. cmake 使用模块
  • 4. 许可证
  • 5. 简单示例
    • 5.1 CMakeLists.txt
    • 5.2 main.cpp
  • 6. 总结

1. 技术平台

项目说明
OSwin10 x64
Qt6.6
compilermsvc2022
构建工具cmake

2. Qt pdf 模块

  Qt PDF模块包含用于呈现PDF文档的类和函数。

  • QPdfDocument 类加载PDF文档,并根据QPdfDocumentRenderOptions类提供的选项从中呈现页面。
  • QPdfPageRenderer 类管理一个队列,该队列收集所有呈现请求。
  • QPdfPageNavigator 类处理通过PDF文档的导航。
  • QPdfSearchModel 类搜索字符串并保存搜索结果。
  • QPdfBookmarkModel 类保存目录(如果存在)。
  • QPdfLinkModel 保存有关页面上超链接的信息。
  • QPdfView 小部件是一个完整的PDF查看器,< PDF Viewer Widget Example> 示例展示了如何使用它。

Qt Quick 部分略过不提

  如果只需要呈现页面图像,而不需要文本选择、搜索和导航等功能,则该模块包含一个QImageIOHandler插件,该插件将PDF视为可伸缩的图像格式,类似于SVG。您可以简单地使用Image,并将currentFrame属性设置为希望显示的页面索引。如果PDF文件不呈现其自己的背景,则图像具有透明背景。

3. cmake 使用模块

 find_package(Qt6 REQUIRED COMPONENTS Pdf PdfWidgets)target_link_libraries(mytarget Qt6::Pdf Qt6::PdfWidgets)

4. 许可证

Qt PDF在Qt公司的商业许可下可用。此外,它在GNU较宽松通用公共许可证(版本3)或GNU通用公共许可证(版本2)下可用。有关此模块的更多详细信息,请参阅Qt PDF许可。

5. 简单示例

在这里插入图片描述

5.1 CMakeLists.txt

#CMakeLists.txtcmake_minimum_required(VERSION 3.5)project(QtPDF VERSION 0.1 LANGUAGES CXX)set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets  PdfWidgets Pdf)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets  PdfWidgets Pdf)set(PROJECT_SOURCESmain.cpp
)if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)qt_add_executable(QtPDFMANUAL_FINALIZATION${PROJECT_SOURCES})
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET QtPDF APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()if(ANDROID)add_library(QtPDF SHARED${PROJECT_SOURCES})
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")else()add_executable(QtPDF${PROJECT_SOURCES})endif()
endif()target_link_libraries(QtPDF PRIVATEQt${QT_VERSION_MAJOR}::WidgetsQt${QT_VERSION_MAJOR}::PdfWidgetsQt${QT_VERSION_MAJOR}::Pdf
)# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.QtPDF)
endif()
set_target_properties(QtPDF PROPERTIES${BUNDLE_ID_OPTION}MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}MACOSX_BUNDLE TRUEWIN32_EXECUTABLE TRUE
)include(GNUInstallDirs)
install(TARGETS QtPDFBUNDLE DESTINATION .LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)if(QT_VERSION_MAJOR EQUAL 6)qt_finalize_executable(QtPDF)
endif()

5.2 main.cpp

#include <QtWidgets>
#include <QtPdfWidgets>
#include "qout.hpp"int main(int argc, char *argv[])
{QApplication a(argc, argv);QMainWindow w;// 分割器auto splitter  = new QSplitter(&w);w.setCentralWidget(splitter);// PDF查看器控件auto *pdf_view = new QPdfView(splitter);pdf_view->setPageMode(QPdfView::PageMode::MultiPage); // 多页浏览模式pdf_view->setZoomMode(QPdfView::ZoomMode::FitToWidth);// 适合宽度模式// QPdfDocument类 加载PDF文档并呈现页面auto pdf_doc = new QPdfDocument(pdf_view);pdf_view->setDocument(pdf_doc);pdf_doc->load("E:/00_Download/Compressed/现代 C   教程:高速上手 C  11_14_17_20.pdf");// QPdfBookmarkModel类 保存PDF文档中的链接树(锚点),例如目录。QPdfBookmarkModel *pdfBookmarkModel = new QPdfBookmarkModel(splitter);pdfBookmarkModel->setDocument(pdf_doc);// 使用TreeView 来显示目录auto bookMarkTreeView = new  QTreeView(splitter);QFont serifFont("Times", 10, QFont::Normal);bookMarkTreeView->setModel(pdfBookmarkModel);bookMarkTreeView->setFont(serifFont);bookMarkTreeView->header()->hide();splitter->addWidget(bookMarkTreeView);splitter->addWidget(pdf_view);splitter->setStretchFactor(1,1); // pdf_view 获取最大的可用空间w.showMaximized();// 打印书签的角色名称qout << pdfBookmarkModel->roleNames();qout << pdfBookmarkModel->rowCount() << pdfBookmarkModel->columnCount();auto index = pdfBookmarkModel->index(0,0);qout << index;qout << pdfBookmarkModel->data(index,(int)QPdfBookmarkModel::Role::Title);qout << pdfBookmarkModel->data(index,(int)QPdfBookmarkModel::Role::Level);qout << pdfBookmarkModel->data(index,(int)QPdfBookmarkModel::Role::Page);qout << pdfBookmarkModel->data(index,(int)QPdfBookmarkModel::Role::Location);qout << pdfBookmarkModel->data(index,(int)QPdfBookmarkModel::Role::Zoom);QObject::connect(bookMarkTreeView,&QTreeView::clicked,bookMarkTreeView,[pdf_view,pdfBookmarkModel](const QModelIndex &index){QPdfPageNavigator* nav = pdf_view->pageNavigator();auto page = pdfBookmarkModel->data(index,(int)QPdfBookmarkModel::Role::Page).toInt();nav->jump(page, {}, nav->currentZoom());});return a.exec();
}

6. 总结

Qt pdf 模块 底层使用的是PDFium库, 不知道是不是PDFium库的版本问题,在解析书签目录的时候,还是有点问题, 没有location,所以没必要深究这个模块,不是太理想

相关文章:

qt pdf 模块简介

文章目录 1. 技术平台2. Qt pdf 模块3. cmake 使用模块4. 许可证5. 简单示例5.1 CMakeLists.txt5.2 main.cpp 6. 总结 1. 技术平台 项目说明OSwin10 x64Qt6.6compilermsvc2022构建工具cmake 2. Qt pdf 模块 Qt PDF模块包含用于呈现PDF文档的类和函数。 QPdfDocument 类加载P…...

Spring Boot WebSocket 客户端

介绍 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议&#xff0c;它可以提供实时的、双向的数据传输。Spring Boot 提供了对 WebSocket 的支持&#xff0c;我们可以使用 Spring Boot WebSocket 客户端来连接到 WebSocket 服务器&#xff0c;并进行实时通信。 本文将…...

第五题-kotori和素因子【第六届传智杯程序设计挑战赛解题分析详解复盘】(JavaPythonC++实现)

🚀 欢迎来到 ACM 算法题库专栏 🚀 在ACM算法题库专栏,热情推崇算法之美,精心整理了各类比赛题目的详细解法,包括但不限于ICPC、CCPC、蓝桥杯、LeetCode周赛、传智杯等等。无论您是刚刚踏入算法领域,还是经验丰富的竞赛选手,这里都是提升技能和知识的理想之地。 ✨ 经典…...

【服务器能干什么】二十分钟搭建一个属于自己的 RSS 服务

如果大家不想自己捣鼓,只是想尝尝鲜,可以在下面留言,我后台帮大家开几个账号玩一玩。 哔哩哔哩【高清版本可以点击去吐槽到 B 站观看】:【VPS服务器到底能干啥】信息爆炸的年代,如何甄别出优质的内容?你可能需要自建一个RSS服务!_哔哩哔哩_bilibili 前言 RSS 服务 市…...

热门免费api接口:含核验API,物流api,短信api,天气api。。。

热门免费api接口&#xff1a;含核验API,物流api,短信api,天气api。。。 银行卡二要素&#xff1a;检测输入的姓名、银行卡号是否一致。毫秒级响应、直联保障&#xff0c;支持全国所有银联卡。银行卡三要素&#xff1a;检测输入的姓名、身份证号码、银行卡号是否一致。毫秒级响…...

基于AC6969的蓝牙控制RGB彩灯

程序的实现思路&#xff1a;单片机与手机app之间通过蓝牙实现通讯&#xff0c;通过点击屏幕上的对应色块然后app会把对应的RGB值发送到单片机。然后单片机会对数据进行解析然后把数字量转换为模拟量&#xff0c;然后通过PWM控制IO口输出不同的电压以此来达到控制RGB灯 RGB彩灯原…...

【C++高阶(五)】哈希思想--哈希表哈希桶

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 哈希结构 1. 前言2. unordered系列容器3. 哈希概…...

45、Flink 的指标体系介绍及验证(1)-指标类型及指标实现示例

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

SAP创建ODATA服务-Structure

SAP创建ODATA服务-Structure 1、创建数据字典 进入se11创建透明表ZRICO_USR,并创建对应字段 2、创建OData service 首先创建Gateway service project&#xff0c;事务码&#xff1a;SEGW&#xff0c;点击Create Project 按钮 Gateway service Project分四个部分&#xff1a…...

【开源】基于JAVA的车险自助理赔系统

项目编号&#xff1a; S 018 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S018&#xff0c;文末获取源码。} 项目编号&#xff1a;S018&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车…...

单例模式-C++实现

目录 饿汉式懒汉式双检查锁&#xff0c;线程安全的版本什么是reorder&#xff1f;解决内存读写reorder不安全方法代码解释懒汉式的优缺点 单例模式是一种设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局的访问点来获取该实例。它常用于需要在整个应…...

一种模板类实现和声明分开在生成的.a文件被使用时出现undefined reference时的一种解决方法

一种模板类实现和声明分开在生成的.a文件被使用时出现undefined reference时的一种解决方法 模板类头文件格式如下&#xff1a; test.h // test.h namespace test { namespace _testspace { class base { public: base(); ~base(); };template<bool T> class base_impl…...

js用到的算法

1.对象数组中&#xff0c;对象中有对象&#xff0c;数组根据对象中的对象打平 [{indexValueMap: { 68443: 0, 68457: 0 },rowName1: 固定收益类,rowName2: 交易类,rowName3: 次级},{indexValueMap: { 68443: 0, 68457: 0 },rowName1: 固定收益类,rowName2: 交易类,rowName3: 中…...

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷9

1、商标也属于知识产权的一种。一个商标在注册之后&#xff0c;将会在&#xff08;&#xff09;的时间受到保护 A、20 年内 B、50 年内 C、直至注册人去世 D、10 年内 答案&#xff1a;D 2、人类史上第一位进入太空的宇航员是&#xff08;&#xff09;&#xff0c;他/她是…...

如何使用抖音直播调试入口扫码进行调试

使用抖音直播调试入口扫码进行调试的步骤如下&#xff1a; 确保你已经安装了抖音调试助手。打开调试助手&#xff0c;并在主界面点击“连接”按钮。在连接向导页面&#xff0c;根据提示连接你的抖音直播间。请确保你已经获取了直播间的token和scheme。连接成功后&#xff0c;你…...

AI智能人机对话小程序系统源码 附带完整的搭建教程

移动互联网的普及和快速发展&#xff0c;小程序已经成为了一种非常流行的应用形态。小程序具有即用即走、轻量级的特点&#xff0c;非常适合用于提供各种便捷服务。下面罗峰来给大家分享一款AI智能人机对话小程序系统源码&#xff0c;带有完整的搭建教程。 以下是部分代码示例…...

【腾讯云云上实验室】用向量数据库在金融信数据库分析中的实战运用

一、前言 这篇文章将带领读者探索数据库的多样化解决方案及其演进历程&#xff0c;特别关注向量数据库的重要性和在实际项目中的应用。 通过深入剖析腾讯云向量数据库及其在金融信用数据库分析中的实战运用&#xff0c;为读者提供全面而实用的指南&#xff0c;帮助他们理解、…...

2015年五一杯数学建模A题不确定性条件下的最优路径问题解题全过程文档及程序

2015年五一杯数学建模 A题 不确定性条件下的最优路径问题 原题再现 目前&#xff0c;交通拥挤和事故正越来越严重的困扰着城市交通。随着我国交通运输事业的迅速发展&#xff0c;交通“拥塞”已经成为很多城市的“痼疾”。在复杂的交通环境下&#xff0c;如何寻找一条可靠、快…...

5、Qt:项目中包含多个子项目(.pro)/子模块(.pri)

一、说明&#xff1a; 在进行项目开发过程中&#xff0c;会涉及子项目/子模块的问题 Qt中使用TEMPLATE subdirs添加多个子项目&#xff1b;子项目可以单独编译生成可执行文件&#xff08;exe&#xff09;或者动态链接库&#xff08;dll&#xff09;等&#xff0c;供其他模块…...

Facebook的特点优势

Facebook作为全球最大的社交媒体平台之一&#xff0c;同时也是最受欢迎的社交网站之一&#xff0c;Facebook具有许多独特的特点和优势。本文小编将说一些关于Facebook的特点及优势。 1、全球化 Facebook拥有数十亿的全球用户&#xff0c;覆盖了几乎所有国家和地区。这使得人们…...

知识竞赛软件如何选择?抢答器功能

知识竞赛软件怎么选&#xff1f;抢答器功能是关键 组织一场精彩、公平、高效的知识竞赛&#xff0c;离不开专业软件的支持。在众多功能中&#xff0c;抢答器功能往往是决定竞赛成败的核心。本文将系统性地探讨如何选择一款合适的知识竞赛软件&#xff0c;并深入分析抢答器功能…...

为什么 2026 是 AI Agents 创业者的黄金窗口

为什么 2026 是 AI Agents 创业者的黄金窗口 关键词 AI Agents、大语言模型、多模态智能体、自主系统、技术创业、LLM 应用、黄金窗口期 摘要 本文深入探讨了为什么2026年将成为AI Agents创业者的黄金窗口。我们将从技术发展历程、市场成熟度、基础设施完善等多个维度分析这…...

Glide:Android图片加载的瑞士军刀,真的有这么神?

Glide&#xff1a;Android图片加载的瑞士军刀&#xff0c;真的有这么神&#xff1f; Glide 是什么&#xff0c;为何选择它 在 Android 开发的世界里&#xff0c;图片加载是一个绕不开的重要环节。想象一下&#xff0c;在一个社交类 APP 中&#xff0c;用户的头像、发布的照片&a…...

uniSDK5.06 HBuilder-Integrate-AS 引入 AeroFFmpeg

用Android Studio 导入 unisdk5.06\Android-SDK5.06.82597_20260401\HBuilder-Integrate-AS 工程需要下载 jdk17 安卓SDK通过网盘分享的文件&#xff1a;unisdk5.06.rar 链接: https://pan.baidu.com/s/1cYeW29xsoqIa6lh4wk16FQ?pwdp8ak 提取码: p8ak...

Redis:延迟双删的适用边界与落地细节哨

pagehelper整合 引入依赖com.github.pagehelperpagehelper-spring-boot-starter2.1.0compile编写代码 GetMapping("/list/{pageNo}") public PageInfo findAll(PathVariable int pageNo) {// 设置当前页码和每页显示的条数PageHelper.startPage(pageNo, 10);// 查询数…...

从零构建可审计、可回滚、可监控的向量检索服务:EF Core 10架构设计图+DDD分层实践(含GitHub可运行Demo)

第一章&#xff1a;EF Core 10向量检索服务的核心定位与演进背景EF Core 10首次将原生向量检索能力深度集成至ORM层&#xff0c;标志着.NET数据访问技术从传统关系型查询迈向语义化、多模态检索的新阶段。这一演进并非孤立功能叠加&#xff0c;而是响应大语言模型应用爆发、RAG…...

突破硬件限制的游戏自由:Sunshine串流方案让低配设备玩转3A大作

突破硬件限制的游戏自由&#xff1a;Sunshine串流方案让低配设备玩转3A大作 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款开源的自托管游戏串流服务器&#xff0c…...

存储那么贵,何不白嫖飞书云文件空间荷

基础示例&#xff1a;单工作表 Excel 转 TXT 以下是将一个 Excel 文件中的第一个工作表转换为 TXT 的完整步骤&#xff1a; 1. 加载并读取Excel文件 from spire.xls import * from spire.xls.common import * workbook Workbook() workbook.LoadFromFile("示例.xlsx"…...

windows/linux安装NVIDIA驱动(cuda加速)

目录 1、windwos安装 2、linux安装NVIDIA驱动&#xff08;cuda加速&#xff09; &#xff08;1&#xff09;检测是否有NVIDIA显卡 &#xff08;2&#xff09;驱动安装 1、windwos安装 https://www.nvidia.cn/geforce/drivers/https://www.nvidia.cn/geforce/drivers/ 2、l…...

CMake Converter终极指南:三步实现Visual Studio到CMake的自动化迁移

CMake Converter终极指南&#xff1a;三步实现Visual Studio到CMake的自动化迁移 【免费下载链接】cmakeconverter This project aims to facilitate the conversion of Visual Studio to CMake projects. 项目地址: https://gitcode.com/gh_mirrors/cm/cmakeconverter …...