一、PDF读取展示功能

QT提供了pdf、PdfWidgets模块,需要安装模块,然后在项目的CMakeLists.txt文件内,添加如下代码,以便在项目中使用。

官方提供了完整的pdf展示示例,示例1:基于小部件的 PDF 查看器,允许滚动页面。示例2:一个允许滚动页面的 Qt Quick PDF 查看器。

https://doc.qt.io/qt-6/qtpdf-examples.htmlhttps://doc.qt.io/qt-6/qtpdf-examples.html        CMakeLists.txt文件。

find_package(Qt6 REQUIRED COMPONENTS Pdf)
find_package(Qt6 REQUIRED COMPONENTS PdfWidgets)target_link_libraries(QtFFmpegApp2 PRIVATE Qt6::Pdf)
target_link_libraries(QtFFmpegApp2 PRIVATE Qt6::PdfWidgets)

二、功能初步设计

1、功能简述

左侧进行pdf的展示,右侧是ocr识别的结果的展示区域。

2、pdfview控件

需要把控件提升为QPdfView,在设计的左侧菜单是看不到的。

    m_document = new QPdfDocument(this);//目录,我这里不需要目录,所以没有展示//QPdfBookmarkModel *bookmarkModel = new QPdfBookmarkModel(this);//bookmarkModel->setDocument(m_document);//ui->bookmarkView->setModel(bookmarkModel);ui->pdfView->setZoomMode(QPdfView::FitToWidth);//ui->pdfView->setZoomFactor(0.8);ui->pdfView->setDocument(m_document);

3、读取pdf

点击选择pdf按钮的按钮,选择了pdf之后调用open方法进行打开。

void PdfViewWindow::on_pushButton_clicked()
{QUrl toOpen = QFileDialog::getOpenFileUrl(this, tr("Choose a PDF"), QUrl(), "Portable Documents (*.pdf)");if (toOpen.isValid())open(toOpen);
}

4、展示pdf

这里只要把本地pdf文件的路径传递给QPdfDocument,就可以打开pdf文件。

void PdfViewWindow::open(const QUrl &docLocation)
{if (docLocation.isLocalFile()) {m_document->load(docLocation.toLocalFile());const auto documentTitle = m_document->metaData(QPdfDocument::Title).toString();setWindowTitle(!documentTitle.isEmpty() ? documentTitle : QStringLiteral("PDF Viewer"));ui->label->setText("共" + QString::number(ui->pdfView->pageNavigation()->pageCount()) + "页");ui->lineEdit->setText(QString::number(1));} else {QMessageBox::critical(this, tr("Failed to open"), tr("%1 is not a valid local file").arg(docLocation.toString()));}
}

5、截图/文字识别

QPdfDocument给我们提供了render方法,让我们可以获取截图。获得到图片之后启动新线程,进行ocr识别,这里的线程和之前图片ocr的是同一个,处理方式也是一摸一样。

/*** @brief PdfViewWindow::on_pushButton_3_clicked* 文字提取*/
void PdfViewWindow::on_pushButton_3_clicked()
{QString filePath = QString("%1\\screen.jpg").arg(qApp->applicationDirPath().replace("/", "\\"));//渲染到图片//size = m_document->pageSize(1);//QSize(600, 800)int page = ui->pdfView->pageNavigation()->currentPage();QSize origin = m_document->pageSize(page).toSize();QSize *newsize = new QSize(origin.width()*2, origin.height()*2);QImage image = m_document->render(page, *newsize);image.save(filePath, "jpg");//清空右侧文本框ui->textEdit->setText("");//实例化loading窗口loading = new LoadingDialog(this);loading->setVisible(true);//启动线程m_thread  =  new MyThreadForTextRecognition;m_thread->init(filePath.toStdString(), QString("%1\\screen_action.jpg").arg(qApp->applicationDirPath().replace("/", "\\")).toStdString(), ui->comboBox->currentIndex(), ui->checkBox_3->isChecked(), ui->comboBox_2->currentIndex());connect(m_thread, &MyThreadForTextRecognition::getRecognitionText,this,&PdfViewWindow::getRecognitionText);connect(m_thread, &MyThreadForTextRecognition::recognitionFinish,this,&PdfViewWindow::recognitionFinish);m_thread->start();
}

QT案例实战1 - 从零开始编写一个OCR工具软件 (8) Pdf读取展示/截图/文字识别相关推荐

  1. QT案例实战1 - 从零开始编写一个OCR工具软件 (7) 屏幕截图/图像展示/文字识别

    一.图片文字识别功能 在之前的的文章中,引入了ocr识别引擎,也在线程内实现了调用引擎进行识别.基本功能都有了,就可以把功能和UI组织在一起了. 关于图片文字识别的功能,UI分两部分,左侧实现屏幕截图 ...

  2. QT案例实战1 - 从零开始编写一个OCR工具软件 (3)创建项目

    一.创建项目 打开Qt Creator,点击Create Project. 可以看到项目类型有应用.应用for python.类库等等,这里选择第一个QT应用,然后第二个栏中选择QT Weidgets ...

  3. QT案例实战1 - 从零开始编写一个OCR工具软件 (6) 关于QThread线程的使用

    一.为什么用线程 在这里将ocr识别的这个耗时的操作放在新线程内,这样是为了主线程/UI界面不会卡在那里没有响应.如果说不在乎用户体验,ocr识别也可以放在主线程,卡住就卡住,就是会被骂. 不过关于线 ...

  4. 从零开始编写一个上位机(串口助手)QT Creator + Python

    提示:本博客作为学习笔记,有错误的地方希望指正,此文可能会比较长,作为学习笔记的积累,希望对来着有帮助.   绪论:笔者这里使用的是QTCreator和Python来实现一个简单的串口上位机的开发的简 ...

  5. 从零开始编写一个vue插件

    title: 从零开始编写一个vue插件 toc: true date: 2018-12-17 10:54:29 categories: Web tags: vue mathjax 写毕设的时候需要一 ...

  6. 从零开始编写一个宠物识别系统(爬虫、模型训练和调优、模型部署、Web服务)

    心血来潮,想从零开始编写一个相对完整的深度学习小项目.想到就做,那么首先要考虑的问题是,写什么? 思量再三,我决定写一个宠物识别系统,即给定一张图片,判断图片上的宠物是什么.宠物种类暂定为四类--猫. ...

  7. Linux驱动开发(从零开始编写一个驱动程序)

    1.系统整体工作原理 (1)应用层->API->设备驱动->硬件 (2)API:open.read.write.close等 (3)驱动源码中提供真正的open.read.write ...

  8. C#:调用百度接口实现文字识别(准备做一个截图文字识别软件)

    近期在做毕业设计,发现查看论文的时间太多了,然而百度文库或是PDF的文档要想复制真是费劲至极,于是准备做一个个人使用的截图文字识别软件,可以提高工作效率.那下面就做个简单介绍. 第一步:获取到你的AP ...

  9. mac 文字识别软件ocr_mac超快速ocr文字识别软件 mac上超好用的文字识别软件推荐...

    OCR文字识别软件是在日常的生活和工作中十分常用的一款软件.而当下使用mac系统的用户也越来越多了,相比较于windows不同的是,mac上能够使用的ocr用具基本上会比较难找.这里就为大家推荐几款在 ...

最新文章

  1. Linux下搭建一个简单的UDP通信
  2. 在记录实体log信息的时候,2个公司的区别
  3. testing your idea
  4. 【剪枝算法】通过网络瘦身学习高效的卷积网络Learning Efficient Convolutional Networks through Network Slimming论文翻译
  5. 自定义线程池-线程类和任务类代码实现
  6. 件工程项目开发最全文档模板_一文带你了解微信小程序社区和小程序开发
  7. 存储时间:立足SATA 百变GoFlex只是开始
  8. 异常 java.net.SocketTimeoutException: Read timed out
  9. php视频系统源码,基于ThinkPHP框架仿优酷视频源码带数据,后台功能强大
  10. RIME-使用小心得
  11. 高效记忆/形象记忆(09)110数字编码表 31-40
  12. ASP网页HTTP 错误 404.3 - Not Found解决方案
  13. 百旺红字发票信息表显示服务器返回为空,红字发票信息表状态详细说明
  14. python-鸢尾花分类
  15. 使用长角牛演示:防止ARP协议被攻击原理和配置
  16. 汉文化资讯社区(maven ,SSM ,MySQL)
  17. #define 宏的边际效应是什么
  18. 面试谈薪资,别不好意思,4个技巧帮你勇敢谈薪
  19. uni-app写小程序音乐播放器
  20. php 百度权重查询系统,查百度—百度网站权重SEO工具查询_PHP教程

热门文章

  1. Alfira学习篇(Python)
  2. android 图表实现,Android实现图表绘制和展示
  3. 浏览器下载软件时,默认是用迅雷下载,如何取消?
  4. Linux 二进制文件调试命令
  5. What is XMP
  6. forward_list
  7. 老派程序员:徒手实现伟大成就
  8. 一个普通计算机培训学校学生的迷茫。
  9. JS 去除Object中指定的key
  10. uva - 123 - Searching Quickly