Podczas przygotowywania materiałów do prezentacji musiałem dokonać kilu operacji na plikach PDF:
- połączyć kilka plików w jeden
- wyciąć niektóre strony z pliku PDF i także dodać je do dokumentu wynikowego
- narzędzie powinno dać się skonfigurować w całości z linii poleceń (prawdopodobnie będzie potrzeba wykonywania operacji kilkukrotnie)
Kiedyś do takie celu wykorzystywałem Jave i bibliotekę iText Pdf, ale tym razem nie bardzo chciałem tworzyć specjalną aplikację. Ostatnio używałem aplikacji do rozpoznawaniu tekstu w dokumentach PDF (Dodanie możliwości przeszukiwanie plików PDF), gdzie do operacji na dokumentach PDF była używana aplikacja pdftk
. I nie zawiodłem się :).
Aplikacja pdftk
pozwala na manipulację dokumentami PDF, wg dokumentacji:
- łączenie dokumentów PDF
- wyodrębniać poszczególne strony
- obracać strony
- odszyfrowywać w razie potrzeby pliki (wymagana jest podanie hasła)
- szyfrowanie tworzonego dokumentu
- wypełnianie formularzy PDF
- tworzenie znaku wodnego
- pobierania oraz aktualizacja metadanych
- dodawania załączników do stron lub całych dokumentów
- pobierać załączników
- naprawiać zepsute dokumenty
Na moje potrzeby wystarczyły dwie pierwsze możliwości i je przedstawię poniżej.
Składania polecenia pdfk
na potrzeby tego artykułu (składania jest bardziej skomplikowana, proszę zajrzeć na stronę pomocy polecenia)
cat [<argumenty operacji>]
output <nazwa pliku wyjściowego>
Aby połączyć pliki PDF i utworzyć z nich plik wynikowy wystarczy wydać taką komendę:
Dwa pliki PDF zostaną połączone i zostanie utworzony plik wynikowy o nazwie wyjście.pdf
.
Istnieje także możliwość zdefiniowania, jakie strony z którego pliku mają zostać pobrane do pliku wyjściowego. Można także na tych stronach dokonać kilku transformacji. Wymaga to jednak trochę innego wywołania komendy:
Jak widać, każda nazwa pliku wejściowego została poprzedzona wielką literą. Jest to tak zwany uchwyt, poprzez który można się następnie odwoływać do plików (nie tylko przy łączniu ich, ale np. także przy podawaniu hasła w celu odszyfrowania danego pliku). Uchwyt musi być pojedynczą wielką literą.
Powyższe polecenie pobierze najpierw z pliku plik1.pdf
strony od 10 do 12, następnie doda do tego stronę nr 3 z pliku plik2.pdf
i na końcu wstawi nieparzyste strony od 13 do 18 z pliku plik1.pdf
.
Poniżej jeszcze znajduje się przykładowy skrypt, który wykonuje takie akcje:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #!/bin/bash #set -x echo "Konfiguracja" PDFTK=`which pdftk` SOURCE_DIR="./PDF/" EXTRA_PDF="extra.pdf" ROZ_00=`ls $SOURCE_DIR/00*.pdf` ROZ_01=`ls $SOURCE_DIR/01*.pdf` OUTPUT_PDF="konspekt.pdf" # połączenie konspektu w całość PDF_INPUT_LIST="A=${ROZ_00} B=${ROZ_01} J=${EXTRA_PDF}" #echo $PDF_INPUT_LIST CAT="A B J51-70 J110-116" echo "Tworzenie dokument PDF" $PDFTK $PDF_INPUT_LIST cat $CAT output "$OUTPUT_PDF" echo "Utworzono konspetk: $OUTPUT_PDF" |
O wiele więcej informacji można znaleźć w dokumentacji do aplikacji, na jej stronach MAN.