9

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

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

5 ответов5

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
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)
    
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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .