通过书签拆分PDF?

问题描述 投票:8回答:4

我将处理单个PDF,每个PDF是通过“合并”多个PDF创建的。每个合并的PDF都有PDF部件开始以书签显示的位置。

有没有办法用脚本自动按书签将其拆分?

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

linux pdf pdf-generation tagged-pdf
4个回答
3
投票

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

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

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

A-PDF Split不需要Adobe Acrobat,并且可以生成与Adobe Acrobat Reader版本5及更高版本兼容的文档。

编辑*

如果您不想付款,还找到了免费的开源程序Here


17
投票

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

要获取书签的页码,请执行>

pdftk in.pdf dump_data

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

然后使用

pdftk in.pdf cat A-B output out_A-B.pdf

将页面从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

4
投票

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


0
投票

这是我用于该任务的一个Perl小程序。 Perl并不特殊。它只是pdftk的包装器,以解释其dump_data输出以将其转换为要提取的页码:

© www.soinside.com 2019 - 2024. All rights reserved.