You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下如何用pdfmark/GhostScript让PDF仅显示前两级书签?

批量控制PDF书签默认显示前两级的命令行方案(Windows)

核心原理

Adobe pdfmark的/Count属性是控制书签默认展开状态的关键:

  • 正数:书签默认展开,自动显示所有子项
  • 负数:书签默认折叠,自动隐藏所有子项

要实现打开PDF时仅显示前两级,只需给第二级书签设置/Count -N(N为该二级下的三级书签数量),让第三级书签默认处于折叠状态即可。


方案1:修改书签生成脚本(推荐,精准可控)

如果你是通过pdfmark脚本生成三级书签,直接修改脚本里的二级书签/Count值:

  1. 找到你的书签生成文件(比如bookmarks.txt),二级书签的配置行通常类似:
    [/Title "二级标题1" /Page 5 /Count 3 /OUT pdfmark]
    
    把/Count 3改成/Count -3,该二级下的3个三级书签就会默认折叠。
  2. 用PowerShell批量修改当前目录下所有pdfmark文件:
    Get-Content *.pdfmark | ForEach-Object { $_ -replace '/Count (\d+)', '/Count -$1' } | Set-Content "modified_$($_.Name)"
    
  3. 用GhostScript将修改后的pdfmark应用到合并好的PDF:
    "C:\Program Files\gs\gs10.02.1\bin\gswin64c.exe" -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=final_merged.pdf merged.pdf modified_bookmarks.pdfmark
    
  4. 批量处理多文件的批处理脚本(batch_process.bat):
    @echo off
    setlocal enabledelayedexpansion
    set GS_PATH="C:\Program Files\gs\gs10.02.1\bin\gswin64c.exe"
    
    for %%f in (merged_*.pdf) do (
        set BM_FILE=%%~nf.pdfmark
        powershell -Command "(Get-Content !BM_FILE!) -replace '/Count (\d+)', '/Count -$1' | Set-Content modified_!BM_FILE!"
        !GS_PATH! -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=final_%%~nf.pdf %%f modified_!BM_FILE!
        del modified_!BM_FILE!
    )
    

方案2:直接修改已有三级书签的PDF

如果已经生成了带三级书签的PDF,不想修改原脚本,用PostScript脚本批量调整:

  1. 创建collapse_level3.ps文件,内容如下:
    % 递归遍历书签,将二级书签的子项设为默认折叠
    /ProcessBookmark {
        2 dict begin
        /next exch def
        /bk exch def
        bk /Kids get dup null ne {
            dup length 0 gt {
                bk /Count get dup 0 gt { bk /Count exch neg put } if
                {ProcessBookmark} forall
            } if
        } if
        next null ne {next ProcessBookmark} if
        end
    } bind def
    
    [{Catalog} /Outlines get ProcessBookmark] pdfmark
    [/DOCVIEW /PageMode /UseOutlines pdfmark
    
  2. 批量处理的批处理脚本:
    @echo off
    set GS_PATH="C:\Program Files\gs\gs10.02.1\bin\gswin64c.exe"
    
    for %%f in (*_full_bookmarks.pdf) do (
        !GS_PATH! -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=final_%%~nf.pdf %%f collapse_level3.ps
    )
    

注意事项

  • 请将GhostScript路径调整为你实际安装的版本路径(比如gs9.55.0)。
  • 方案1的正则替换仅针对二级书签/Count为正数的场景,若你的书签格式特殊,需微调正则表达式。
  • 建议先拿单个文件测试效果,再执行批量处理。

内容的提问来源于stack exchange,提问作者abhijeet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:50:50