使用PDFTK将PDF拆分为多个页面?

时间:2017-05-05 13:04:16

标签: powershell pdf merge split pdftk

我发现很难说出这个问题,但找不到我想要做的事情的在线解决方案。

我知道如何使用以下脚本将大型PDF拆分为单个页面:

pdftk your_file.pdf burst output your_directory/page_%02d.pdf

但现在我想通过每个其他页面拆分PDF,这样每个新PDF都有两(2)页(例如1 + 2页,3 + 4页,5 + 6等。)。

我知道Acrobat会像冠军那样做,但我需要一些可以从Powershell执行的东西。

我对替代方案/解决方法持开放态度,例如在单次爆发之后将单页与两页合并。

5 个答案:

答案 0 :(得分:6)

此PowerShell脚本将

  1. 使用pdftk获取页数
  2. 循环步骤构建范围字符串
  3. 使用范围将页面提取为新的pdf,并附加基本名称的范围(并存储在同一文件夹中)。
  4. 更改前两个vars以适合您的环境。

    ## Q:\Test\2017\05\06\Split-Pdf.ps1
    $pdfPath = 'Q:\Test\2017\05\06\'
    $pdfFile = Join-Path $pdfPath "test.pdf"
    $SetsOfPages = 3
    $Match = 'NumberOfPages: (\d+)'
    $NumberOfPages = [regex]::match((pdftk $pdfFile dump_data),$Match).Groups[1].Value
    "{0,2} pages in {1}" -f $NumberOfPages, $pdfFile
    
    for ($Page=1;$Page -le $NumberOfPages;$Page+=$SetsOfPages){
      $File = Get-Item $pdfFile
      $Range = "{0}-{1}" -f $page,[math]::min($Page+$SetsOfPages-1,$NumberOfPages)
      $OutFile = Join-Path $pdfPath ($File.BaseName+"_$Range.pdf")
      "processing: {0}" -f $OutFile
      pdftk $pdfFile cat $Range output $OutFile
    }
    

    已编辑以处理可变页面集并正确处理悬空。
    再次编辑:找到了缩短最后一页网页的更简单方法。

    示例输出

    > .\Split-Pdf.ps1
    10 pages in Q:\Test\2017\05\06\test.pdf
    processing: Q:\Test\2017\05\06\test_1-3.pdf
    processing: Q:\Test\2017\05\06\test_4-6.pdf
    processing: Q:\Test\2017\05\06\test_7-9.pdf
    processing: Q:\Test\2017\05\06\test_10-10.pdf
    

答案 1 :(得分:3)

您可以使用sejda-consoleAGPLv3下的开放源代码,可以从项目GitHub页面下载。

您可以使用splitbyevery命令

  

在每个'n'页面拆分给定的PDF文档,创建'n'文档   每页。

在这种情况下,命令行将类似于:

sejda-console splitbyevery -n 2 -f /tmp/input_file.pdf -o /out_dir

答案 2 :(得分:2)

我发现Szakacs Peter的解决方案很棒,但是bash脚本需要进行三处调整:从$COUNTER开始于1,以便它指向pdf的第一页;在第四行添加双括号,以便(($COUNTER+1))进行求值;另一个$COUNTER,以使输出文件名唯一。

为我解决此问题的最终bash脚本是:

#!/bin/bash 
 COUNTER=1
 while [  $COUNTER -lt $NUMBEROFPAGES ]; do
     pdftk in.pdf cat $COUNTER-$(($COUNTER+1)) output out$COUNTER.pdf
     let COUNTER=COUNTER+2 
 done

然后将其另存为burst2page.sh之类,执行chmod u+x burst2page.sh以使其可执行,然后使用./burst2page.sh运行它

答案 3 :(得分:0)

您可以使用cat关键字从所需页面生成文件。

pdftk in.pdf cat 1-2 output out1.pdf
pdftk in.pdf cat 3-4 output out2.pdf

可以添加bash脚本以便于使用:

 #!/bin/bash 
 COUNTER=0
 while [  $COUNTER -lt $NUMBEROFPAGES ]; do
     pdftk in.pdf cat $COUNTER-$COUNTER+1 output out1.pdf
     let COUNTER=COUNTER+2 
 done

答案 4 :(得分:0)

布拉德·史密斯(Brad Smith)的脚本很好,但是无法以这种形状工作。当您未定义$ NUMBEROFPAGES时,脚本将向您抛出错误script.sh: line 3: [: 1: unary operator expected。我建议将其更改为:

#!/bin/bash 
FILE='in.pdf'
COUNTER=1
NUMBEROFPAGES=`pdftk $FILE dump_data |grep NumberOfPages | awk '{print $2}'`
while [  $COUNTER -lt $NUMBEROFPAGES ]; do
    pdftk $FILE cat $COUNTER-$(($COUNTER+1)) output out$COUNTER.pdf
    let COUNTER=COUNTER+2 
done