pdf阅读器

  • 下载mupdf源码
  • 编译mupdf源码
  • qt工程链接mupdf源码静态库
  • 参照 mupdf/docs/examples/example.c 开发

mainwindows.ui
mainwindows.h

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QMessageBox>
#include <QDebug>
#include <QImage>
#include <QPixmap>
#include <QLabel>#include "mupdf/fitz.h"
#include "mupdf/pdf.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);char *input = const_cast< char* >("/home/kevin/Desktop/桌面 快捷方式/labview实验/《计算机虚拟仪器技术》实验指导书(肖).pdf");   float zoom, rotate;int page_number, page_count;fz_context *ctx;fz_document *doc;fz_pixmap *pix;fz_matrix ctm;//第一页为0int x, y;page_number=0;//100%缩放比zoom=100;//旋转为0rotate=0;//创建上下文ctx = fz_new_context(NULL, NULL, FZ_STORE_UNLIMITED);if (!ctx){qDebug()<<stderr<<"cannot create mupdf context";return;}//注册文档控制fz_try(ctx)fz_register_document_handlers(ctx);fz_catch(ctx){qDebug()<<stderr<<"cannot register document handlers:"<< fz_caught_message(ctx);fz_drop_context(ctx);return;}//打开文档fz_try(ctx)doc = fz_open_document(ctx, input);fz_catch(ctx){qDebug()<<stderr<< "cannot open document:"<< fz_caught_message(ctx);fz_drop_context(ctx);return;}//取得总的页数fz_try(ctx)page_count = fz_count_pages(ctx, doc);fz_catch(ctx){qDebug()<<stderr<< "cannot count number of pages:"<< fz_caught_message(ctx);fz_drop_document(ctx, doc);fz_drop_context(ctx);return;}QString str;str = str.setNum(page_count);ui->textlabel->setText(str);if (page_number < 0 || page_number >= page_count){qDebug()<<stderr<< "page number out of range: "<< page_number + 1<<"page count:"<<page_count;fz_drop_document(ctx, doc);fz_drop_context(ctx);return;}//计算缩放以及旋转ctm=fz_scale(zoom / 100, zoom / 100);ctm=fz_pre_rotate(ctm, rotate);//渲染pixmapfz_try(ctx)pix = fz_new_pixmap_from_page_number(ctx, doc, page_number, ctm, fz_device_rgb(ctx), 0);fz_catch(ctx){qDebug()<<stderr<< "cannot render page: %s\n"<< fz_caught_message(ctx);fz_drop_document(ctx, doc);fz_drop_context(ctx);return;}//渲染成图片//unsigned char *samples = fz_pixmap_samples(ctx, pix);unsigned char *samples = pix->samples;int width = fz_pixmap_width(ctx, pix);int height = fz_pixmap_height(ctx, pix);str = str.setNum(width);QString wid;wid=wid.setNum(width);ui->widthlabel->setText("width: "+wid);QString hei;hei=hei.setNum(height);ui->heightlabel->setText("height: "+hei);QImage image(samples, width, height,pix->stride,QImage::Format_RGB888);QLabel *label=new QLabel;label->setPixmap(QPixmap::fromImage(image));ui->layout->addWidget(label); // if (!image.save("a.png")) { // return; // } //回收内存ui->textlabel->setText("Pdf open success");fz_drop_pixmap(ctx, pix);fz_drop_document(ctx, doc);fz_drop_context(ctx);}MainWindow::~MainWindow()
{delete ui;
}

基于qt与mupdf库的pdf阅读器开发相关推荐

  1. android pdf阅读器开发_如何在 Windows 10 中将 Firefox 设置为默认 PDF 阅读器

    PDF 作为办公一族中的必备文档,很多人都会编辑或者创建 PDF 文档,而在 Windows 系统中并没有默认的 PDF 阅读器.而在新版的 Microsoft Edge微软已在开始提供有真正的高级 ...

  2. android pdf阅读器开发_PDF to EPUB Converter Mac(PDF转EPUB转换器)

    EPUB to PDF Converter Mac特别版是专为Mac用户设计的一款PDF转EPUB转换器,尽管PDF是使用最广泛的电子文档格式,并且具有很多优点,但由于PDF不可重排,因此无法很好地适 ...

  3. 开源 Android pdf 阅读器开发总结

    前段时间项目涉及到 pdf 阅读,因此我开始找了些源码阅读比较,现在贴出各实现方案的对比.希望对大家有帮助.方便大家的阅读,我将自己认为最好的排在最前. Vudroid Google code:htt ...

  4. android pdf阅读工具,android pdf 阅读器开发, pdf demo, pdf第三方控件

    Activity调用的方法 public class PDFActivity extends Activity implements OnPageChangeListener { public sta ...

  5. android开发 pdf阅读器 第三方可,android pdf 阅读器开发, pdf demo, pdf第三方控件

    demo library 下载 Activity调用的方法 public class PDFActivity extends Activity implements OnPageChangeListe ...

  6. QT开发的pdf阅读器资料

    详细说明:基于QT的一款建议pdf阅读器,可以进行移植,可以再pc上运行.-Recommendations based on QT' s a pdf reader, can be transplant ...

  7. 基于MuPDF和Qt的PDF阅读器的开发

    基于MuPDF和Qt的PDF阅读器的开发 一.引言 设备上要渲染显示PDF文档,类似Adobe Reader.福昕阅读器等软件.如何去实现?Handling PDF这篇文档讨论介绍了在Qt应用程序中各 ...

  8. 基于MuPDF库实现PDF文件转换成PNG格式图片

    背景 之所以会接触MuPDF是因为,有位群友在Q群里提问,如何将PDF保存为.PNG图片格式.我一看到这个问题,就蒙了,因为我没有接触过类似的项目或程序.但是,作为一群之主的我,还是要给初学者一个答复 ...

  9. iOS 中使用Mupdf教程 pdf阅读器

    转载注明出处:http://blog.csdn.net/hongqifeiwu/article/details/46009095 浩宇提供:若有疑问可以相互探讨,邮箱1223556769@qq.com ...

最新文章

  1. iOS 项目中用到的一些开源库和第三方组件
  2. EXP 7 网络欺诈防范 20164303 景圣
  3. (网络编程)UDP实现聊天
  4. ubuntu 以太网已连接但是无法联网_工业以太网有多“牛X”?两个案例告诉你
  5. 【Flink】Flink 与数据库的集成最佳实践 【视频笔记】
  6. 为什么我旗帜鲜明的反对前后端分离
  7. word文档图标变成白纸_word文档图标显示异常怎么办
  8. 决策树一CART算法(第一部分)
  9. 网络空间安全 渗透 攻防5(文件共享服务器)
  10. 苹果手机怎么用计算机隐藏应用,iphone怎么隐藏应用功能 iphone隐藏应用功能方法【详解】...
  11. linux+记账软件下载,快速记账软件下载-快速记账appv3.11.0-Linux公社
  12. python实现目标检测voc格式标签数据增强
  13. 解决win10一开机内存(8G)就占用70%多,查看任务管理器并没有占用内存很高的进程的问题
  14. Android11 SystemUI启动流程源码分析(一)——SystemUIApplication的创建
  15. 1688图片搜索API接口
  16. CDR 无法安装,解决办法
  17. PHP:POST 方法上传
  18. Python视网膜光学相干断层扫描病理学分类
  19. Android无障碍强制关闭软件,安卓手机后台程序不能彻底关闭?试试这个强制关闭的功能!...
  20. python实现黄金分割搜索算法+动态展示

热门文章

  1. Pandas 元素选取
  2. MSP430单片机GPIO编程入门教程
  3. C语言学习—杨辉三角的实现
  4. java gif等比例缩放_对gif动图进行缩放等处理(java)
  5. 利用Python批量将csv文件转化成xml文件
  6. 本地BLAST的使用方法及基本操作步骤
  7. STM32开发笔记27:STM32L0低功耗设计——RTC模块1秒时钟的产生方法
  8. Java艺术字图片生成
  9. mysql 审批表_用sql统计信贷业务审批表、逾期表(即期)
  10. 体感ar数字互动教学制作实现学生共享优质教育