Panopticon

Strona Domowa Krzysztofa Małysiaka

Get Adobe Flash player

Wsadowa konwersja pdfów do jpg

 

Poniżej taka mała ciekawostka. Zadanie - przekonweruj 229 pdfów siedzących w 33 folderach i podfolderach do jpg. Rozwiązanie - jedna komenda w cygwinie, parzenie herbaty i oczekiwanie na wynik. Pomysł niestety nie mój (znalazłem gdzieś w sieci) ale zostawiam "pro memoriam". Potrzeba tylko Cygwina, ImageMagicka i GhostScripta (wszystkie darmowe :). A oto i linijka kodu:

 

find /cygdrive/c/new-jpgs -name "*.pdf" -exec mogrify -density 200 -format jpg {} \

 

Cały wic polega na opcji -exec polecenia find, która woła mogrify na każdym znalezionym pliku z rozszerzeniem .pdf

Image-Magick - zmiana formatu PDF na a4

 

Gdy PDF źródłowy to skan pisma ręcznego o dowolnym rozmiarze stron konwersja na wygodny w użyciu A4 może być wykonana przy użyciu ImageMagick, z zainstalowanym Ghost-Scriptem. Polecenie wygląda następująco:

 

convert -verbose input.pdf -colors 16 -depth 2 -density 60 -quality 40 -trim -compress jpeg -page A4 out.pdf

 

Opcja

 

-verbose

 

pokazuje jak Imagemagick dokonuje konwersji. Pozostałe opcje uruchamiają kompresję i przy zachowaniu akceptowalnej jakości minimalizują rozmiar pliku.

Wsadowa, rekursywna konwersja plików office do pdf.

 

Zadania z pozoru proste - mamy drzewo katalogów (sięgające na kilka poziomów "w głąb"), w których siedzą setki plików office. xls, xlsx, xlsm, doc, docx, docm. Chcemy przekonwertować je wszystkie do formatu pdf. Będąc w posiadaniu, LibreOffice, skrypciku unoconv do pobrania stąd  (lub w przypadku Debiana z repozytorium) i używając polecenia find można konwersję danego typu zamknąć w jednej linijce przy użyciu fantastycznej opcji polecenia find - opcji exec.

A zatem, dla np. plików xls nasz one-liner wygląda tak:

 

find /sciezka/ -name "*.xls" -exec unoconv -f pdf {}+


Pułapka w która można wpaść pojawia się wtedy, gdy w folderze mamy pliki o tych samych nazwach lecz różnych rozszerzeniach, np.

 

foo.xlsx

foo.xlsm

 

Używając wtedy poleceń

 

find /sciezka/ -name "*.xls" -exec unoconv -f pdf {}+
find /sciezka/ -name "*.xlm" -exec unoconv -f pdf {}+

 

Dostaniemy zawartość folderu z jednym plikiem pdf

 

foo.xlsx

foo.xlsm

foo.pdf

 

pochodzącym z ostatniej konwersji. Lekarstwem na to jest kopiowanie całej struktury prostym poleceniem cp i użycie na kopii następującej komendy

 

find /sciezka/ ! -name "*.pdf" -type f -delete

 

Użycie ! przed -name oznacza negację - find usunie więc wszystkie pliki, które nie są pdfami. Postępując w ten sposób po każdym użyciu unoconv, dostaniemy kolekcję plików pdf, które łatwo i czytelnie można przeszukiwać poleceniem "Szukaj" (CTRL+SHIFT+F) Acrobat Readera.