资讯动态

mupdf-gl 完全指南:MuPDF 的 FreeGLUT 图形化文档查看器

发布时间:2026/10/14 1:27:26 来源:尧图企业网站定制
图形学图像处理【免费下载链接】mupdfmupdf mirror项目地址https://gitcode.com/gh_mirrors/mu/mupdf点击查看免费下载mupdf-gl 是 MuPDF 仓库中基于 OpenGL FreeGLUT 的跨平台 GUI 查看器可显示 PDF、XPS、CBZ、EPUB/FB2 文档以及 SVG 等常见图片格式。本篇以官方文档 docs/tools/mupdf-gl.md 为主体逐条覆盖其命令行选项、操作示例、鼠标与键盘绑定并结合 platform/gl/gl-main.c 等源码补充默认值、启动流程、历史记录机制等文档未展开的实现细节帮助读者从“会用”深入到“知其所以然”。一、mupdf-gl 在项目中的定位从 Makefile 可以看到mupdf-gl是条件构建目标只有当HAVE_GLUTyes时才会编译platform/gl/*.c下的所有源文件gl-main.c、gl-app.h、gl-input.c、gl-ui.c 等链接libmupdf、第三方库与libmupdf-glut静态库。若系统已有 FreeGLUT可设USE_SYSTEM_GLUTyes否则使用仓库自带的 thirdparty/freeglutWindows 下则通过 platform/win32/mupdf-gl.vcxproj 构建入口为WinMain。它与同为查看器的mupdf-x11仅 Linux X11不同mupdf-gl 依赖 OpenGL 管线渲染页面位图是 Windows、macOS通过 glut 回调和 Linux 上的通用图形界面。二、命令行选项全表官方文档给出的调用形式为mupdf-gl [options] document [page]其中page是初始页码源码中解析为anchor见 gl-main.c。下表完整继承文档所列选项并用源码核对出的默认值补充了“默认值/实现”一栏选项说明默认值 / 实现要点来自源码-p password打开加密 PDF 所需的密码存入password全局变量-c profile.icc加载用于显示的 ICC 配置文件缺省使用 sRGBDeviceRGB。源码中通过fz_new_icc_colorspace建立 ICC colorspace未提供时回退fz_device_rgbgl-main.c-r resolution初始缩放级别单位为 DPI文档标注默认 72从源码结构看当前仓库将初始 zoom 定义为DEFRES 96且解析后会再乘以 UI 缩放系数ui.scalegl-main.c-W widthEPUB 版式页面宽度点FZ_DEFAULT_LAYOUT_W-H heightEPUB 版式页面高度点FZ_DEFAULT_LAYOUT_H-S sizeEPUB 版式默认字号点FZ_DEFAULT_LAYOUT_EM-U stylesheet加载用户 CSS 样式文件用于 EPUB 版式以位掩码layout_use_css | 2启用用户样式-XEPUB 版式忽略出版方样式layout_use_css ^ 1即切换 publisher-css 位-J禁用 PDF 表单中的 JavaScriptenable_js取反-A level设置抗锯齿级别/像素渲染规则0关闭24 级416 级8256 级9像素中心规则10像素任意部分规则默认currentaa 8-I以反色模式启动currentinvert取反-B hex-color设置黑色色调tinted默认303030源码0x303030-C hex-color设置白色色调默认FFFFF0源码0xFFFFF0-Y factor设置 UI 缩放系数默认由屏幕 DPI 计算得出经ui_init_dpi(scale)生效文档未列出、但源码实际支持的选项main()中的 getopt 字符串为p:r:IW:H:S:U:XJb:A:B:C:T:Y:R:c:vfgl-main.cusage()帮助文本还列出了以下文档未记载的选项实际使用时同样有效-b box使用指定页面 box 渲染可取 MediaBox、CropBox、BleedBox、TrimBox、ArtBoxfz_box_type_from_string-R options启用 reflow 模式阅读模式并设置文本抽取选项示例mupdf-gl -R dehyphenate,preserve-images book.epub-T tracefile将交互操作记录为 JavaScript 风格的跟踪脚本源码中trace_action输出如page.update()、doc.loadPage(n)等语句可配合mutool run复现-f以全屏模式启动-v输出版本号后退出--external-access允许文档访问其所在目录中的外部资源用于本地资源引用的 EPUB 等。三、常用示例文档给出的两个基础用法# 不带参数启动弹出文件浏览器窗口 mupdf-gl # 以反色模式打开指定文件的第 10 页 mupdf-gl -I mupdf_explored.pdf 10结合上表的补充示例均可直接复制运行# 使用广色域 ICC 配置、150 DPI 缩放打开 PDF mupdf-gl -c display-p3.icc -r 150 report.pdf # 打开 EPUB宽 900pt、字号 20pt并应用用户样式 mupdf-gl -W 900 -S 20 -U user.css -X book.epub # 色调模式米色纸张感黑 303030、白 FFFFF0再叠加反色 mupdf-gl -C FFFFF0 -I scan.pdf启动时的缩放细节值得一知main()在加载文档后会检查页面纹理尺寸是否超出可用屏幕GLUT_SCREEN_WIDTH/HEIGHT减去边框预留SCREEN_FURNITURE_W/H若超出则按比例缩小currentzoom保证初始窗口不被页面撑破gl-main.c。四、鼠标绑定文档明确两个鼠标行为中键滚轮按钮平移pan文档视图右键框选区域并将所选文本复制到剪贴板。这一行为与源码中的help_dialog_text帮助文本完全一致gl-main.c。五、键盘绑定文档说明多个快捷键支持“数字参数前缀”例如输入150z可将缩放设为 150 DPI。数字参数在 gl-input.c 的按键处理中暂存、待命令键触发时生效。完整绑定表如下前部分来自文档带 * 的条目补充自源码帮助文本 gl-main.c按键动作F1显示帮助F1 帮助对话框即源码help_dialog文本F12*显示 JavaScript 控制台需启用 JS 的构建i显示文档信息o显示文档大纲u*显示撤销undo历史Y*显示图层layer列表L高亮链接F高亮表单字段a显示批注编辑器R*显示编辑redaction编辑器x*显示鼠标坐标r重新加载文档S保存文档仅 PDFq退出查看器\/\减小 / 增大电子书字号I切换反色模式C切换色调tinted模式E切换 ICC 色彩管理e切换专色spot color模拟A切换抗锯齿B*在 MediaBox/CropBox/ArtBox 等 box 间切换c*切换 document/user CSSf切换全屏w收缩窗口至页面大小shrinkwrapW页面宽度适应窗口H页面高度适应窗口Z页面整体适应窗口[number] z设置缩放分辨率DPI/-放大 / 缩小[/]逆时针 / 顺时针旋转方向键或hjkl小步长平移页面b智能回退一屏space智能前进一屏,或 Page Up后退一页.或 Page Down前进一页g*跳到第一页[number] g跳到指定页码G跳到最后一页m将当前位置保存进导航历史t/T后退 / 前进导航历史[number] m保存为编号书签[number] t跳到编号书签/向前开始搜索?向后开始搜索n/N继续向前 / 向后搜索关于放大/缩小的一个实现细节/-并非按固定步长缩放而是沿着一个预定义的 DPI 序列取上/下一档gl-main.cstatic const int zoom_list[] { 6, 12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 144, 168, 192, 228, 264, 300, 350, 400, 450, 500, 550, 600 };因此连续按会以非线性的档位递增最低 6 DPI、最高 600 DPI。六、源码纵深启动流程、搜索与持久化6.1 启动主流程从main()的结构看gl-main.cmupdf-gl 的启动顺序是glutInit后按 getopt 解析全部选项ui_init_dpi(scale)依屏幕 DPI 计算 UI 网格尺寸随后currentzoom * ui.scalefz_register_document_handlers(ctx)注册所有格式 handler这也是它能同时打开 PDF/XPS/CBZ/EPUB/SVG 的原因若给了-c则读取 ICC 文件构造 colorspace否则用 DeviceRGB带文件名启动时load_document()→ 若给了-R则reflow_document()把 EPUB 等转为 reflow 文档→load_page()不带文件名时则初始化“打开文档”对话框由fz_recognize_document过滤可识别文件gl-main.c进入glutMainLoop()事件循环退出时在cleanup()中先save_history()、再尝试save_accelerator()页面缓存文件。6.2 文本搜索/、?、n、N背后的搜索状态集中在 gl-main.c搜索默认选项为FZ_SEARCH_IGNORE_CASE忽略大小写命中的 quad 最多缓存 5000 个fz_quad search_hit_quads[5000]并在屏幕上以高亮显示。6.3 阅读历史与页面缓存阅读位置m/t/T与[number] m/t操作的history、future、marks数组各 256/256/10 条会被序列化为 JSON 持久化到~/.mupdf.history可被环境变量MUPDF_HISTORY、XDG_CACHE_HOME覆盖gl-main.c。下次打开同一文件时自动恢复current位置与书签。页面缓存acceleratorfz_save_accelerator将渲染页写入 XDG 缓存目录如~/.cache/mupdf/文件名由绝对路径转义而来见convert_to_accelerator仅对支持该机制的文档类型生效fz_document_supports_accelerator可显著加快二次打开速度。外部链接点击指向外部 URL 的链接时只放行file://、http(s)://、mailto:前缀经确认对话框后调用系统浏览器Linux 用BROWSER环境变量或xdg-openmacOS 用openWindows 用ShellExecuteA见 gl-main.c。6.4 修改与保存S保存与退出/重载时的确认逻辑若pdf_has_unsaved_changes为真会弹出含 Save/Discard/Cancel 的对话框quit_dialog/reload_dialog避免批注丢失窗口标题中文件名后加*表示存在未保存修改update_title。七、小结与使用建议mupdf-gl 是“一个二进制开遍格式”的通用查看器命令行选项覆盖加密文档-p、色彩管理-c/-B/-C/-I、EPUB 版式-W/-H/-S/-U/-X与 PDF 表单 JS-J文档未记载但源码确实支持的-Rreflow 阅读模式、-T操作跟踪脚本、-f全屏值得在实际部署中利用尤其是-T生成的 JS 可直接用mutool run做回归验证阅读历史与页面缓存都落在用户目录清理~/.mupdf.history与~/.cache/mupdf即可重置状态所有键盘绑定均可在运行中按F1随时查看源码帮助文本 gl-main.c 是键位最全的权威清单。赞分享图形学图像处理【免费下载链接】mupdfmupdf mirror项目地址https://gitcode.com/gh_mirrors/mu/mupdf点击查看免费下载相关推荐MuPDF JavaScript OutlineIterator 完全指南遍历、查询与编辑文档书签MuPDF JavaScript OutlineIterator 完全指南遍历、查询与编辑文档书签 OutlineIterator 是 MuPDF JavaS图形学图像处理MuPDF终极指南轻量级PDF查看与转换框架完全解析MuPDF终极指南轻量级PDF查看与转换框架完全解析 MuPDF是一个轻量级的开源PDF查看器与文档转换框架专为高性能PDF渲染和处理而设计。在PDF文档处图形学图像处理SumatraPDF 仓库中的 MuPDF Android 集成指南从嵌入查看器到源码级定制SumatraPDF 仓库中的 MuPDF Android 集成指南从嵌入查看器到源码级定制 本篇技术指南以 MuPDF 官方 Android 使用文档 e桌面应用文档创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑