Как автоматически дублировать страницы в файлах PDF?

10

У меня много PDF-файлов с 1 до 4 страниц каждый. Мне нужно решение, которое автоматически генерирует новый файл для каждого из этих файлов. Новые файлы должны содержать содержимое исходных файлов дважды (т. Е. Страницы 1 до конца, а затем снова те же страницы в том же порядке).

Как мне это сделать?

Марк
источник
3
Пожалуйста, уточните, мы не можем читать ваши мысли. Какой счет? Вы хотите создать новый файл PDF, который содержит каждую страницу оригинала дважды? В каком порядке? Вы хотите, чтобы страница 1a следовала за страницей 1b, или вы хотите сначала все 4 страницы, а затем снова все четыре страницы? Какую операционную систему ты используешь? Какой инструмент вы используете для создания PDF-файлов?
Terdon

Ответы:

15

Решение для Windows, использующее PDFtk (которое вы используете в соответствии с вашими тегами):

Это приведет к созданию PDF-файла со страницами 1-end и последующим 1-end:

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

Если вы хотите, чтобы каждая страница дублировалась вместе (как в 1,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: цикл легко достигается. Просто перейдите в каталог с PDF-файлами и введите в командной строке for %a in (*.pdf) do @pdftk "%~a" cat 1-end 1-end output "%~na (Duplicated)%~xa". Для каждого in.pdf (имя может быть любым) это приведет к соответствующему in (Duplicated) .pdf . Приятного ужина и не забудьте принять ответ (нажмите зеленую галочку слева), если он вам помог!
Каран
Infinete спасибо тебе - ты спас мне жизнь! Я очень очень благодарен за вашу помощь!
Марк
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)
    
terdon
источник
Ваш forцикл отсутствует doneи, $nвероятно, должен быть в кавычках. Может быть, мне не хватает как convertработает, но что convertделать, когда вы передаете три раза один и тот же файл? Я не могу проверить это прямо сейчас.
slhck
Спасибо @slhck, вы правы в обоих случаях как обычно. Формат общего преобразования является convert infile1 infile2 ... infileN outfile. Таким образом, если вы передадите ему один и тот же файл три раза, он примет его дважды в качестве входных данных, а затем запишет в тот же файл в качестве выходных. Это один я сделал тест :).
Terdon
Ох, круто, тогда я тоже кое-чему научился :)
slhck
Звучит неплохо. Большое спасибо. Комментарий выше: я дал эту первую попытку, и она сработала отлично, только правильный цикл, который я все еще ищу ... Вы не могли бы мне помочь снова? Спасибо заранее!
Марк
@ Марк извините, я не уверен, что вы имеете в виду. Какой комментарий? Какой цикл? Окна или баш один?
тердон
2

Если вы хотите, чтобы каждая страница дублировалась вместе (как в 1,1,2,2, ...) в Linux, этот скрипт сделает это:

#!/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}
Seegras
источник
0

Если у вас не установлен pdftk, но есть poppler-utils, используйте эту команду:

for f in *
do
    pdfjoin $f $f
done

Это особенно актуально в Fedora 21, где pdftk больше не доступен в репозитории.

Constantin
источник
0

Простое использование pdfunite. Это, вероятно, может быть еще более упрощено с большим знанием сценариев.

Имейте в виду, что последний аргумент является результирующим файлом . Если вы забудете об этом, этот файл будет перезаписан.

pdfunite 1.pdf 2.pdf 3.pdf 4.pdf result.pdf
pdfunite result.pdf result.pdf result.pdf 3-times-result.pdf
Keiki
источник