13

我有一个 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。

到目前为止感谢!

4

8 回答 8

13

也有审稿的想法。这是完整的脚本。

#!/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
于 2014-10-30T07:51:16.753 回答
10

使用 pdftk 唯一困难的部分是输入所有内容。对于后代(例如,如果某人的页面数量很少并且想要这样做)这是使用 pdftk 的方法(以 3 页为例)。

  1. 安装 pdftk http://www.pdflabs.com/docs/install-pdftk/

做这个:

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。

于 2012-11-16T08:14:51.803 回答
1

在 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
于 2012-10-18T00:11:05.217 回答
1

好的,我自己使用 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”!

于 2012-10-18T09:40:30.650 回答
1

我只是在使用 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 的新手,这是我的第一篇文章。如果我做任何愚蠢的事情,请纠正我。

于 2013-09-11T13:11:07.253 回答
1

如果您的系统上有乳胶,那么以下脚本可能很有用:

#!/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 .
于 2017-11-21T21:51:57.297 回答
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}
于 2020-09-23T17:39:04.623 回答
0

这里有一个带有批处理脚本的解决方案来获取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
于 2021-01-27T18:01:17.553 回答