news 2026/9/21 2:13:21

SumatraPDF 命令行参数完全指南:启动、导航、打印与自动化实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SumatraPDF 命令行参数完全指南:启动、导航、打印与自动化实战

SumatraPDF 命令行参数完全指南:启动、导航、打印与自动化实战

【免费下载链接】sumatrapdfSumatraPDF reader项目地址: https://gitcode.com/gh_mirrors/su/sumatrapdf

SumatraPDF 是一款开源 Windows PDF 阅读器,其命令行接口功能强大:不仅支持打开文档时同时指定页码、缩放、视图模式与搜索词,还内置了面向无人值守场景的完整打印管线、DDE 控制通道以及 LaTeX 正反向搜索支持。本文以官方文档 Command-line-arguments.md 为核心骨架,结合仓库源码与配套文档,系统讲解 SumatraPDF 全部命令行选项的用法、底层实现与自动化技巧,帮助你把它嵌入脚本、编辑器与 kiosk 场景。

说明:本文所述版本信息以当前仓库为准;命令行打印等能力与 Windows 平台强相关,且部分选项(如-dbg-control)依赖特定构建(如 profile 构建)或测试框架。


命令行语法基础

SumatraPDF 的通用调用形式为:

SumatraPDF [argument ...] [filepath ...]

要点如下:

  • 大多数选项以连字符-开头;同时也兼容部分 Adobe Reader 的斜杠形式(/p/t/A)。
  • 部分选项后面会跟随附加参数。
  • 未被识别为已知选项的任何内容都被当作文件路径处理,因此可以自由混合文件路径与命令行选项,例如:
SumatraPDF -presentation report.pdf

从源码看,选项的注册表定义在 src/Flags.cpp 的Arg枚举与gArgNames字符串表中,解析逻辑位于ParseFlags()(src/Flags.cpp)。GetArg()会将每个以-//开头的参数去前缀后与字符串表做大小写不敏感匹配,未命中即进入CollectFile分支收集为文件路径(src/Flags.cpp);解析结果统一存入 src/Flags.h 的Flags结构体,供后续启动流程消费。

一个实用细节:如果某个文件名恰好以-开头(例如-notes.pdf),由于它匹配不到任何已知选项,也会被当作文件处理,但此时该选项之后不能再跟参数,否则参数会被吞掉。


启动方式选项

选项说明
-presentation以演示模式启动
-fullscreen以全屏模式启动
-new-window每个文件在各自的新窗口中打开,而不是在已有窗口的新标签页中打开(3.2+)。多个文件参数时,每个文件一个窗口
-new-window-tabs打开一个新窗口,并把所有文件作为标签页加载到该窗口中(3.7+,issue #5044)
-appdata <directory>设置自定义目录,用于存放SumatraPDF-settings.txt文件与缩略图缓存
-restrict受限模式运行,可禁用需要访问文件系统、注册表和网络的功能,适合 kiosk 类场景,详见 Configure for restricted use
-for-testing供人类或 Agent 临时测试使用。始终启动新实例、不恢复会话(只加载命令行给定的文件)、不保存设置(3.7+
-quicklook在无边框、始终置顶的预览窗口中打开文件(Explorer 空格键预览)。按 Esc 或 Space 关闭(3.7+,修复 #2568)
-quicklook-agent以无 UI 方式运行隐藏的 Explorer 空格键辅助进程。当设置ExplorerQuickLook为 true 时自动启动(3.7+
-dbg-control <named-pipe>在命名管道上启动测试控制服务器,供自动化测试通过 tests/control.ts 使用;常与-for-testing组合(3.7+)。在 profile 构建中,控制命令StartPerfLog/StopPerfLog可开启某段代码的函数计时日志;WaitSessionRestored等待启动会话恢复(标签页、选中文档、首次布局)完成——因为-for-testing会跳过恢复
-start-perf-log在 profile 构建(bun cmd/build.ts -profile)中,立即开始记录函数进入/退出耗时。默认关闭。日志在退出时保存为 exe 旁的sumperf.txt,或用-log-perf-file <path>指定路径
-log-perf-file <path>把性能函数计时日志写到该路径而非默认的sumperf.txt3.7+
-dump-chm <file>无头方式打开 CHM 文件:列出所含文件及大小、把每个文件解包到内存以验证可检索性,并把 TOC/索引元数据打印到 stdout。若 CHM 无法打开、枚举或解包,则以非零退出码退出
-pwd <password>用给定密码打开受密码保护的文档。密码错误时,SumatraPDF 会回退到默认密码,最后再交互式询问

与源码的对应关系

以上选项在 src/Flags.cpp 中都有直接的处理分支。例如:

  • -restrict设置i.restrictedUse = true
  • -presentation/-fullscreen分别设置enterPresentation/enterFullScreen
  • -new-window-new-window-tabs写入inNewWindow/inNewWindowTabs
  • -appdata写入appdataDir,控制SumatraPDF-settings.txt与缩略图缓存的落盘位置;
  • -for-testing写入forTesting,其语义(新实例、不恢复会话、不保存设置)在 src/Flags.h 中有完整注释。

受限模式(kiosk)

-restrict搭配同目录下的sumatrapdfrestrict.ini使用(仓库根目录即提供了一份参考配置 sumatrapdfrestrict.ini)。受限模式下会禁用:打开新文件、从 PDF 内启动 URL、文本/图片选择、打印、更改默认设置、保存到磁盘、自动/手动更新检查、最近文件历史、TeX 预览支持、注册为默认 PDF 阅读器、用 Adobe Acrobat 打开、邮件发送 PDF 等能力。完整选项说明见 Configure for restricted use。


导航选项

以下选项均作用于命令行中的第一个文件;若文档已经打开,可配合-reuse-instance让已有实例响应。

选项说明
-named-dest <destination-name>在第一个文件中搜索与<destination-name>匹配的命名目标、目录项,或(3.1+)页面标签,并将文档滚动到该位置
-page <pageNo>将第一个文件滚动到指定页
-view <view-mode>设置第一个文件的视图模式,可选值见下表
-zoom <zoom-level>设置第一个文件的缩放级别
-scroll <x,y>将第一个文件滚动到给定坐标
-search <term>打开文档时立即开始搜索指定词条(3.4+),例如SumatraPDF -search "foo" bar.pdf。开头的-必须保留
/A "<params>"Adobe Reader 兼容的打开参数(3.5+),详见下文

-view可用视图模式

"single page" "continuous single page" facing "continuous facing" "book view" "continuous book view"

含空格的选项值必须用双引号括起来。

-zoom可选值

支持"fit page""fit width""fit height""fit content",或任意百分比数值(如12575)。

从源码看,ParseViewMode()通过DisplayModeFromString()将字符串映射为DisplayMode(src/Flags.cpp),ParseZoomValue()则接受fit page/fit width/fit height/fit content的多种连写变体(fitpagefit-width等),百分比数值会被解析为float,小于 1 的值回退为实际大小(src/Flags.cpp)。

Adobe Reader 兼容的/A参数

/A "<params>"params是由;#&分隔的name=value列表,目前识别:

  • page=<n>:跳转到第 n 页(从 1 开始)
  • nameddest=<name>:跳转到命名目标
  • search=<term>:开始搜索(同-search

例如:

SumatraPDF /A "page=1;search=mr Fox" file.pdf

同样的name=value列表也可以附加在文件路径的?之后,例如:

file.pdf?page=4;search=foo

这一机制的底层实现是ParseFileArgs():它把?之后的部分提取出来,交由ParseAdobeFlags()解析(src/Flags.cpp)。ParseAdobeFlags()还额外支持 Sumatra 自定义的annotatt=<n>(附件型注释的 PDF 对象号)与attachno=<n>(附件编号)参数,这些字段定义在 src/Flags.h 的FileArgs结构体中。


通过 DDE 控制已运行实例

-dde cmd发送 DDE 命令(3.5+

SumatraPDF -dde '[Open("C:\Users\kjk\foo.pdf")]'
  • 向当前正在运行的实例发送 DDE 命令。
  • 参数必须正确加引号;文件路径必须是绝对路径。
  • DDE 命令的通用格式为[Command(parameter1, parameter2, ..., )],多个命令可拼接为[Command1(...)][Command2(...)][...]

-dde在源码中的处理见 src/Flags.cpp,命令字符串存入Flags::dde后由启动流程转发给已注册为 DDE 服务器的实例。DDE 服务器名称为SUMATRA、主题为control,Windows API 调用示例见 src/base/Win.cpp 的DDEExecute()

常用 DDE 命令速览(详见 DDE-Commands.md)

  • 打开文件[Open("<filePath>"[,<newWindow>,<focus>,<forceRefresh>])]
  • 正反向搜索(TeX)[ForwardSearch(["<pdffilepath>",]"<sourcefilepath>",<line>,<column>[,<newwindow>,<setfocus>])]
  • 跳转命名目标[GotoNamedDest("<pdffilepath>","<destination name>")]
  • 跳转页面[GotoPage("<pdffilepath>",<page number>)]
  • 搜索[Search("<pdffilepath>","<search-term>")](跨页继续并回绕)
  • 定位页内词条3.7+):[GotoPageWord("<pdffilepath>",<page number>,"<search-term>")](仅当该词出现在指定页时选中)
  • 设置视图[SetView("<pdffilepath>","<view mode>",<zoom level>[,<scrollX>,<scrollY>])],其中 zoom 为 8~6400 的百分比,或 -1(Fit Page)、-2(Fit Width)、-3(Fit Content)、-6(Fit Height),0 表示保持当前缩放
  • 查询文档状态(DDE request):[GetFileState("<pdffilepath>")]返回path/page/pageCount/zoom/view/sumver键值对
  • 列出打开文件[GetOpenFiles()]每行返回一个打开文档的完整路径

DDE 命令中字符串里的"\需要用\转义,例如[SetView(\"c:\\file.pdf\",\"continuous\",-3)]。DDE 方式也是 SumatraPDF 作为 LaTeX 编辑器预览工具的主要集成途径,详见 LaTeX-integration.md。


命令行打印选项

完整的打印指南(含常见任务示例)见 Printing.md。命令行打印的核心选项如下:

选项说明
-print-to-default把命令行中列出的所有文件打印到系统默认打印机,打印完成后立即退出(通过退出码判断失败)
-print-to <printer-name>把命令行中列出的所有文件打印到指定名称的打印机,打印后立即退出。例如-print-to "Microsoft XPS Document Writer"把所有文件打到 XPS 虚拟打印机
-print-settings <settings-list>-print-to/-print-to-default组合使用,无需打开打印对话框即可调整打印设置
-silent-print-to/-print-to-default组合,静默命令行打印相关的错误消息
-print-dialog为命令行中列出的所有文件弹出打印对话框
/pAdobe Reader 兼容别名,等价于-print-dialog
/t <file> <printer>Adobe Reader 兼容的静默打印(等价于-print-to <printer> <file>)。可选的驱动与端口参数会被接受并忽略。若文件已在命令行中出现,写/t <printer>即可
-exit-when-done-print-dialog(及-stress-test)组合使用,打印对话框关闭且文档打印完成后退出

-print-settings的底层处理在 src/Flags.cpp:会先去掉字符串中的空格,并把分号;统一转换为逗号,再存储,因此两种分隔符都可以使用。

-print-settings详细说明

设置列表是逗号分隔的页面范围与高级选项组合:

页面范围

  • 单页:5
  • 范围:2-6,也可反向:10-8
  • last:最后一页
  • 负数表示从末尾倒数:-1是最后一页,-2是倒数第二页;范围也可用负数,如-3--1表示最后 3 页

输出选项

  • evenodd:只打印偶数页或奇数页
  • portraitlandscape:提供内容的 90 度旋转(不是纸张旋转,纸张方向必须在打印机默认设置中预先设定)
  • disable-auto-rotation:默认情况下,宽大于高的页面会被旋转 90 度以适配纸张;此选项按原始方向打印(3.5 起可用)
  • rotate=<degrees>:在自动旋转的基础上额外旋转90180270度。适合修正错误方向,例如虚拟打印机上上下颠倒(rotate=180)的输出
  • noscaleshrinkfitstretch:缩放策略,其中stretch在两个维度都填满纸张(忽略宽高比)
  • center:将页面在纸张上水平居中。配合noscale在页面小于纸张时有用(例如信封或 A5 纸料送入居中的纸盒)
  • colormonochrome
  • collatenocollate:多份打印时是否逐份排序(1,2,3,1,2,3)或不排序(1,1,2,2,3,3)
  • duplexduplexshortduplexlongsimplex:双面/单面打印
  • bin=<num or name>:选择进纸盒。bin=auto让打印机自动选择纸张尺寸与文档页面匹配的进纸盒(类似 Adobe 的 "Choose paper source by PDF page size")
  • paper=<page size>:纸张尺寸为A2A3A4A5A6letterlegaltabloidstatement,或打印机报告的名称(如A3 297 x 420 mm)。自定义尺寸:paper=76mm x 130mm。混合页面尺寸的文档可用paper=auto按每页自身尺寸设置纸张(配合bin=auto同时选择匹配的纸盒)
  • paperkind=<num>:按 WindowsDMPAPER_*ID 指定纸张(值可从SumatraPDF.exe -list-printers获取);当paper=A3无法匹配驱动程序的纸张名称时使用
  • ignore-pdf-print-settings:不应用 PDF 内嵌的ViewerPreferences打印默认值(见下文)

使用示例

SumatraPDF -print-to-default -print-settings "1-3,5,10-8,odd,fit,bin=2" file.pdf

该命令打印第 1、3、5、9 页(即范围 1-3、5-5 与 10-8 中的奇数页),并按fit缩放使其适配纸张的可打印区域。

SumatraPDF -print-to-default -print-settings "3x" file.pdf

把文档打印 3 份。

PDF 内嵌打印默认值

对于 PDF 文件,文档ViewerPreferences中内嵌的打印默认值会被自动应用:PrintScaling/None表示不缩放)、NumCopiesDuplexSimplex/DuplexFlipShortEdge/DuplexFlipLongEdge)以及PickTrayByPDFSize(按页面尺寸选纸盒)。-print-settings中任何显式设置都会覆盖 PDF 默认值;若想完全忽略 PDF 内嵌值,加上ignore-pdf-print-settings即可。

退出码:无人值守打印的成败判定

使用-print-to/-print-to-default时,进程退出码直接告诉你打印失败的原因,非常适合无人值守/静默打印:

退出码含义
0成功
2无法打开文件(未找到或不支持的格式)
3文档不允许打印
4打印机(指定或默认)不存在
5打印机驱动/设备失败
6受限策略禁用了打印

多个文件时,退出码为0当且仅当全部打印成功;否则返回第一次失败所属的类别。注意:作业提交后发生在打印缓冲池/驱动内部的失败(缺纸、脱机等)无法通过此机制报告。

这一设计在源码中有明确注释:PrintResult枚举的数值同时充当进程退出码,以便自动化调用方判断失败原因(见 src/Print.h,对应 issue #3478),主程序在 src/SumatraPDF.cpp 中对每个文件调用PrintFile()并汇总结果。

不支持的 Adobe Reader 标志

以下 Adobe Reader 标志不被支持,因为它们与 SumatraPDF 自身选项冲突:

  • /h(在 Adobe 中是帮助,而非隐藏模式)
  • /n(在 Adobe 中是 stress-test 并行度,而非新实例)
  • /s(在 Adobe 中是静默打印错误,而非抑制启动画面)

LaTeX 正反向搜索相关选项

SumatraPDF 是 LaTeX 工作流中常用的 PDF 预览器,以下选项服务于正向(源码→PDF)与反向(PDF→源码)搜索:

  • -forward-search "<sourcepath>" <line> "<pdfpath>":从 LaTeX 源文件对已加载的 PDF 执行正向搜索(基于 PdfSync 或 SyncTeX),是 ForwardSearch DDE 命令的替代方案。例如:
SumatraPDF -forward-search "/path/to/main.tex" 123 "/path/to/main.pdf"

会高亮 main.tex 中第 123 行对应的所有文本。源码中该选项要求-forward-search(或旧别名-fwdsearch)后紧跟源路径与行号两个参数(src/Flags.cpp),其中AdditionalParam会拒绝任何看起来像选项的参数,避免误吞。

  • -reuse-instance:让已打开的 SumatraPDF 实例加载指定文件。若同时有多个运行实例,行为未定义。仅在需要通过 DDE 与 SumatraPDF 通信时才需要(否则请使用ReuseInstance设置)。
  • -inverse-search <command-line>:设置从 PDF 执行反向搜索(通常回到 LaTeX 源文件)所用的命令行。也可以在Set Inverse Search Command Line对话框(Ctrl + K命令面板)中设置,或在启用EnableTeXEnhancements后从Settings / Options中设置,或通过高级设置InverseSearchCmdLine设置。命令行中使用%f表示当前文件名、%l表示当前行号。
  • -fwdsearch-offset <offset> -fwdsearch-width <width> -fwdsearch-color <hexcolor> -fwdsearch-permanent <flag>:自定义正向搜索高亮。将 offset 设为正数可把高亮样式改为页面左侧的矩形(而不是覆盖所有文本的矩形)。-fwdsearch-permanent的 flag 可为 0(高亮淡出,默认)或 1(持久高亮)。(已弃用):请改用对应的高级设置。

反向搜索与 SyncTeX 的完整配置流程可参考 LaTeX-integration.md。


开发者与测试选项

选项说明
-console在 SumatraPDF 旁打开一个控制台窗口,用于访问(MuPDF)调试输出
-list-printers打印已安装打印机、默认设置、纸张尺寸与进纸盒后退出。用于选择-print-topaper=paperkind=bin=的值。配合-console-silent时,输出只进入控制台(不弹对话框)
-stress-test <path> [file-filter] [range] [cycle-count]渲染指定文件/目录的所有页面以做稳定性与性能测试
-html-backend <ie\|webview2>强制指定内嵌浏览器来显示 CHM 与 markdown 文档(3.7+)。默认在已安装 WebView2 时使用 WebView2,否则用 IE 控件;此选项用于让测试覆盖两种情况
-bench <filepath> [page-range]渲染给定文件的所有(或指定)页面,输出渲染耗时,用于性能测试与对比。常与-console配合

-stress-test用法示例

-stress-test file1.pdf 25x -stress-test file2.pdf 1-3 -stress-test dir *.pdf;*.xps 15- 3x
  • 第一个示例把 file1.pdf 渲染 25 次;
  • 第二个示例只渲染 file2.pdf 的第 1~3 页;
  • 第三个示例从目录dir中渲染除前 14 个之外的所有 PDF 和 XPS 文件,每个渲染 3 次。

-stress-test的解析顺序在 src/Flags.cpp 中:路径后先检查含*的文件过滤器,再检查页面范围,最后检查以x结尾的循环次数;页面范围还会经过IsValidPageRange()校验,该函数底层即ParsePageRanges()(src/Flags.cpp),支持32-45-等写法。


已弃用选项

以下选项只是往设置文件中写入值,可能在未来的任何版本中被移除:

选项说明替代设置
-bg-color <hexcolor>把黄色背景改成其他颜色,如-bg-color #999999改为灰色MainWindowBackground
-esc-to-exit启用 Esc 键退出 SumatraPDFEscToExit
-set-color-range <text-hexcolor> <background-hexcolor>用给定前景/背景两色映射文档中所有其他颜色,如-set-color-range #dddddd #333333显示深灰底上的柔白文字FixedPageUI.TextColorFixedPageUI.BackgroundColor
-lang <language-code>设置界面语言,如-lang de。可用语言代码见 src/TranslationLangs.cppUiLanguage
-manga-mode <mode>启用/禁用"漫画模式"(主要针对日式漫画从右到左阅读)。mode 为 "true" 或 1 启用,"false" 或 0 禁用ComicBookUI.CbxMangaMode
-invert-colors本次运行临时交换固定页面文档的文本与背景颜色。旧别名-invertcolors同样被接受参见高级设置

从源码看,这些选项的处理方式是:把参数名与值原样追加到Flags::globalPrefArgs(src/Flags.cpp),之后由设置加载逻辑按旧的键值格式写入设置文件,因此文档明确标注其仅用于兼容、应迁移到高级设置。


组合实战场景

1. 直接打开并定位

SumatraPDF -reuse-instance -page 42 -view "continuous book view" -zoom "fit width" book.pdf

已打开的实例会切到 book.pdf 第 42 页,并应用连续书本视图 + 宽度适配。

2. 无人值守静默打印(结合退出码判断成败)

SumatraPDF -print-to-default -print-settings "1-3,5,10-8,odd,fit,bin=2" -silent report.pdf echo %errorlevel%

3. LaTeX 编辑器正向搜索

SumatraPDF -reuse-instance -forward-search "main.tex" 123 "main.pdf"

4. kiosk 演示机

SumatraPDF -restrict -fullscreen -presentation slides.pdf

配合同目录的sumatrapdfrestrict.ini即可锁住除翻页外的绝大部分操作。


关键文件索引

  • 参数定义与解析: src/Flags.cpp、src/Flags.h
  • 打印结果/退出码定义: src/Print.h、src/Print.cpp
  • DDE 命令文档: DDE-Commands.md
  • 受限模式配置: sumatrapdfrestrict.ini、Configure for restricted use
  • 完整打印指南: Printing.md
  • LaTeX 集成: LaTeX-integration.md
  • 安装包命令行参数(/S/D等,与本文所述运行期参数不同): Installer-cmd-line-arguments.md

【免费下载链接】sumatrapdfSumatraPDF reader项目地址: https://gitcode.com/gh_mirrors/su/sumatrapdf

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/21 2:08:27

电商管家深度解析:银行如何重构卖家资金管理、对账与融资链路

简介&#xff1a;中信银行电商管家产品介绍PPT是一份面向商业银行产品经理、电商平台运营及支付结算研究者的专业资料&#xff0c;系统展示电商管家“收、管、付”一体化全流程资金结算解决方案。内容包括产品定位、目标客群、解决痛点、功能特点、应用场景及同业营销优势&…

作者头像 李华
网站建设 2026/9/21 2:04:49

Kimi Code 套餐额度实测:从安装配置到用量消耗全解析

Kimi Code 这个话题最近在开发者圈子里讨论度很高&#xff0c;我自己也是从它刚开放内测就开始关注&#xff0c;陆陆续续用了几个月。很多人一上来就问它代码能力怎么样、和 Claude Code 比哪个强&#xff0c;但真正用 Agent 类工具做深度开发的人&#xff0c;问的第一个问题往…

作者头像 李华
网站建设 2026/9/21 2:03:57

pi 编程智能体 CLI 实战:LLM API + Agent Loop + TUI 架构解析

1. 从"pi"这个标题说起&#xff1a;一个极简命名背后的技术野心第一次看到"pi"这个项目标题&#xff0c;很多人会愣一下——是那个圆周率&#xff1f;还是树莓派&#xff1f;其实都不是。在当下 coding agent CLI 这个赛道里&#xff0c;"pi"是一…

作者头像 李华
网站建设 2026/9/21 2:01:33

Shopee接口签名机制解析:从原理到代码实现与调试技巧

简介&#xff1a;面向Shopee数据采集开发者的签名参数分析代码包&#xff0c;聚焦接口请求中sap-ri与x-sap-sec两个核心认证参数的生成与配置&#xff0c;解决开发者在不熟悉加密规则时难以稳定采集的痛点。压缩包共3个文件&#xff0c;包含HTML说明页、InsCode可运行工程以及G…

作者头像 李华
网站建设 2026/9/21 2:01:24

空调节能环保认证全解读:从能效等级到选型避坑

简介&#xff1a;这份PDF包含一份空调节能环保认证证书&#xff0c;面向需核验产品认证状态的采购、质检或工程人员&#xff0c;可用于投标文件、采购评审与产品合规性核查等场景。资源共1个PDF文件&#xff0c;大小686KB&#xff0c;已有542人浏览学习。证书编号CQC2270134897…

作者头像 李华