因近期公司项目要做一些pdf文件处理,在比较多个开源库后,感觉mupdf还不错,就选择了它。

https://mupdf.com/downloads/archive/mupdf-1.0-source.tar.gz(源码下载路径)

网上也有很多windows和linux下编译的方法,其实在windows下只需要打开\platform\win32 下的vs工程编译生成lib即可。

这里我用的是1.10版本,下面大概的介绍下windows下怎样对mupdf做简单的封装。(vs2017企业版)

1.源码编译

编译成功后会生成一下文件

2 新建dll工程(因源码纯c语言,为了不必要的麻烦,用空项目)

3把mupdf源码中 mutool中常用功能文件拷贝到工程中(标红出不要)

添加现有项 引入

把源码中的头文件拷贝过来

把源码生成的lib文件拷贝到工程中

这里还有一个lib要拷贝,当初我被这个问题坑的不轻,查看分析源码工程废了老大的劲才发现

下面为添加好的工程目录截图 lib放到了一个专门的lib文件夹

其中第三方库头文件只要mujs

新建头文件和c文件 自己可以写代码封装功能

我这里写了两个简单的方法,一个获取pdf页数,一个把pdf转换成图片

c文件

老外写的吗,所以碰到一些中文路径还是有些麻烦的,需要unicode转utf-8编码 所以写了一个方法

4 工程设置

包含头文件目录  .\include;.\thirdparty\mujs;%(AdditionalIncludeDirectories)

引入lib  .\lib\libfonts.lib;.\lib\libglfw.lib;.\lib\libmupdf.lib;.\lib\libthirdparty.lib;%(AdditionalDependencies)

因晕源码中 指针没有初始化 这里需要修改设置

至此工程创建完成

5 调用dll测试

添加一个测试工程

最好路径个 dll工程同一级

为了方便调试 我把测试exe工程 和 dll工程生成目录放到了同一个地方

exe工程..\Debug_dll

dll 工程  ..\..\Debug_dll

把exe工程设为启动项

运行 进入dll函数 实现pdf操作(docs文件夹下也有demo)

总结:

MuPDF是一个用于查看和转换PDF,XPS和电子书文档的开源软件框架。支持多种平台。

其中关于mutool 和mupdf 查看器 这两个平时能用到的较多。源码中也可以编译出来mutool.exe 和mupdf.exe等可执行文件,直接传参调用就能实现多种功能。我这里是把mutool的源码摘取了出来,在dll中可以自己写方法,同样也可以直接调用mutool.exe的方法 ,在mutool.c中 有个main函数接口,这里就是接受指令的地方,你也可以在dll中写个方法调用这个main,这样很多功能就不需要自己再写了,接收了外部参数直接调用。

由于本人也只是个初级码农,研究了几天,现在只是看了mutool中的一小部分,后续还有mupdf查看器等很多东西要慢慢研究,希望各位大神能多多指点。(目前碰到了一个问题,pdf转图片的时候dpi设置,jpg文件dpi一直是96,源码设置dpi也只是把缩放比例调高,但是网上的在线传图片dpi值是变了的,请知道的大神教一下)。

下面是 一些参数指令,可在原工程中模拟传入这些指令追踪源码。

如在源码mutool中可加入这个指令 并吧mutool设成启动项 运行即可

《mupdf mutool功能简介》
 版本1.13
*******************************************************************************
1 mutool draw
This is the more customizable tool, but also has a more difficult set of command line options. It is primarily used for rendering a document to image files.
这是更具可定制性的工具,但也有一组更加困难的命令行选项。它主要用于将文档渲染为图像文件。

2 mutool convert
This tool is used for converting documents into other formats, and is easier to use.
该工具用于将文档转换为其他格式,并且更易于使用。

3 mutool trace
This is a debugging tool used for printing a trace of the graphics device calls on a page.
这是一个用于在页面上打印图形设备调用跟踪的调试工具。

还有几种专门用于处理PDF文件的工具:
There are also several tools specifically for working with PDF files:

4 mutool show
A tool for displaying the internal objects in a PDF file.
用于在PDF文件中显示内部对象的工具。

5 mutool extract
Extract images and embedded font resources.
提取图像和嵌入的字体资源。

6 mutool clean
Rewrite PDF file. Used to fix broken files, or to make a PDF file human editable.
重写PDF文件。用于修复损坏的文件,或者使PDF文件可编辑。

7 mutool merge
Merge pages from multiple input files into a new PDF.
将来自多个输入文件的页面合并到一个新的PDF中。

8 mutool create
Create a new PDF file from a text file with graphics commands.
使用图形命令从文本文件创建一个新的PDF文件。

9 mutool portfolio
Manipulate PDF portfolios.
操作PDF组合。

And finally, there is a tool for doing anything you can imagine:
最后,有一种工具可以做你能想象的任何事情:
10 mutool run
A tool for running Javascript programs with access to the MuPDF library functions.
运行Javascript程序并访问MuPDF库函数的工具。

*******************************************************************************
《mupdf  pdf查看器命令》
 版本1.13
*******************************************************************************
mupdf-gl [options] document [page]
-p password
The password needed to open a password protected PDF file.
打开受密码保护的PDF文件所需的密码。

-r resolution
Set the initial zoom level, specified as DPI. The default value is 72.
设置初始缩放级别,指定为DPI。默认值是72。

-W width
Set the page width in points for EPUB layout.
为EPUB布局设置页面宽度。

-H height
Set the page height in points for EPUB layout.
为EPUB布局设置页面高度。

-S size
Set the default font size in points for EPUB layout.
为EPUB布局设置默认字体大小。

-U stylesheet
Specify a CSS file containing user styles to load for EPUB layout.
指定包含要加载EPUB布局的用户样式的CSS文件。

-X
Ignore publisher styles for EPUB layout.
忽略EPUB布局的发布者样式。

Mouse Bindings

鼠标绑定

The middle mouse button (scroll wheel button) pans the document view.

鼠标中键(滚轮按钮)平移文档视图。

The right mouse button selects a region and copies the marked text to the clipboard.

鼠标右键选择一个区域并将标记的文本复制到剪贴板。

Key Bindings

几个命令可以在键之前输入一个数字参数来修改命令。例如,要缩放至150 dpi,请输入“150z”
Several commands can take a number argument entered before the key, to modify the command. For example, to zoom to 150 dpi, type "150z".

F1 Display help. 显示帮助
i Display document metadata. 显示文档元数据
o Toggle display of outline.切换大纲的显示
L Toggle display of links.切换显示链接
r Reload document.重新载入文件
q Quit viewer.退出查看器
 
f Toggle fullscreen.切换全屏
w Shrinkwrap window to fit page.缩小窗口以适合页面
W Fit page width to window. 将页面宽度调整为窗口
H Fit page height to window.将页面高度调整为窗口
Z Fit page size to window.将页面大小适合窗口
[number] z Set zoom resolution in DPI.在DPI中设置缩放分辨率
+ Zoom in.放大
- Zoom out. 缩小
[ Rotate counter-clockwise.逆时针旋转
] Rotate clockwise.顺时针旋转
[arrows] or h, j, k, l Pan page in small increments.以小增量平移页面
 
b Smart move one screenful backward.智能向后移动一个屏幕
[space] Smart move one screenful forward.智能向前移动一个屏幕
[comma] or [page up] Go one page backward.向后翻一页
[period] or [page down] Go one page forward.前进一页
< Go 10 pages backward.向后走10页
> Go 10 pages forward.前进10页
[number] g Go to page number.转到页码
G Go to last page.转到最后一页
 
m Save current page to navigation history.保存当前页面到导航历史记录
t Go back in navigation history.返回导航历史记录
T Go forward in navigation history.在导航历史中前进
[number] m Save current page in numbered bookmark.将当前页面保存在编号书签中
[number] t Go to numbered bookmark.转到编号书签
 
/ Start searching forward.开始向前搜索
? Start searching backward.开始向后搜索
n Continue searching forward.继续向前搜索
N Continue searching backward.s继续向后搜索

*******************************************************************************
《mudraw》
 版本1.10

*******************************************************************************

draw  -o 1.jpg -r 200 E:\wj\项目\dll\Debug_dll\1.pdf 1

用法:mudraw [选项] 文件 [页号]
        -p  - 密码
        -o  - 输出文件名(%d为页码)
        -F  - 输出格式(从输出文件名中推断出的默认值)
                栅格:png,tga,pnm,pam,pbm,pkm,pwg,pcl,ps
                矢量:svg,pdf,跟踪
                文本:txt,html,stext
        -s  - 显示额外信息:
                m  - 显示内存使用情况
                t  - 显示时间
                f  - 显示页面功能
                5  - 显示渲染图像的md5校验和
        -R  - 顺时针旋转(默认:0度)
        -r  - 以dpi为单位的分辨率(默认值:72)
        -w  - 宽度(以像素为单位)(如果指定了-r,则为最大宽度)
        -h  - 高度(以像素为单位)(如果指定了-r,则为最大高度)
        -f  - 准确地确定宽度和/或高度; 忽略原始宽高比
        -B  - 最大band_height(仅限pgm,ppm,pam,png输出)
        -T  - 用于渲染的线程数(仅限带状模式)
        -W  - EPUB布局的页面宽度
        -H  - EPUB布局的页面高度
        -S  - EPUB布局的字体大小
        -U  - 用于EPUB布局的用户样式表的文件名
        -c  - colorspace(单色,灰色,grayalpha,rgb,rgba,cmyk,cmykalpha)
        -G  - 应用伽马校正
        -I    反转颜色
        -A  - 抗混叠位数(0到8)
        -A  -  /  - 抗混叠位数(0到8)(图形,文本)
        -l  - 最小描边线宽(以像素为单位)
        -D    禁用显示列表
        -i    忽略错误
        -L    低内存模式(避免缓存,每页之后清除对象)
        -P    平行翻译/渲染
        -y l  将图层配置列出到stderr
        -y  - 选择图层配置(按编号)
        -y  -  {, - } *选择图层配置(按编号),并切换列出的条目
        页面逗号分隔页码和范围列表

第一次写博客,请大家多多指教。

我做了vs2013 和2017两种版本的 简单例子,等两天上传,谢谢!

c语言 Mupdf 1.10版本常用功能封装相关推荐

  1. 第10章 常用功能及函数集;客户端IP地址

    1 客户端IP地址    txtIP.Text= Request.UserHostAddress; 2 创建随机数对象      Random rnd = new Random();    //调用N ...

  2. Boost库-功能介绍-Geometry-图形开发库-计算几何-常用功能封装-GraphicalDebugging(二)

      有了上一篇博文打下的基础,读者应该对分析查看几何图形有了初步了解,本着实用的原则,这篇文章,主要介绍Geometry的常用计算.它提供了点线面相交,相离的判断,以及多边形的布尔运算,在几何分析中非 ...

  3. qaxobject识别html,QT界面开发-QAxObject 读写excel(COM组件)-常用功能封装代码

    1 #include "qtExcelApi.h" 2 3 4 qtExcelApi::qtExcelApi(void)5 {6 7 }8 9 qtExcelApi::~qtExc ...

  4. [Flash][AS3]常用功能封装

    给后来者一点点参考吧! 仓库地址:https://gitee.com/LangziXin/gflash 1.GConfig 功能:用于读取xml文件,获取相关配置信息 注意:需要自己定义一个函数用于构 ...

  5. Unity 工具类 之 UnityWebRequest 常用功能封装

    using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using U ...

  6. iOS微信8.0.10版本唤醒隐藏功能,还有这几个变化

    前几天 iOS 微信更新到 v8.0.10 版本,当时我也发文给大家说了一下,最近我发现啦一个功能 iOS 微信 8.0.10 版本还含有一些隐藏的功能,比如聊天时的「边写边译」,以及朋友圈视频封面( ...

  7. C语言常用功能函数集合

    C语言常用功能函数集合 说明:作者将个人接触到的C语言功能函数记录下来,组成一个集合,便于查阅和加深印象. 1. 内存相关 malloc()函数 :申请一片连续的堆内存,字节为单位.分配所需的内存空间 ...

  8. 计算机教学拼音打字教案,小学信息技术第2单元 Windows的常用功能第10课 中文输入法教案...

    这是一份小学信息技术第2单元 Windows的常用功能第10课 中文输入法教案,共3页. <中文输入法>教学设计 教 学 目 标知识与技能: 认识常见的的两种拼音输入法. 掌握添加或删除中 ...

  9. 华为运动健康服务Health Kit 6.10.0版本新增功能速览!

    华为运动健康服务(HUAWEI Health Kit)6.10.0 版本新增的能力有哪些? 阅读本文寻找答案,一起加入运动健康服务生态大家庭! 一. 支持三方应用查询用户测量的连续血糖数据 符合申请H ...

最新文章

  1. 独家 | 以国家战略科学家身份,顶级AI学者朱松纯回国,筹建北京通用AI研究院...
  2. 【Linux部署】Linux环境 .rar 格式文件处理工具安装使用(一波两折避坑指北)
  3. iReport 4.1 报表、子报表、主从报表、合计、实例解析
  4. NET问答: 如何从 event 中移除所有的 handler ?
  5. 内置函数补充 之 反射
  6. 华为云公布2021产品上新计划,让云无处不在,让智能无所不及
  7. 入门mysql执行计划
  8. HAOI(十二省联考)2019 qwq记
  9. 数组元素替换_LeetCode基础算法题第183篇:一维数组的重新洗牌
  10. 转:C++ Vector用法深入剖析
  11. Java如何配置环境变量
  12. 网店java_php网店系统与java网店系统的区别
  13. 华滋先生:互联网创业,加入社群是有用的吗?
  14. Numpy 相关函数详解
  15. scp远程复制文件自动输入密码
  16. 互联网打印机协议IPP分析
  17. 对某邮件盗号诈骗团队的追踪分析和研究
  18. otc焊接机器人编程模拟软件_otc焊接机器人编程
  19. Redis第二讲【Redis基本命令和五大数据结构】
  20. 今天帮别人解决一下SAP 问题..呵呵.其实也没什么

热门文章

  1. 行业报告 | 企业AIGC商业落地应用研究报告
  2. 谁会留下?(求一圈中留下的最后一个人)
  3. Android 使用摄像头和相册
  4. 海思视频开发常见概念解析
  5. python元组和列表的联系_Python 列表和元组
  6. 动态规划4——从两题来看线头DP的基本应用
  7. [资料共享] BZOJ所有题 OJ 在线评测 题面 PDF版 非常良心
  8. 如何远程备份或还原数据库
  9. 关于TrueType字体的gasp技术说明
  10. gitlab访问令牌使用_使用gitlab API