#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QVBoxLayout>
#include <QListWidget>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 对控件 QListWidget 属性进行设置
/**
* 1. 使用Qt Create编写的demo,所以 QListWidget 控件是直接在ui文件拉进入的
* 2. 需要对每个 QListWidgetItem 加10px的间隔,不然翻页计算不准,或者是 px_num+1 也行
*/
ui->listWidget->setViewMode(QListView::IconMode);
ui->listWidget->setIconSize(QSize(1050, 1485));
// ui->listWidget->resize(2900, 2450);
// ui->listWidget->setIconSize(QSize(3000, 2500));
ui->listWidget->setSpacing(10);
ui->listWidget->setResizeMode(QListView::Adjust);
ui->listWidget->setMovement(QListView::Static);
// 显示 PDF
fz_context *ctx = fz_new_context(NULL, NULL, FZ_STORE_DEFAULT);
fz_register_document_handlers(ctx); // *:这里报错,就需要设置 MTD 或者 MDD
fz_document *doc = fz_open_document(ctx, "D:/develop/1000008958680.pdf");
int pageCount = fz_count_pages(ctx, doc);
qDebug() << pageCount << endl;
float zoom = (float)300 / (float)72; // 设置缩放比例
fz_matrix ctm = fz_scale(zoom, zoom);
for(int i = 0; i < pageCount; i++) {
fz_pixmap *pix = fz_new_pixmap_from_page_number(ctx, doc, i, ctm, fz_device_rgb(ctx), 0);
float b = (float)pix->w / (float)1050;
int t_h = pix->h / b;
QSize t_size(1050, t_h);
QImage img(pix->samples, pix->w, pix->h, pix->stride, QImage::Format_RGB888);
img = img.scaled(1050, t_h);
QListWidgetItem *tempImageItem = new QListWidgetItem;
tempImageItem->setIcon(QIcon(QPixmap::fromImage(img)));
tempImageItem->setSizeHint(t_size);
ui->listWidget->addItem(tempImageItem);
fz_drop_pixmap(ctx, pix);
}
fz_drop_document(ctx, doc);
fz_drop_context(ctx);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
// Form *form = new Form;
// form->show();
QDialog *dialog = new QDialog(this);
QVBoxLayout *layout = new QVBoxLayout(dialog);
QListWidget *list =new QListWidget(dialog);
dialog->resize(1280,1090);
dialog->setWindowTitle(tr("PDF阅读器"));
list->setViewMode(QListView::IconMode);
// list->setIconSize(QSize(1050, 1485));
list->setIconSize(QSize(1600, 2100));
// ui->listWidget->resize(2900, 2450);
// ui->listWidget->setIconSize(QSize(3000, 2500));
list->setSpacing(10);
list->setResizeMode(QListView::Adjust);
list->setMovement(QListView::Static);
// 显示 PDF
fz_context *ctx = fz_new_context(NULL, NULL, FZ_STORE_DEFAULT);
fz_register_document_handlers(ctx); // *:这里报错,就需要设置 MTD 或者 MDD
fz_document *doc = fz_open_document(ctx, "D:/develop/1000008958680.pdf");
int pageCount = fz_count_pages(ctx, doc);
qDebug() << pageCount << endl;
float zoom = (float)300 / (float)72; // 设置缩放比例
fz_matrix ctm = fz_scale(zoom, zoom);
for(int i = 0; i < pageCount; i++) {
fz_pixmap *pix = fz_new_pixmap_from_page_number(ctx, doc, i, ctm, fz_device_rgb(ctx), 0);
float b = (float)pix->w / (float)1050;
int t_h = pix->h / b;
QSize t_size(1050, t_h);
QImage img(pix->samples, pix->w, pix->h, pix->stride, QImage::Format_RGB888);
img = img.scaled(1050, t_h);
QListWidgetItem *tempImageItem = new QListWidgetItem;
tempImageItem->setIcon(QIcon(QPixmap::fromImage(img)));
tempImageItem->setSizeHint(t_size);
list->addItem(tempImageItem);
fz_drop_pixmap(ctx, pix);
}
fz_drop_document(ctx, doc);
fz_drop_context(ctx);
// // 上一页
// int page_num = getShowPageIndex();
// if(page_num > 0)
// ui->listWidget->setCurrentRow(page_num-1, QItemSelectionModel::Current);
// // 下一页
// int page_num2 = getShowPageIndex();
// int page_count = ui->listWidget->count();
// if(page_num2 < page_count-1)
// ui->listWidget->setCurrentRow(page_num+1, QItemSelectionModel::Current);
layout->addWidget(list);
dialog->show();
}
//// 获取当前是哪一页
//int MainWindow::getShowPageIndex()
//{
// // image_height 是 1485,在最开始设置 QListWidget 时就有用到
//// int px_num = ui->listWidget->verticalScrollBar().value();
//// double page_num = ceil(px_num / image_height);
// double page_num = 1.0;
// return page_num;
//}
没有合适的资源?快使用搜索试试~ 我知道了~
QT中基于mupdf库实现pdf阅读器
共85个文件
h:72个
cpp:3个
lib:3个
4 下载量 21 浏览量
2023-10-27
09:26:11
上传
评论
收藏 101.72MB ZIP 举报
温馨提示
QT中基于mupdf库实现pdf阅读器,编译版本是QT5.12.12 MSVC。Visual studio 2019.
资源推荐
资源详情
资源评论
收起资源包目录
pdfView.zip (85个子文件)
pdfView
mainwindow.h 694B
mainwindow.cpp 5KB
pdfView.pro 709B
main.cpp 183B
mainwindow.ui 1KB
ThirdParties
ThirdParties.pri 958B
mupdf
include
mupdf
fitz.h 2KB
memento.h 12KB
helpers
pkcs7-check.h 706B
mu-threads.h 5KB
pkcs7-openssl.h 1KB
mu-office-lib.h 21KB
ucdn.h 13KB
pdf
interpret.h 10KB
xref.h 5KB
parse.h 1KB
crypt.h 3KB
resource.h 4KB
javascript.h 685B
document.h 10KB
clean.h 204B
cmap.h 2KB
output-pdf.h 288B
object.h 10KB
page.h 4KB
font.h 3KB
event.h 3KB
form.h 6KB
annot.h 10KB
name-table.h 14KB
pdf.h 627B
fitz
output.h 5KB
color.h 9KB
track-usage.h 720B
stream.h 8KB
buffer.h 2KB
crypt.h 3KB
image.h 7KB
getopt.h 420B
structured-text.h 5KB
context.h 10KB
bidi.h 2KB
document.h 12KB
bitmap.h 2KB
link.h 1KB
store.h 6KB
util.h 4KB
write-pixmap.h 6KB
writer.h 5KB
band-writer.h 1KB
display-list.h 2KB
output-svg.h 550B
config.h 4KB
archive.h 2KB
filter.h 2KB
device.h 12KB
compressed-buffer.h 2KB
version.h 201B
system.h 11KB
separation.h 2KB
transition.h 971B
tree.h 465B
hash.h 1KB
font.h 10KB
path.h 4KB
glyph.h 4KB
glyph-cache.h 744B
pixmap.h 7KB
outline.h 1KB
pool.h 385B
text.h 2KB
string-util.h 1KB
shade.h 3KB
compress.h 741B
geometry.h 8KB
xml.h 986B
libs
mac
mupdf
libmupdf.a 45.25MB
libmupdf-third.a 2.98MB
win
mupdf
libresources.lib 41.46MB
libmupdf.lib 65.05MB
libthirdparty.lib 12MB
form.ui 611B
pdfView.pro.user 19KB
form.cpp 187B
form.h 263B
共 85 条
- 1
资源评论
grant_wtt
- 粉丝: 55
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ocr模型ch-ppocr-mobile-v2.0-cls-infer
- 计算两个地点之间的最短路线距离.php
- JavaWeb-学习笔记
- 一键安装docker环境:docker、docker-compose
- 使Unity开发的游戏支持热更新的解决方案
- 信息办公简易java开源订销管理系统-javainfo.zip
- 新闻文章NTsky新闻发布(提供JavaBean)v1.0-ntskynewsv1.0javabean.zip
- 搜索链接java(结合lucene)版的公交搜索系统-javaso.zip
- 基于深度循环神经网络DRNN的单通道音乐人声分离python源码(高分大作业).zip
- 实验4.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功