我发现很难说出这个问题,但找不到我想要做的事情的在线解决方案。
我知道如何使用以下脚本将大型PDF拆分为单个页面:
pdftk your_file.pdf burst output your_directory/page_%02d.pdf
但现在我想通过每个其他页面拆分PDF,这样每个新PDF都有两(2)页(例如1 + 2页,3 + 4页,5 + 6等。)。
我知道Acrobat会像冠军那样做,但我需要一些可以从Powershell执行的东西。
我对替代方案/解决方法持开放态度,例如在单次爆发之后将单页与两页合并。
答案 0 :(得分:6)
此PowerShell脚本将
更改前两个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-console
,AGPLv3下的开放源代码,可以从项目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