关于powershell:使用PDFTK将PDF拆分成多个页面吗?

Split PDF by multiple pages using PDFTK?

我很难说出这个问题,也找不到在线解决方案来解决我的问题。

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

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

但是现在我想按每隔一页拆分PDF,以便每个新的PDF具有两(2)页(例如,第1 2页合在一起,第3 4页合在一起,第5 6页等)。

我知道Acrobat就像冠军一样,但是我需要可以从Powershell中执行的东西。

我乐于接受其他选择/解决方法,例如将单页打印成单页后将其合并为两个。


此PowerShell脚本将

  • 使用pdftk获取页数
  • 逐步构建范围字符串
  • 使用范围将页面提取到新的pdf中,并将范围附加到基本名称(并存储在同一文件夹中)。
  • 更改前两个变量以适合您的环境。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ## 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
    }

    经过编辑,可处理可变的页面集并正确处理突出部分。
    再次编辑:找到了一种更简单的方法来缩短最后一组页面。

    样本输出

    1
    2
    3
    4
    5
    6
    > .\\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


    您可以使用sejda-console,它在AGPLv3下是开源的,可以从项目GitHub页面下载。

    您可以使用命令,其中

    Splits a given PDF document every 'n' pages creating documents of 'n'
    pages each.

    在这种情况下,命令行如下所示:

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


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

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

    1
    2
    3
    4
    5
    6
    #!/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

    运行它


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

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

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

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


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

    1
    2
    3
    4
    5
    6
    7
    8
    #!/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