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,所以没必要深究这个模块,不是太理想

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

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

相关文章

监控同一局域网内其它主机上网访问信息

1.先取得网关IP 2.安装IPTABLES路由表 sudo apt-get install iptables 3.启用IP转发 sudo sysctl -p 查看配置是否生效 4.配置路由 iptables -t nat -A POSTROUTING -j MASQUERADE 配置成功后,使用sudo iptables-save查看

[leetCode]257. 二叉树的所有路径(两种方法)

257. 二叉树的所有路径 题目描述&#xff1a; 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例&#xff1a; 输入&#xff1a;root [1,2,3,null,5]输出&#xff1a;["1-&g…

每日OJ题_算法_双指针⑦力扣15. 三数之和

目录 力扣15. 三数之和 解析代码 力扣15. 三数之和 难度 中等 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三…

【Spring】Spring事务失效问题

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…

C/C++---------------LeetCode第229. 多数元素 II

多数元素|| 题目及要求哈希算法 题目及要求 给定一个大小为 n 的整数数组&#xff0c;找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1a;[3] 示例 2&#xff1a; 输入&#xff1a;nums [1] 输出&#xff1a;…

基于uniapp+vue微信小程序的健康饮食管理系统 907m6

设计这个微信小程序系统能使用户实现不需出门就可以在手机或电脑前进行网上查询美食信息、 运动视频等功能。 本系统由用户和管理员两大模块组成。用户界面显示在应用程序中&#xff0c;管理员界面显示在后台服务中&#xff0c;通过小程序端与服务端间进行数据交互与数据传输实…

自建CA实战之 《0x03 代码签名》

自建CA实战之 《0x03 代码签名》 本文针对Windows平台&#xff0c;介绍如何使用自建CA来签发代码签名证书。 之前的文章中&#xff0c;我们介绍了如何自建CA&#xff0c;以及如何使用自建CA来签发Web服务器证书、客户端证书。 本文将介绍如何使用自建CA来签发代码签名证书。…

MYSQL中DML、DDL常用语句记录

MYSQL中DML、DDL常用语句记录 DML 在 MySQL 中&#xff0c;DML (Data Manipulation Language) 是一类用于查询和操作数据的 SQL 语句。以下是常用的 DML 语句&#xff1a; 1、SELECT SELECT 语句用于查询数据库中的数据。语法如下&#xff1a; SELECT column1, column2, .…

Kafka(一)在WSL单机搭建Kafka伪集群

目录 1 运行Kafka单实例1.1 Windws1.1.1 安装包下载1.1.2 修改环境变量1.1.3 修改配置文件1.1.4 启动Kafka单机版 1.2 Linux1.2.1 安装包下载1.2.2 创建目录1.2.3 添加环境变量1.2.4 修改配置文件1.2.5 运行Kafka1.2.6 停止Kafka 2 搭建Kafka集群2.1 搭建Zookeeper集群2.2 搭建…

文本转语音:微软语音合成标记语言 (SSML) 文本结构和事件

​ SSML 的语音服务实现基于万维网联合会的语音合成标记语言版本 1.0。 ​ 语音服务支持的元素可能与 W3C 标准不同。 每个 SSML 文档是使用 SSML 元素&#xff08;或标记&#xff09;创建的。 这些元素用于调整语音、风格、音节、韵律、音量等。 下面是 SSML 文档的基本结构…

【Linux常用命令】-文件写入相关

一、rm命令&#xff0c;文件删除 1.相关参数 -f&#xff08;–force&#xff09;&#xff1a;强制删除文件或目录&#xff0c;无需确认。 -r&#xff08;–recursive&#xff09;&#xff1a;递归地删除目录及其内容。 -i&#xff08;–interactive&#xff09;&#xff1a;交…

ultrascale FPGA

1.工艺从mos到FIN,查了半天资料&#xff0c;不如bili的intel介绍视频&#xff0c;其实是把DS做成3D结构&#xff0c;减小DS漏电流&#xff1b; 2.型号的尾数是以百万门为标定的&#xff1b; 3.slice&#xff08;切片&#xff09;是CLB的组成单元&#xff0c;slice又包含LUT&a…

CANdelaStudio 使用教程5 编辑DID

文章目录 在哪编辑DID的分类编辑快照数据添加 DID 在哪编辑 DID的分类 编辑快照数据 添加 DID

Linux C语言 26-可变参数

Linux C语言 26-可变参数 本节关键字&#xff1a;可变参数、va_list、va_arg、va_end 相关C库函数&#xff1a;va_list、va_arg、va_end 什么是可变参数&#xff1f; C语言中的可变参数是指函数能够接受不定数量的参数。在不确定函数参数时&#xff0c;使用“char *format, …

async函数和await关键字

async写在一个函数a前面&#xff0c;该函数变为异步函数&#xff0c;可在里面使用await关键字&#xff0c;await后面一般跟一个promise对象&#xff08;axios函数返回一个promise对象&#xff0c;里面有异步任务&#xff09;&#xff0c;await会原地等待该异步任务结果&#xf…

单细胞seurat入门—— 从原始数据到表达矩阵

根据所使用的建库方法&#xff0c;单细胞的RNA序列&#xff08;也称为读取&#xff08;reads&#xff09;或标签&#xff08;tags&#xff09;&#xff09;将从转录本的3端&#xff08;或5端&#xff09;&#xff08;10X Genomics&#xff0c;CEL-seq2&#xff0c;Drop-seq&…

枚举的第一行

2023年11月26日 问题: 好奇enum的所声明的枚举类的第一行是什么 从java技术卷1中第五章5.6中,了解是枚举类的实例 验证 错误信息: 解释: 此时只有有参构造 在这个枚举类里不能使用空,大概意思是说不能使用空参创建实例 校验 在原有的基础上创建一个无参构造 结果:不再报错,第…

c语言练习12周(11~15)

编写double fun(int a[],int n)函数&#xff0c;计算返回评分数组a中&#xff0c;n个评委打分&#xff0c;去掉一个最高分去掉一个最低分之后的平均分 题干编写double fun(int a[],int n)函数&#xff0c;计算返回评分数组a中&#xff0c;n个评委打分&#xff0c;去掉一…

php.ini文件中XDebug的配置

[XDebug] zend_extension"G:/php/ext/php_xdebug.dll" xdebug.mode debug xdebug.start_with_request trigger 其中G:/php/ext/php_xdebug.dll为xdebug.dll的文件路径。 原文件格式类似于 php_xdebug-3.3.0alpha3-8.2-vs16-x86_64.dll xdebug官网 Xdebug - Debu…

【教学类-06-13】20231126 (55格版)趣味题(一)1-9加法题(10倍)(整十相加)

作品展示 背景需求&#xff1a; 1、会做加法题的孩子5分钟内完成题目&#xff0c;太快了&#xff0c;所以为了拉平差异&#xff0c;需要给这些会做另外的题目&#xff0c;比如提供一些他们没有做过的“趣味题形”。 2、好多次&#xff0c;听见大班孩子在互相“考试”——“老…