Posts Tagged pdf

Konwersja strony HTML do pliku PDF przy użyciu aplikacji wkhtmltopdf

Potrzebowałem aplikacji, która pozwoli mi na konwersję strony HTML na plik w formacie PDF. Wymagania były następujące:

  • prosta obsługa, najlepiej powinna ograniczyć się do podania źródła strony i nazwy pliku do zapisania
  • aplikacja powinna samodzielnie pobrać stronę (czyli odpada konieczność wcześniejszego jej ściągania na dysk)
  • w dokumencie powinny znaleźć się powiązanie grafiki
  • konieczność obsługi UTF-8 (polskie znaczki)
  • możliwość wywołania aplikacji przy użyciu linii poleceń

Aplikacją, która spełniła praktycznie wszystkie te wymagania jest wkhtmltopdf. Pozwala ona na konwersję strony HTML do pliku PDF. Wykorzystuje do tego silnik WebKit dostarczany z QT 4.4. Czyli nie dość że robi co do niej należy, to jeszcze korzysta z silnika wykorzystywanego przez przeglądarki internetowe (np. Safari., Chrome czy też Konqueror).

W środowisku Ubuntu instalacja aplikacji sprowadza się do wydania polecenia:

sudo aptitude install wkhtmltopdf

Użycie aplikacji jest też bardzo proste:

wkhtmltopdf http://blog.stelmisoft.pl/2010/konwersja-strony-html-do-pliku-pdf-przy-uzyciu-aplikacji-wkhtmltopdf strona.pdf

Powyższe polecenie zapisze stronę (tę którą właśnie czytasz) do pliku PDF.

Wersja aplikacji która przychodzi z Ubunut wymaga uruchomienia w środowisku X11. Aby pozbyć się tej zależności, należy poprać wersję statycznie skompilowaną ze strony projektu. Udostępnia ona także kilka innych możliwości, których nie znajdziemy w wersji dostarczanej w dystrybucji. Jednak nawet to wystarcza do zapisania strony w formacie PDF.

Źródła

Tags: , , , ,

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: , , , , , , , ,