我有一个 PDF,我想要一种快速的方法来每隔一页插入一个空白页(最后除外)。例如,我的 PDF 有页面
1: A
2: B
3: C
4: D
它应该看起来像:
1: A
2: empty
3: B
4: empty
5: C
6: empty
7: D
有没有简单的脚本方法可以做到这一点?我想过使用 pdftk,但我不知道它是否是最简单的方法......我正在运行 Windows 7。
到目前为止感谢!
也有审稿的想法。这是完整的脚本。
#!/bin/bash
if [ $# -ne 1 ]
then
echo "Usage example: ./bashscript src.pdf"
exit $E_BADARGS
else
NUM=$(pdftk $1 dump_data | grep 'NumberOfPages' | awk '{split($0,a,": "); print a[2]}')
COMMSTR=''
for i in $(seq 1 $NUM);
do
COMMSTR="$COMMSTR A$i B1 "
done
$(echo "" | ps2pdf -sPAPERSIZE=a4 - pageblanche.pdf)
$(pdftk A=$1 B=pageblanche.pdf cat $COMMSTR output 'mod_'$1)
(pdfnup 'mod_'$1 --nup 2x1 --landscape --outfile 'print_'$1)
$(rm pageblanche.pdf && rm 'mod_'$1)
fi
#for f in *.pdf; do ./bashscript.sh $f; done 2> /dev/null
使用 pdftk 唯一困难的部分是输入所有内容。对于后代(例如,如果某人的页面数量很少并且想要这样做)这是使用 pdftk 的方法(以 3 页为例)。
做这个:
pdftk A=notblank.pdf B=blank.pdf cat A1-1 B1-1 A2-2 B1-1 A3-3 output combined.pdf
如果你想在每 3 页的末尾有一个空白页,它会是这样的:
pdftk A=notblank.pdf B=blank.pdf cat A1-3 B1-1 A4-6 B1-1 A7-9 output combined.pdf
如果您碰巧在最后想要一个空白页,只需添加另一个 B1-1。此外,您需要使用空白 PDF,当然这适用于非空白页面,您可以弄乱数字并使用超过 2 个 pdf。
在 Windows 中,您可以使用java可执行文件,例如
Multivalent(最新的免费版本,包含来自以下链接的工具,当前托管在 sourceforge 上本身没有工具;它们已被删除)
java -cp \path...to\Multivalent.jar tool.pdf.Impose -verbose -dim 1x1 -layout "1,b" file.pdf
Multivalent为原始文件名添加-up后缀
这将在pdf的任何页面之后添加一个空白页面, 但是......也在最后一页之后!
由于这是您不想要的,因此您需要在调用Multivalent后执行一些其他任务
这是通用模式,您可以使用它来自动化整个过程,将这些进一步的任务放在批处理文件中
1.还原pdf页面(最后一页成为第一页)
pdftk *-up.pdf cat end-1 output reverted.pdf
2.在输出文件中剪掉你不想要的最后一个空白页(现在是你的 REVERTED pdf 的第一页)
pdftk reverted.pdf cat 2-end output reverted2.pdf
3.再次将页面顺序还原为pdf以获得原始(1,2,3等...)页面顺序
pdftk reverted2.pdf cat end-1 output originalfilename-up.pdf
好的,我自己使用 PHP 和 FPDI/FPDF 完成了:
<?php
error_reporting(E_ALL);
require_once('fpdi/fpdf.php');
require_once('fpdi/fpdi.php');
// Format für die einzelnen Folien:
$format = 'L'; // Entweder '' (horizontal) oder 'L' (Landscape!)
// Verzeichnis lesen
foreach(glob('infiles/*.pdf') as $file)
{
$filename = basename($file);
$fileout = 'outfiles/' . $filename;
// Ausgabe-PDF
$out = new FPDI();
// Vorhandenes PDF einlesen
$pagecount = $out->setSourceFile($file);
// Alle Seiten nacheinander importieren
for($i = 1; $i <= $pagecount; $i++)
{
// Importiere Seite
$tpl = $out->importPage($i); // , '/MediaBox'
// Vorhandene Seite
$out->addPage($format);
$out->useTemplate($tpl);
if($i < $pagecount)
{
// Leere Seite anfügen (nur nicht am Ende)
$out->addPage($format);
}
}
$out->Output($fileout);
}
子目录“infiles”中的所有文件都将插入空白页面并保存到具有相同文件名的“outfiles”!
我只是在使用 pdftk,但我想你可以使用 shuffle 选项。如果你有n页的notblank.pdf(n有点大),创建一个包含1个空白页的文件blank.pdf(大小可以用PhotoShop或PowerPoint控制),然后是批处理文件(比如n = 10)
@echo off
setlocal enabledelayedexpansion
set "str="
for /l %%n in (1,1,10) do (set "str=!str! A" )
pdftk A=blank.pdf cat %str% output blank10.pdf
pdftk A=notblank.pdf B=blank10.pdf shuffle A B output blanknot.pdf
基本上完成了这项工作。它首先使用 1-page blank.pdf 创建一个 10-page blank10.pdf,然后使用原始 notblank.pdf 随机播放
ps 我发现使用 multistamp 命令会产生一个更简单的解决方案。假设我们现在有原始的 n 页 notblank.pdf 和 1 页空白.pdf(确保背景确实是白色而不是透明),那么以下命令就足够了
pdftk notblank.pdf multistamp blank.pdf output stamped.pdf
pdftk A=notblank.pdf B=stamped.pdf shuffle A B output zebra.pdf
输出文件 zebra.pdf 的末尾还有一个空白页,很容易摆脱
pdftk A=zebra.pdf cat A1-r2 output zebra1.pdf
然后删除最后一个空白页。不过,输出文件的大小大约大两倍。
我是 pdftk 的新手,这是我的第一篇文章。如果我做任何愚蠢的事情,请纠正我。
如果您的系统上有乳胶,那么以下脚本可能很有用:
#!/bin/sh
mkdir /tmp/$$
cp $1 /tmp/$$
d=`pwd`
cd /tmp/$$
pdftk $1 burst
echo "\\documentclass[12pt]{article}" > blank.tex
echo "\\\\begin{document}" >> blank.tex
echo "\\mbox{}" >> blank.tex
echo "\\end{document}" >> blank.tex
pdflatex blank
for i in pg*.pdf; do echo -n " blank.pdf $i " >> list; done
pdftk `cat list` cat output withblanks.$1
cd $d
cp /tmp/$$/withblanks.$1 .
pdfjam 和 exiftool 的使用方式与 pdftk 类似。您需要创建自己blank.pdf
的以下内容才能工作:
NUM=$(exiftool -T -PageCount input.pdf)
PDFJAM_ARG=""
for i in $(seq 1 ${NUM}); do
PDFJAM_ARG="${PDFJAM_ARG} input.pdf $i blank.pdf 1 ";
done
pdfjam -o output.pdf --fitpaper true ${PDFJAM_ARG}
这里有一个带有批处理脚本的解决方案来获取pdf的页数,通过命令和ImageMagick创建一个blank.pdf并自动绑定它们。
对于windows下的批处理文件。
@echo off
SetLocal EnableDelayedExpansion
:: get the number of pages
:: extract info with pdftk
pdftk output.pdf dump_data | grep NumberOfPages > temp
set /p pages=<temp
:: get only the real number
set pages2=!pages:NumberOfPages: =!
del temp
:: Prepare the string sequence to merge
FOR /L %%p IN (1, 1, !pages2!) DO (
if %%p==1 (
set list=A1 B1
) else (
set list=!list! A%%p B1
)
)
:: create a blank pdf
magick convert xc:none -page A4 blank.pdf
pdftk A=output.pdf B=blank.pdf cat %list% output combined.pdf
del blank.pdf