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ąć?


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

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)
    

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}

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.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.