Jak automatycznie duplikować strony w plikach PDF?

10

Mam dużo plików PDF z 1 do 4 stron. Potrzebuję rozwiązania, które automatycznie generuje nowy plik dla każdego z tych plików. Nowe pliki powinny zawierać treść oryginalnych plików dwa razy (tj. Strony od 1 do końca, a następnie te same strony w tej samej kolejności).

Jak to osiągnąć?

Marc
źródło
3
Wyjaśnij, że nie możemy odczytać Twojego zdania. Jaki rachunek? Chcesz wygenerować nowy plik pdf, który zawiera każdą stronę oryginału dwa razy? W jakiej kolejności? Czy chcesz stronę 1a, a następnie stronę 1b, czy najpierw wszystkie 4 strony, a następnie wszystkie cztery strony? Jakiego systemu operacyjnego używasz? Jakiego narzędzia używasz do tworzenia plików pdf?
terdon

Odpowiedzi:

15

Rozwiązanie dla systemu Windows za pomocą PDFtk (wydaje się, że używasz według tagów):

Spowoduje to powstanie pliku PDF ze stronami 1-koniec, a następnie ponownie 1-koniec:

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

Jeśli chcesz, aby każda strona była duplikowana razem (jak w 1,1,2,2, ...), użyj następującego pliku wsadowego:

@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
Karan
źródło
Wielkie dzięki: „pdftk in.pdf cat 1-end 1-end output out.pdf” robi dokładnie to, czego potrzebuję. Brakuje tylko pętli, która pobiera wszystkie pliki pdf z katalogu i tworzy wszystkie nowe pliki. Bardzo dziękuję za pomoc. Będę wdzięczny i zaproszę moją żonę na obiad z zaoszczędzonym czasem ;-)))
Marc
@Marc: Pętla jest łatwa do osiągnięcia. Wystarczy przejść do katalogu z plikami PDF i w wierszu polecenia for %a in (*.pdf) do @pdftk "%~a" cat 1-end 1-end output "%~na (Duplicated)%~xa". Dla każdego pliku in.pdf (nazwa może być dowolna ) spowoduje to powstanie odpowiedniego pliku (Duplicated) .pdf . Ciesz się kolacją i nie zapomnij zaakceptować odpowiedzi (kliknij zielony znacznik wyboru po lewej stronie), jeśli Ci pomogła!
Karan
nieskończone dzięki tobie - uratowałeś mi życie! Jestem bardzo wdzięczny za twoją pomoc!
Marc
2

Mogę dać ci lepsze rozwiązanie, jeśli odpowiesz na pytania w moim komentarzu, ale ze względu na twoją żonę, oto kilka sugestii.

ImageMagick to wieloplatformowe narzędzie wiersza poleceń do manipulacji obrazami. Po zainstalowaniu powinieneś być w stanie używać tego convertnarzędzia do robienia tego, co chcesz. Szczegóły zależą od systemu operacyjnego. Zakładam, że potrzebujesz dwóch kopii całego pliku, a nie każdej strony podwójnej.

  1. Linux / OSX / Unix itp

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

    Spowoduje to zastąpienie istniejących plików , możesz najpierw wykonać kopię zapasową.

  2. Windows Może to być nieco błędne, nie używam systemu Windows, więc nie mogę go przetestować, ale ogólny pomysł powinien być taki

    for %f in (*.pdf) do (convert.exe %f %f %f)
    
terdon
źródło
W Twojej forpętli brakuje donei $nprawdopodobnie należy ją zacytować. Może brakuje mi tego convert, jak to działa, ale co się stanie convert, gdy przejdziesz trzy razy ten sam plik? Nie mogę tego teraz przetestować.
slhck
Dzięki @slhck, masz rację w obu kwestiach jak zwykle. Ogólny format konwersji to convert infile1 infile2 ... infileN outfile. Tak więc, jeśli trzy razy przekażesz ten sam plik, zajmie to dwa razy jako dane wejściowe, a następnie zapisze w tym samym pliku jako dane wyjściowe. Że jeden ja zrobiłem próbę :).
terdon
Och, spoko, potem też się czegoś nauczyłem :)
slhck
Brzmi dobrze jak dla mnie. Wielkie dzięki. Komentarz powyżej: podjąłem tę pierwszą próbę i zadziałała idealnie, tylko właściwą pętlę, której wciąż szukam ... czy możesz mi jeszcze raz pomóc? Z góry bardzo dziękuję!
Marc
@Marc przepraszam, nie jestem pewien, co masz na myśli. Który komentarz? Która pętla Windows czy bash?
terdon
2

Jeśli chcesz, aby każda strona była duplikowana razem (jak w 1,1,2,2, ...) w systemie Linux, ten skrypt to zrobi:

#!/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
źródło
0

Jeśli nie masz zainstalowanego pdftk, ale poppler-utils, użyj tego polecenia:

for f in *
do
    pdfjoin $f $f
done

Jest to szczególnie istotne w Fedorze 21, gdzie pdftk nie jest już dostępny w repozytorium.

Constantin
źródło
0

Proste zastosowanie pdfunite. Można to prawdopodobnie uprościć dzięki większej wiedzy na temat skryptów.

Pamiętaj, że ostatnim argumentem jest plik wynikowy . Jeśli zapomnisz o tym, ten plik zostanie zastąpiony.

pdfunite 1.pdf 2.pdf 3.pdf 4.pdf result.pdf
pdfunite result.pdf result.pdf result.pdf 3-times-result.pdf
keiki
źródło
0

W przypadku powielania stron w czterostronicowym pliku pdf (1,1,2,2,3,3,4,4) w systemie Linux z zainstalowanym pdftk ten wpis działał dla mnie w skrypcie powłoki C:

pdftk output.pdf cat 1 1 2 2 3 3 4 4 output out.pdf
Wrotenberry
źródło