2010-04-08 217 views
3

我将处理通过“合并”多个PDF创建的每个PDF。每个合并的PDF都有PDF部件开始显示的书签位置。按书签拆分PDF?

有没有什么办法可以通过书签自动将其与脚本分开?

我们只有书签来指示部分,而不是页码,所以我们需要从书签中推断页码。一个Linux工具将是最好的。

回答

2

您有建立像pdf-split程序,可以为你做的:

A-PDF分割是一个非常简单的,闪电般快速的桌面实用程序,让您分割任何的Acrobat PDF文件转换成较小pdf文件。它提供了完整的灵活性和用户控制,包括文件如何拆分以及拆分输出文件的唯一命名方式。 A-PDF Split为您的大文件分割提供了多种选择 - 按页面,书签和奇/偶页面分页。即使您可以提取或删除部分PDF文件。 A-PDF拆分还提供了高级定义的拆分,可以保存并稍后导入以便用于重复的文件拆分任务。 A-PDF Split代表了文件分割的灵活性,以适应各种需要。

A-PDF Split与受密码保护的pdf文件一起工作,并且可以将各种pdf安全功能应用于分割输出文件。如果需要,您可以使用诸如A-PDF合并器之类的实用工具将生成的拆分文件与其他pdf文件重新组合以形成新的合成pdf文件。

A-PDF拆分不需要Adobe Acrobat,并生成与Adobe Acrobat Reader V5及更高版本兼容的文档。

编辑*

还发现了一个免费的开源项目Here,如果你不希望支付。

+0

任何Linux程序类似于A-PDF分割的一个? – Jason 2010-04-08 17:10:14

+0

@Jason http://linux.softpedia.com/get/Printing/Pdfsam-40703。shtml这是一个链接到pdfsam,但你可以去主页,我的帖子中的第二个链接,这应该是与Linux兼容。 – 2010-04-08 18:01:25

10

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 
+0

好:)我正在使用'grep -A1'^ BookmarkLevel:1'| grep'^ BookmarkPageNumber:''仅获取顶级书签。不幸的是,所有较低级别的书签都会以这种方式丢失...... – 2017-02-20 13:16:54

+0

我只是想提一下,这个bash脚本在macOS Sierra和pdftk上仍能正常工作。做得很好! – 2017-04-03 06:42:56

4

还有用Java编写的命令行工具,称为Sejda在这里你可以找到splitbybookmarks命令,做你问什么。它是Java,因此它可以在Linux上运行,并且可以通过编写脚本来执行该操作。

免责声明
我是作者