Optymalizacja struktury czy utworzenie od nowa: które narzędzie wybrać?
Oba programy działają w zasadniczo odmienny sposób. Polecenie QPDF na tej stronie pozostawia zawartość stron bez zmian i jedynie zapisuje ponownie obiekty pliku w możliwie zwartej postaci. W tym celu na przykład grupuje obiekty w strumieniach obiektów i ponownie kompresuje dane Flate. Nie zmniejsza przy tym rozdzielczości obrazów ani nie koduje ich ponownie jako JPEG. Opcjonalna optymalizacja obrazów w QPDF to osobny, stratny etap, który krótko objaśnia następna sekcja. Poszczególne opcje opisuje dokumentacja QPDF.
Ghostscript działa inaczej. Korzystając z urządzenia wyjściowego pdfwrite, odczytuje PDF i tworzy nowy plik na podstawie instrukcji rysowania każdej strony. Tekst i grafika wektorowa z reguły pozostają tekstem i grafiką wektorową, więc strony nie są po prostu zamieniane w obrazy. Zależnie od ustawień Ghostscript może jednak przeliczać obrazy. Zmienić może się też wszystko, co nie należy do widocznego obrazu strony. Wyjaśnia to podręcznik Ghostscript dotyczący pdfwrite.
Niektóre programy oferują jeszcze trzecią metodę: zapisują każdą stronę od nowa jako obraz. Z reguły prowadzi to do utraty natywnego tekstu, wyszukiwania i elementów interaktywnych. Żadne z dwóch poleceń na tej stronie nie działa w ten sposób.
Żadna z tych metod nie gwarantuje mniejszego pliku. Ogólna zasada jest taka: jeśli PDF składa się głównie z tekstu i grafiki wektorowej, zacznij od QPDF. Dotyczy to również sytuacji, gdy chcesz możliwie najmniej zmieniać obrazy, linki lub formularze. Ghostscript można rozważyć, gdy za duży rozmiar odpowiadają duże zdjęcia lub skany i możesz w zamian zrezygnować z części jakości obrazów. Co dokładnie oznaczają kompresja bezstratna i stratna, wyjaśnia poradnik Kompresowanie PDF bez utraty jakości.
Programy z interfejsem graficznym korzystają z tych samych metod. PDFsam według własnych informacji rozróżnia samą optymalizację struktury w wersji Basic oraz osobną kompresję obrazów w wersjach Visual i Enhanced. Starsze instrukcje dotyczące skryptów do menedżerów plików lub interfejsów uruchamiających Ghostscript w tle częściowo odnoszą się do wcześniejszych wersji Ubuntu. Dlatego nie stosuj opisanych w nich kroków instalacji bez sprawdzenia. PDF24 Creator jest według producenta dostępny tylko dla Windows; producent nie oferuje wersji dla systemu Linux.
Jeśli nie chcesz niczego instalować, możesz użyć kompresora PDF w przeglądarce. Przetwarza plik na twoim urządzeniu bez przesyłania go na serwer. Nie przetestowaliśmy go jednak osobno w przeglądarkach w systemie Linux. Różnicę między przetwarzaniem lokalnym w przeglądarce a rzeczywistą pracą offline wyjaśnia poradnik Kompresuj PDF bez przesyłania pliku.
Sprawdź wersję i zapisuj do osobnego pliku wynikowego
Przegląd poleceń
Wybierz jedno z sześciu poleceń z tego poradnika. Zobaczysz polecenie w niezmienionej postaci i dowiesz się, co oznacza każda jego część.
Polecenia pochodzą z oficjalnych podręczników QPDF i Ghostscript. Nie uruchamialiśmy ich samodzielnie w Ubuntu ani w żadnej innej dystrybucji. Wersje zainstalowane w Twoim systemie mogą różnić się od wersji opisanych w dokumentacji internetowej.
Ta strona nie wykonuje żadnych poleceń ani nie wyświetla danych wyjściowych terminala. Komunikaty Twojego systemu zobaczysz dopiero po samodzielnym uruchomieniu polecenia.
Wyświetl wersję QPDF
Wyświetla zainstalowaną wersję QPDF. Sprawdź ją przed użyciem pozostałych poleceń.
qpdf --versionMożesz też zaznaczyć i skopiować polecenie bezpośrednio w polu kodu.
Części polecenia
qpdfProgram- Wywołuje program wiersza poleceń QPDF.
--versionWyświetl wersję- Wyświetla wersję QPDF używaną w Twoim systemie.
Jeśli powłoka zgłasza, że nie znaleziono polecenia, QPDF prawdopodobnie nie jest zainstalowany. Nazwa pakietu i sposób instalacji zależą od Twojej dystrybucji.
Miejsce w poradnikuWyświetl wersję Ghostscript i urządzenia wyjściowe
Wyświetla wersję Ghostscript i dostępne urządzenia wyjściowe.
gs -hMożesz też zaznaczyć i skopiować polecenie bezpośrednio w polu kodu.
Części polecenia
gsProgram- Wywołuje Ghostscript. W systemie Unix program nosi nazwę gs.
-hPomoc- Wyświetla wersję, opcje, formaty, dostępne urządzenia wyjściowe i ścieżkę wyszukiwania.
Jeśli powłoka zgłasza, że nie znaleziono polecenia, Ghostscript prawdopodobnie nie jest zainstalowany. Zanotuj dystrybucję i wersję, aby móc później prześledzić uzyskane wyniki.
Miejsce w poradnikuZapisz strukturę w bardziej zwartej postaci
Zapisuje obiekty pliku na nowo w możliwie zwartej postaci. Obrazy nie są przy tym skalowane do niższej rozdzielczości ani ponownie kodowane jako JPEG.
qpdf "original.pdf" --object-streams=generate --compress-streams=y --decode-level=generalized --recompress-flate --compression-level=9 "optimiert-qpdf.pdf"Możesz też zaznaczyć i skopiować polecenie bezpośrednio w polu kodu.
Części polecenia
qpdfProgram- Wywołuje program wiersza poleceń QPDF.
"original.pdf"Plik wejściowy- Odczytywany PDF. Wynik trafia do osobnego pliku.
--object-streams=generateUtwórz strumienie obiektów- Grupuje odpowiednie obiekty w strumieniach obiektów i je kompresuje. Plik wyjściowy ma wtedy co najmniej wersję PDF 1.5.
--compress-streams=yKompresuj strumienie- Kompresuje strumienie za pomocą Flate, o ile nie są już skompresowane inną metodą.
--decode-level=generalizedDekoduj za pomocą filtrów ogólnego przeznaczenia- Dekoduje dane przy użyciu obsługiwanych filtrów ogólnego przeznaczenia, takich jak LZW, Flate, ASCII85 i ASCIIHex. Dane JPEG (DCT) nie są przy tym dekodowane.
--recompress-flatePonownie skompresuj Flate- Dekompresuje istniejące strumienie Flate i kompresuje je ponownie. Może to wydłużyć zapis.
--compression-level=9Poziom kompresji- Wybiera dla Flate najwyższy poziom zlib w udokumentowanym zakresie od 1 do 9. Wyższe poziomy wymagają więcej czasu. Ta wartość nie ma związku z jakością JPEG.
"optimiert-qpdf.pdf"Plik wyjściowy- Nazwa nowego pliku. W obu poleceniach sprawdzających jest on plikiem wejściowym.
Dopiero porównanie liczby bajtów pokaże, czy nowy plik jest mniejszy. Osobna nazwa pliku wyjściowego nie chroni przed nadpisaniem istniejącego pliku o tej samej nazwie. Wybierz więc nazwę, która nie jest jeszcze używana. Polecenie nie gwarantuje zachowania ważności podpisu cyfrowego.
Miejsce w poradnikuUtwórz PDF na nowo za pomocą pdfwrite
Ghostscript odczytuje PDF i tworzy nowy plik na podstawie instrukcji rysowania każdej strony, tutaj z ustawieniem /ebook.
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -sOutputFile="optimiert-gs.pdf" "original.pdf"Możesz też zaznaczyć i skopiować polecenie bezpośrednio w polu kodu.
Części polecenia
gsProgram- Wywołuje Ghostscript.
-dSAFERKontrola dostępu- Ogranicza dostęp do plików i urządzeń. Od wersji 9.50 jest to ustawienie domyślne. Nie stanowi ogólnej gwarancji bezpieczeństwa.
-dBATCHZakończ po przetworzeniu- Kończy działanie Ghostscript po przetworzeniu wskazanych plików, zamiast przechodzić do trybu interaktywnego.
-dNOPAUSEBez pauzy- Pomija pytanie i pauzę na końcu każdej strony.
-sDEVICE=pdfwriteUrządzenie wyjściowe- Wybiera pdfwrite, które tworzy nowy PDF. Tekst i grafika wektorowa zazwyczaj zostają zachowane. Wszystko, co nie należy do widocznego obrazu strony, może się zmienić.
-dPDFSETTINGS=/ebookUstawienie wstępne- Ustawia zestaw poszczególnych parametrów ze średnią rozdzielczością obrazów. Nazwa opisuje zastosowanie, a nie poziom jakości ani gwarantowaną oszczędność.
-sOutputFile="optimiert-gs.pdf"Plik wyjściowy- Określa nazwę nowego pliku.
"original.pdf"Plik wejściowy- PDF odczytywany przez Ghostscript.
Szczegóły obrazów i funkcje dokumentu mogą się zmienić, nawet jeśli strony wyglądają tak samo. Określony rozmiar ani jakość nie są gwarantowane. Sprawdź zapisany plik wyjściowy i wybierz dla niego nazwę, która nie jest jeszcze używana.
Miejsce w poradnikuSprawdź strukturę pliku wyjściowego
Sprawdza składnię zapisanego pliku wyjściowego. W przypadku wyniku Ghostscript zastąp nazwę pliku.
qpdf "optimiert-qpdf.pdf" --checkMożesz też zaznaczyć i skopiować polecenie bezpośrednio w polu kodu.
Części polecenia
qpdfProgram- Wywołuje program wiersza poleceń QPDF.
"optimiert-qpdf.pdf"Plik do sprawdzenia- Wcześniej zapisany plik wyjściowy polecenia QPDF.
--checkSprawdź strukturę- Sprawdza strukturę, szyfrowanie, linearyzację i kodowanie strumieni.
Kod wyjścia 0 oznacza sprawdzenie bez błędów, 2 oznacza błędy, a 3 ostrzeżenia. Sprawdzenie dotyczy wyłącznie struktury pliku. Nie pokazuje, czy plik wygląda prawidłowo, czy formularze i linki działają ani czy jest bezpieczny.
Miejsce w poradnikuWyświetl liczbę stron
Wyświetla liczbę stron zapisanego pliku wyjściowego. Uruchom polecenie ponownie z nazwą oryginału i porównaj obie liczby.
qpdf "optimiert-qpdf.pdf" --show-npagesMożesz też zaznaczyć i skopiować polecenie bezpośrednio w polu kodu.
Części polecenia
qpdfProgram- Wywołuje program wiersza poleceń QPDF.
"optimiert-qpdf.pdf"Plik do policzenia stron- Wcześniej zapisany plik wyjściowy polecenia QPDF.
--show-npagesPolicz strony- Wyświetla liczbę stron wskazanego pliku.
Taka sama liczba stron nie oznacza, że treść, obrazy i funkcje pozostały niezmienione. Samodzielnie obejrzyj strony.
Miejsce w poradnikuPrzycisk umieszcza wyświetlane polecenie w schowku wyłącznie po kliknięciu. Nie odczytuje schowka, niczego nie zapisuje ani nie wysyła.
Polecenia na tej stronie pochodzą z oficjalnych podręczników QPDF i Ghostscript. Nie uruchamialiśmy ich samodzielnie w Ubuntu ani innej dystrybucji, więc nie jest to przetestowana instrukcja dla Ubuntu. Najpierw sprawdź, jakie wersje są zainstalowane w twoim systemie. Pakiety w twojej dystrybucji mogą różnić się od wersji opisanej w aktualnej dokumentacji online.
Wyświetl zainstalowane wersje
qpdf --versiongs -hJeśli powłoka zgłasza, że nie znaleziono polecenia, program prawdopodobnie nie jest zainstalowany. Nazwa pakietu i sposób instalacji zależą od dystrybucji. Zapisz dystrybucję i wersje, aby móc później odtworzyć warunki uzyskania wyniku.
Podstawowe zasady dla każdej próby
- Pozostaw oryginał bez zmian. Plik wejściowy i wyjściowy zawsze muszą mieć różne nazwy.
- Każdemu plikowi wynikowemu nadaj nową, jeszcze nieużywaną nazwę, aby nie nadpisać wcześniejszego pliku.
- Każdą kolejną próbę zaczynaj ponownie od oryginału, a nie od wyniku poprzedniego przetwarzania.
- Nie używaj opcji ani skryptów, które bezpośrednio zastępują plik wejściowy.
QPDF: optymalizacja struktury zapisu
qpdf "original.pdf" --object-streams=generate --compress-streams=y --decode-level=generalized --recompress-flate --compression-level=9 "optimiert-qpdf.pdf"Polecenie odczytuje original.pdf i zapisuje nowy plik o nazwie optimiert-qpdf.pdf. Opcje powodują grupowanie obiektów w strumieniach obiektów, kompresowanie strumieni danych i ponowne kompresowanie danych Flate z najwyższym poziomem kompresji. Nie obejmuje to przeliczania obrazów. Strumienie obiektów wymagają PDF 1.5. Jeśli odbiorca wyraźnie wymaga starszej wersji PDF, tego polecenia nie można zastosować bez dodatkowej weryfikacji.
QPDF może dodatkowo optymalizować obrazy i ponownie kodować dane JPEG z wybraną jakością. Opcja jakości JPEG jest dostępna od wersji 12.1. Obie operacje są stratne i mogą dodatkowo pogorszyć jakość już skompresowanych obrazów JPEG. Korzystaj z nich tylko wtedy, gdy później dokładnie sprawdzisz obrazy.
Ghostscript: ponowne zapisanie PDF z użyciem profilu
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -sOutputFile="optimiert-gs.pdf" "original.pdf"-sDEVICE=pdfwrite wybiera zapis do PDF, -sOutputFile określa nazwę nowego pliku, a plik wejściowy znajduje się na końcu. -dBATCH i -dNOPAUSE zapobiegają oczekiwaniu Ghostscript na dane wejściowe. -dSAFER występuje w tej postaci również w przykładach w instrukcji wiersza poleceń Ghostscript. Profil /ebook jest tylko punktem wyjścia, a nie zaleceniem dla każdego pliku.
Jak rozumieć profile Ghostscript
Za pomocą -dPDFSETTINGS wybierasz jednocześnie cały zestaw poszczególnych parametrów. Nazwa profilu opisuje jego przeznaczenie. Nie oznacza ani poziomu jakości, ani określonej oszczędności.
Czy /prepress oznacza więc najlepszą jakość? Nie. Podręcznik wyraźnie zaznacza, że /prepress nie jest ustawieniem najwierniejszym oryginałowi. Bez -dPDFSETTINGS wynik może pozostać bliższy oryginałowi. /prepress nie gwarantuje też najmniejszego pliku.
Wartości docelowe dla /screen i /ebook nie oznaczają, że każdy obraz będzie potem miał dokładnie 72 lub 150 dpi. Obrazy poniżej progu nie mają zmniejszanej rozdzielczości i zachowują dotychczasową. Nie muszą jednak pozostać całkowicie niezmienione, ponieważ pozostałe parametry profilu, na przykład dotyczące kodowania obrazów lub kolorów, nadal mogą je zmieniać. Opcja -r nie zastępuje zmniejszania rozdzielczości obrazów. Steruje jedynie rozdzielczością, gdy Ghostscript musi zastępczo renderować fragmenty, i nie zmniejsza osadzonych obrazów. Według podręcznika często lepiej ustawiać konkretne parametry osobno, zamiast polegać na profilu.
Nie używaj jednego profilu do wszystkich plików. Dokument tekstowy, katalog zdjęć i skan reagują inaczej. W przypadku skanów najlepiej zacząć już na etapie skanowania. Jak to zrobić, wyjaśnia poradnik Zmniejsz zeskanowany PDF.
Sprawdź tekst, linki, formularze i podpisy
To, że PDF po kompresji wygląda tak samo, nie dowodzi zachowania wszystkich zapisanych elementów. Ghostscript tworzy plik od nowa. Zgodnie z objaśnieniem optymalizacji PDF autorstwa Ghostscript identyczny wygląd może kryć zmienione instrukcje i metadane. Również po użyciu QPDF sprawdź funkcje, które są dla ciebie istotne:
- Zaznacz i skopiuj tekst oraz wypróbuj wyszukiwanie.
- Kliknij linki i zakładki.
- Jeśli plik jest formularzem, wypełnij jego pola i zapisz je na próbę.
- Sprawdź informacje takie jak tytuł lub autor, jeśli odbiorca z nich korzysta.
- Jeśli wymagany jest określony standard, na przykład PDF/A, sprawdź zgodność za pomocą przeznaczonego do tego narzędzia. Żadne z podanych tutaj poleceń nie gwarantuje zachowania tego statusu.
Pliki PDF podpisane cyfrowo
Żadne z tych dwóch poleceń nie może zagwarantować, że podpis cyfrowy pozostanie ważny po ponownym zapisaniu pliku. Kompresowanie nie jest więc sposobem na zmniejszenie podpisanego PDF. Zachowaj podpisany oryginał bez zmian. Jeśli dokument podpisała inna osoba i potrzebujesz mniejszej wersji, uzyskaj niepodpisany plik źródłowy albo porozmawiaj z osobą podpisującą. Ponowne podpisanie uzgodnij z wystawcą lub odbiorcą. Więcej informacji zawiera opis ograniczeń podpisanych plików PDF autorstwa Adobe. Zeskanowany, widoczny podpis nie jest podpisem cyfrowym.
Usuwanie ochrony hasłem lub ograniczeń edycji nie jest częścią zmniejszania pliku i nie znajdziesz tu służących do tego poleceń. Zamiast tego poproś nadawcę o odpowiednią wersję. Więcej o postępowaniu z takimi dokumentami znajdziesz w poradniku Podpisy i formularze — wyjaśnienie.
Porównaj rozmiar wyniku i zachowaj oryginał
To, że polecenie wykonuje się bez komunikatu o błędzie, nie mówi jeszcze nic o wyniku. Porównaj dokładny rozmiar oryginału i pliku wynikowego w bajtach, a nie tylko zaokrąglone wartości w MB. Procentową oszczędność obliczysz w kalkulatorze stopnia kompresji.
Sprawdź składnię i liczbę stron
qpdf "optimiert-qpdf.pdf" --checkQPDF sygnalizuje kodem wyjścia 0 kontrolę bez błędów, kodem 2 błędy, a kodem 3 ostrzeżenia. Kontrola dotyczy wyłącznie budowy pliku. Nie informuje, czy formularze, linki i obrazy nadal działają i wyglądają jak wcześniej.
qpdf "optimiert-qpdf.pdf" --show-npagesSprawdź w przeglądarce PDF
- Otwórz zapisany plik wynikowy ponownie z jego folderu.
- Przejrzyj wszystkie strony i porównaj ich format oraz orientację z oryginałem.
- Przyjrzyj się obrazom, drobnemu tekstowi i cienkim liniom przy dużym powiększeniu.
- Przetestuj wyszukiwanie, linki i formularze zgodnie z opisem w poprzedniej sekcji.
- Jeśli to możliwe, otwórz plik również w drugiej przeglądarce PDF.
Większy, bez zmian czy pusty?
Ghostscript może też powiększyć PDF. Plik jest tworzony od nowa i inaczej kodowany, a nowe instrukcje czasem zajmują więcej miejsca niż stare. Również w QPDF niewiele da się zyskać, jeśli plik jest już zapisany w zwartej postaci.
Większy lub ledwie mniejszy wynik nadal może być prawidłowy. Potwierdzą to dopiero takie same kontrole zapisanego pliku jak w przypadku każdego innego wyniku, ponieważ sam rozmiar nie mówi nic o błędach lub utraconych funkcjach. Na koniec zachowaj lepiej odpowiadający potrzebom plik — często jest nim po prostu oryginał. Inaczej jest z wynikiem pustym, nieczytelnym lub uszkodzonym. To nieudana próba, a nie wyjątkowo silna kompresja. Nie wysyłaj takiego pliku, przeczytaj komunikaty w terminalu i spróbuj ponownie, korzystając z oryginału i nowej nazwy pliku wynikowego.
Jeśli PDF nadal przekracza limit odbiorcy, kolejne kroki znajdziesz w poradniku Rozmiar PDF się nie zmniejsza. W każdym przypadku zachowaj oryginał, dopóki nowa wersja nie dotrze i nie zostanie zaakceptowana.