Posts Tagged pdftk

pdftk – operacje na plikach PDF

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)

pdftk <wej ściowe pliki PDF>
            cat [<argumenty operacji>]
            output <nazwa pliku wyjściowego>

Aby połączyć pliki PDF i utworzyć z nich plik wynikowy wystarczy wydać taką komendę:

pdftk plik1.pdf plik2.pdf cat output wyjście.pdf

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:

pdftk A=plik1.pdf B=plik2.pdf cat A10-12 B3 A13-18even output wyjście.pdf

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.

Tags: ,

Dodanie możliwości przeszukiwania plików PDF

Zdarza się, że w pliku PDF znajdują się zeskanowane strony, zapisane w formacie JPG. W dokumencie takim nie ma możliwości skorzystania z możliwości jego przeszukania lub indeksowania treści (tak to już bywa z grafiką). W znaczącym stopniu obniża to użyteczność takiego dokumentu. Istnieją jednak aplikacje, które potrafią rozpoznać tekst w takim dokumencie (wykorzystując OCR) oraz dodać przezroczystą warstwę w dokumencie, w której zostanie on umieszczony. Pozwoli to z jednej strony na przeszukanie dokumentu a z drugiej zostanie zachowana jego struktura. Jest to prostsze rozwiązanie niż rozpoznanie całej struktury dokumentu, łącznie z formatowaniem.

Jedną z takich aplikacji jest pdfocr. Automatycznie rozpoznaje tekst znajdujący się w pliku PDF i dodaje go do tego pliku.

Czym jest pdfocr

Aplikacja pdfocr jest skryptem napisanym w Ruby, który łączy kilka aplikacji w celu rozpoznania tekstu w dokumencie PDF.

W poszczególnych krokach aplikacja robi:

  • przy użyciu pdftk dzieli plik PDF na pojedyncze strony
  • przy użyciu pdfimages wyodrębnia dane graficzne
  • rozpoznaje tekst za pomocą aplikacji cuneiform
  • rozpoznany tekst jest dodawany do pliku PDF przy użyciu hocr2pdf
  • łączy wszystkie pliki za pomocą pdftk

Instalacja aplikacji pdfocr

W przypadku Ubuntu należy dodać odpowiednie repozytorium:

sudo add-apt-repository ppa:gezakovacs/pdfocr
sudo aptitude update
sudo aptitude install pdfocr

Po tych krokach aplikacja powinna zostać zainstalowana wraz z koniecznymi zależnościami.

Rozpoznanie teksty w pliku PDF

Rozpoznanie tekstu jest proste:

pdfocr -i plik_wejsciowy.pdf -o plik_wyjsciowy.pdf

Po zakończeniu działania, powinniśmy mieć plik PDF z załączonym rozpoznanym tekstem. Domyślnie używanym językiem użytym do rozpoznania tekstu jest język angielski. Można go zmienić używając przełącznika -l, wartości jakie może on przyjąć są zależne od języków obsługiwanych przez aplikację cuneiform:

$ cuneiform -l
Cuneiform for Linux 0.9.0
Supported languages: eng ger fra rus swe spa ita ruseng ukr srp hrv pol dan por dut cze rum hun bul slo lav lit est tur.

Niestety, przynajmniej w moim przypadku, jakość działania moduły OCR jest ledwie zadowalająca. W kilku dokumentach które sprawdzałem wiele słów nie zostało rozpoznanych poprawnie. Nawet pomimo tego, aplikacja może być przydatna, przynajmniej daje szansę na odszukanie jakieś informacji w tekście.

Źródła

Tags: , , , , , , , ,