按书签拆分PDF?

Jas*_*son 8 linux pdf pdf-generation tagged-pdf

我将处理单个PDF,每个PDF都是通过"合并"多个PDF来创建的.每个合并的PDF都有PDF部件开始显示的位置和书签.

有没有办法通过书签用脚本自动拆分?

我们只有书签来指示部件,而不是页码,因此我们需要从书签中推断出页码.Linux工具最好.

Tuo*_*mas 17

pdftk可用于拆分PDF文件并提取书签的页码.

要获取书签的页码

pdftk in.pdf dump_data
Run Code Online (Sandbox Code Playgroud)

并使您的脚本从输出中读取页码.

然后用

pdftk in.pdf cat A-B output out_A-B.pdf
Run Code Online (Sandbox Code Playgroud)

将A到B的页面转换为out_A-B.pdf.

脚本可能是这样的:

#!/bin/bash

infile=$1 # input pdf
outputprefix=$2

[ -e "$infile" -a -n "$outputprefix" ] || exit 1 # Invalid args

pagenumbers=( $(pdftk "$infile" dump_data | \
                grep '^BookmarkPageNumber: ' | cut -f2 -d' ' | uniq)
              end )

for ((i=0; i < ${#pagenumbers[@]} - 1; ++i)); do
  a=${pagenumbers[i]} # start page number
  b=${pagenumbers[i+1]} # end page number
  [ "$b" = "end" ] || b=$[b-1]
  pdftk "$infile" cat $a-$b output "${outputprefix}"_$a-$b.pdf
done
Run Code Online (Sandbox Code Playgroud)

  • 很好 :) 我正在使用 `grep -A1 '^BookmarkLevel: 1' | grep '^BookmarkPageNumber: '` 仅获取顶级书签。不幸的是,所有较低级别的书签都会以这种方式丢失...... (2认同)

And*_*dio 5

有一个用 Java 编写的命令行工具,名为Sejda,您可以在其中找到splitbybookmarks完全符合您要求的命令。它是 Java,因此它可以在 Linux 上运行,并且作为一个命令行工具,您可以编写脚本来执行此操作。

免责声明
我是作者之一

  • `sejda-console` 需要 Pro,价格为 2000 美元/年。当然不是我的用例的选择。 (3认同)

Jus*_*ire 3

你有像pdf-split这样构建的程序可以为你做到这一点:

A-PDF Split 是一个非常简单、快速的桌面实用程序,可让您将任何 Acrobat pdf 文件拆分为更小的 pdf 文件。它在如何分割文件以及如何唯一命名分割输出文件方面提供了完全的灵活性和用户控制。A-PDF Split 提供了多种分割大文件的替代方案 - 按页面、按书签以及按奇数/偶数页面。您甚至可以提取或删除 PDF 文件的一部分。A-PDF Split 还提供高级定义的分割,可以保存并稍后导入以用于重复的文件分割任务。A-PDF Split 代表了文件分割的终极灵活性,可满足各种需求。

A-PDF Split 适用于受密码保护的 pdf 文件,并且可以将各种 pdf 安全功能应用于拆分输出文件。如果需要,您可以使用 A-PDF Merger 等实用程序将生成的拆分文件与其他 pdf 文件重新组合,以形成新的复合 pdf 文件。

A-PDF Split 不需要 Adob​​e Acrobat,并生成与 Adob​​e Acrobat Reader 版本 5 及更高版本兼容的文档。

编辑*

如果您不想付费,还可以在这里找到一个免费的开源程序。