如何自动在PDF文件中复制页面?


10

我有很多PDF文件,每个文件有1至4页。我需要一个为每个文件自动生成一个新文件的解决方案。新文件应包含两次原始文件的内容(即从第1页到末尾,然后以相同的顺序再次显示相同的页)。

我该如何完成?


3
请澄清,我们无法读懂您的想法。什么账单 您要生成一个包含原始文档的每一页两次的新pdf文件吗?以什么顺序?您是要第1a页然后是第1b页,还是要先全部4页,然后再全部4页?您使用什么操作系统?您使用什么工具来创建PDF?
特登

Answers:


15

使用PDFtk的 Windows解决方案(您似乎正在根据标签使用):

这将产生一个PDF,其PDF文件的第1页为第1页,随后为第1页:

pdftk in.pdf cat 1-end 1-end output out.pdf

如果希望将每个页面一起复制(如1、2、2,...),请使用以下批处理文件:

@echo off
set pages=
setlocal enabledelayedexpansion
for /f "tokens=2" %%a in ('pdftk in.pdf dump_data ^| find /i "NumberOfPages"') do for /l %%b in (1,1,%%a) do set pages=!pages! %%b %%b
pdftk in.pdf cat!pages! output out.pdf

非常感谢:“ pdftk in.pdf cat 1-end 1-end output out.pdf”正是我需要的。唯一缺少的是一个循环,该循环从目录中获取所有pdf文件并创建所有新文件。非常感谢您再次提供帮助。我将不胜感激,并邀请我的妻子共进晚餐,以节省时间;
Marc

@Marc:循环很容易实现。只需转到包含PDF的目录,然后在命令提示符下键入for %a in (*.pdf) do @pdftk "%~a" cat 1-end 1-end output "%~na (Duplicated)%~xa"。对于每个in.pdf(名称可以是任何东西),这将在(Duplicated).pdf中产生一个对应的内容。享用晚餐,如果它对您有所帮助,请不要忘记接受答案(单击左侧的绿色复选标记)!
卡兰

衷心感谢您-您救了我的命!非常感谢您的帮助!
马克

2

如果您回答我的评论中的问题,我可能会为您提供更好的解决方案,但是为了您的妻子,这里有一些建议。

ImageMagick是用于图像处理的跨平台命令行工具。安装后,您应该可以使用它的convert工具来做您想要的事情。详细信息取决于您的操作系统。我假设您想要整个文件的两个副本,而不是每个页面都加倍。

  1. Linux / OSX / Unix等

    for n in *pdf; do convert -density 150 "$n" "$n" "$n"; done
    

    这将覆盖现有文件,您可能需要先备份。

  2. 视窗。这可能有点错误,我不使用Windows,所以无法测试它,但总体思路应该是这样的

    for %f in (*.pdf) do (convert.exe %f %f %f)
    

您的for循环缺少done$n可能应该被引用。也许我错过了convert工作原理,但是convert当您传递相同文件的三倍后该怎么办?我现在无法测试。
slhck

感谢@slhck,您在两个方面都一如既往地正确。一般转换格式为convert infile1 infile2 ... infileN outfile。因此,如果将同一文件传递三遍,它将把它当作输入两次,然后作为输出写到同一文件中。那一个我没有测试:)。

哦,很酷,然后我也学到了一些东西:)
slhck

听起来不错。非常感谢。上面的评论:我第一次尝试了它,并且效果很好,只有我仍在寻找的正确循环....您能再帮我一次吗?提前谢谢了!
马克

@Marc对不起,我不确定您的意思。有何评论?哪个循环?窗户还是bash一个?
2013年

2

如果要在Linux上将每个页面复制在一起(如1,1,2,2,...),则此脚本可以做到:

#!/bin/bash
INPUTFILE=$*
PAGENUM=`pdftk ${INPUTFILE} dump_data | grep NumberOfPages | cut -d : -f 2  | cut -d " " -f 2`
PAGES=`seq 1 ${PAGENUM}`
DUPAGES=`for i in ${PAGES} ; do echo $i $i | tr "\n" " " ; done`
OUTPUT=`basename ${INPUTFILE} .pdf`.dup.pdf
pdftk ${INPUTFILE} cat ${DUPAGES} output ${OUTPUT}

0

如果您没有安装pdftk,但是安装了poppler-utils,请使用以下命令:

for f in *
do
    pdfjoin $f $f
done

这在Fedora 21上尤其重要,因为pdftk在存储库中不再可用。


0

使用简单pdfunite。可以通过更多脚本知识进一步简化此操作。

请注意,最后一个参数是结果文件。如果您忘记了该文件,则该文件将被覆盖。

pdfunite 1.pdf 2.pdf 3.pdf 4.pdf result.pdf
pdfunite result.pdf result.pdf result.pdf 3-times-result.pdf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.