Batch zmienia rozmiar i kompresuje pliki PDF

15

Potrzebuję sposobu na zmniejszenie rozmiaru i kompresję partii plików PDF. Wolałbym to zrobić w systemie Windows, ale Linux byłby w porządku, gdyby oznaczało to płynniejszy przepływ pracy.

Wiem, że istnieją programy, takie jak NitroPDF i Acrobat, które pozwalają ci to osiągnąć, ale obawiam się, że trzeba by to zrobić w zależności od pliku. Te programy również nie są tanie i wolałbym ich nie kupować, aby móc korzystać z jednej lub dwóch funkcji.

Informacje podstawowe: Używam CamScanner do digitalizacji pokwitowań i faktur na potrzeby wprowadzania na konta (FreeAgent). Pliki PDF CamScanner mają format A4, a wielostronicowe często przekraczają limit 2 MB załącznika.

Stan
źródło

Odpowiedzi:

15

Sugeruję tutaj narzędzie wiersza polecenia, które można łatwo połączyć z pętlami we wbudowanych językach skryptowych w systemach Windows, Linux, OS X itp.


ImageMagick obsługuje pliki PDF i ma resizeopcję ze swoim narzędziem do konwersji . Nigdy nie korzystałem z niego osobiście, ale możesz spróbować się tym pobawić.

Można również skorzystać z compressopcji (jest to przykład tutaj ):

Obróć plik PDF

$ convert -rotate 270 -density 300x300 -compress lzw in.pdf out.pdf

Zakłada to plik PDF z zabezpieczeniem TIFF. Parametr gęstości jest ważny, ponieważ w przeciwnym razie ImageMagick obniża próbkowanie obrazu (z jakiegoś powodu). Dodanie opcji kompresji pomaga zmniejszyć ogólny rozmiar pliku PDF bez utraty jakości.

W przypadku wielostronicowych plików PDF możesz użyć pdftk, a następnie użyć programu mogrifyImageMagick do konwersji każdej strony w miejscu:

$ pdftk in.pdf burst
$ mogrify -rotate 270 -density 300x300 -compress lzw pg_*.pdf
$ pdftk pg*.pdf cat output out.pdf
$ rm pg*.pdf


Aby przekonwertować pliki PDF za pomocą ImageMagick, musisz mieć zainstalowany GhostScript .


ImageMagick może konwertować wielostronicowe pliki PDF. Podczas mogrifykonwersji na miejsce, zalecamy korzystanie z niego, convertaby zachować oryginały na wypadek wypadku.


Przeprowadziłem kilka testów na dostarczonym przez Ciebie przykładowym pliku PDF. Działa to dla mnie całkiem dobrze:

convert -density 200 -compress jpeg -quality 20 test.pdf test2.pdf

Domyślnie gęstość to 72DPI. Ustawiając go wyżej, możemy uzyskać wyższą rozdzielczość, a zatem akceptowalną jakość. Wyglądało to dobrze 150i było trochę mniejsze, ale jeśli chcesz zaspokoić zakres plików PDF, 200powinno działać.

Kompresja JPEG powinna albo automatycznie wybrać poziom, albo domyślnie, 92w skali 1do, 100z 100najlepszą. Ustawiając go na 20, wygląda prawie tak samo dobrze jak oryginał (trochę zamazany i mały tekst na dole jest trochę trudny do odczytania, ale i tak był pierwotnie).

Te opcje przynieść 1.7MB próbkę do 0.5MB , utrzymując go odczytać. Możesz trochę poeksperymentować.

Jeśli chcesz mieć mniejszy rozmiar (zarówno pliku, jak i obrazu / PDF), możesz użyć -resize #%np -resize 75%. Jednak w twoim przykładowym pliku PDF mały wydruk na dole jest prawie nieczytelny.

Jeśli nadal brakuje ci miejsca, szczególnie w przypadku wielostronicowych plików PDF, możesz dodatkowo skompresować, dodając pliki do archiwum ZIP (lub innego). Spowodowało to zmniejszenie rozmiaru pliku do 0,43 MB w tym testowym pliku PDF (obniżenie jakości kompresji JPEG ma znacznie bardziej drastyczny efekt). Możesz również podzielić plik PDF na strony pdftk, jak sugerował @glallen w jego edycji, lub podzielić archiwum i połączyć je ponownie na drugim końcu.

2 MB to również niewielki limit załączników, możesz zajrzeć do innych dostawców poczty e-mail. Z pamięci GMail zapewnia ponad 10 MB na e-mail.

Te i wiele innych opcji są w pełni udokumentowane na ich stronie internetowej .

Kok
źródło
To wydaje się być doskonałym podejściem, ale nie sądzę, że moje pliki PDF są wspierane przez TIFF. CamScanner najpierw robi zdjęcia JPEG, a następnie konwertuje je do formatu PDF w celu wyeksportowania. Przetwarzanie tych plików PDF wydaje się zmniejszać je, jak wskazuje post na blogu, bez względu na kompresję. Konwersja z formatu PDF na TIFF, a następnie z powrotem na format PDF, wydaje się zachowywać jakość, ale zwiększa rozmiar pliku i zmienia rozmiar i gęstość strony.
Stan
@paganompu Jak rozumiem, chcesz zmniejszyć rozmiar pliku. Co powiesz na kompresję jako JPEG? Jak się resizeokazało? Czy masz (niewrażliwy) przykładowy plik, z którym moglibyśmy grać? Czy pobieranie próbek w dół jest dopuszczalne?
Bob
JPEG byłby w porządku, ale muszę przesłać wielostronicowe dokumenty i mogę mieć tylko jeden załącznik na konto. Próbkowanie w dół jest poważne: ten dokument testowy jest nieczytelny po konwersji z kompresją bezstratną.
Stan
@paganompu Sam trochę eksperymentowałem i zaktualizowałem odpowiedź działającym poleceniem. Zobacz tutaj test swojego pliku.
Bob
To polecenie działa jak urok. Wygląda na to, że moje „próbkowanie w dół” było spowodowane pominięciem density... Przysięgam, że mogę czytać i postępować zgodnie z instrukcjami! Trochę zawstydzony teraz: S Dziękuję za poświęcenie czasu na pomoc Bob
Stan
19

Z convertImageMagick stworzy zrasteryzowany plik PDF, a wiele osób byłoby zainteresowanych utrzymaniem nietkniętej grafiki wektorowej i tekstu, aby skompresowane były tylko osadzone obrazy. Tak więc dobrą alternatywą dla kompresji jest użycie przykładu użycia gspakietu ghostscript:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf in.pdf

w powyższym parametrze polecenia: -dPDFSETTINGS=/ebookjest ważny. Może mieć 3 wartości:

-dPDFSETTINGS=/screen   (screen-view-only quality, 72 dpi images)
-dPDFSETTINGS=/ebook    (low quality, 150 dpi images)
-dPDFSETTINGS=/printer  (high quality, 300 dpi images)
-dPDFSETTINGS=/prepress (high quality, color preserving, 300 dpi imgs)
-dPDFSETTINGS=/default  (almost identical to /screen)
Neutrino
źródło