Как автоматически дублировать страницы в файлах 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)
    

Ваш 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}

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.