Jak mogę całkowicie spłaszczyć plik PDF w systemie Mac OS w wierszu polecenia?

16

Używam Mac OS X Snow Leopard. Mam plik PDF z polami formularza, adnotacjami i pieczęciami. Chciałbym zamrozić (lub „spłaszczyć”) ten plik PDF, aby pola formularza nie mogły zostać zmienione, a adnotacje / znaczki nie były już edytowalne. Ponieważ faktycznie mam wiele z tych plików PDF, chcę to zrobić automatycznie w wierszu polecenia.

Niektóre rzeczy, które próbowałem / rozważałem, z ich stopniem sukcesu:

  • Otwórz w Podglądzie i Drukuj do pliku. To tworzy całkowicie płaski plik PDF bez zmiany rozmiaru pliku. Jedynym sposobem na automatyzację wydaje się napisanie nieprecyzyjnego AppleScript opartego na interfejsie użytkownika , którego starałem się unikać.
  • Otwórz w Acrobat Pro i użyj funkcji JavaScript, aby spłaszczyć . Ponownie nie wiem, jak zautomatyzować to w wierszu polecenia.
  • Użyj pdftkz flattenopcją. Ale to tylko spłaszcza formularze, a nie znaczki i inne adnotacje.
  • Użyj, cupsfilteraby utworzyć plik PDF z wielu formatów plików. W pdftkten sposób spłaszczono tylko pola formularza.
  • Użyj, cups-pdfaby podłączyć się do serwera wydruku komputera Mac i zapisać plik PDF zamiast wydrukować. Użyłem wersji DarwinPorts . Wynikowy plik jest płaski, ale ogromny. Próbowałem tego na pliku 8 MB; spłaszczony plik PDF miał 358 MB! Być może można to połączyć z wywołaniem ghostscript, jak w Ubuntu Wskazówka: Jak zmniejszyć rozmiar pliku PDF z wiersza poleceń .

Wszelkie inne sugestie będą mile widziane.

Matthew Leingang
źródło
1
Automator.app ma wbudowane opcje przetwarzania pdf. Być może jedna z nich może pomóc bezpośrednio lub w połączeniu z jedną z powyższych akcji.
Kassym Dorsel,
Czy możesz podać przykładowy dokument PDF zawierający te elementy?
Daniel Beck
Chyba tak. W tej chwili wszystkie moje próbki to quizy dla studentów, więc muszę coś wykpić.
Matthew Leingang

Odpowiedzi:

11

Spróbuj użyć pdf2psi ps2pdfpo kolei. To trochę kłopotliwe, ale pomogło mi zredukować mój dokument 30 MB do 17 MB. Nie tak bardzo, jak bym chciał, ale i tak lepiej. Ten pomysł dostałem od znajomego, który użył tej metody, aby pozbyć się uprawnień do hasła na pdf.

pdf2ps your_pdf_file.pdf your_pdf_file.ps
ps2pdf your_pdf_file.ps your_pdf_file_from_ps.pdf

Mam nadzieję, że to pomaga!

Olga Botvinnik
źródło
3
GhostScript FTW! Dostałem go do jednej liniowej za pomocą rury: pdf2ps file.pdf - | ps2pdf - file_flat.pdf. Plik zmienił się z 300 KB na 500 KB, co jest dużym procentowym wzrostem, ale nic podobnego do wzrostu o 4400% cups-pdfuzyskanego metodą.
Matthew Leingang
Właściwie to miałem więcej szczęścia pdf2ps -q -sOutputFile=- file.pdf | ps2pdf - file_flat.pdf.
Matthew Leingang
4
Stwierdzając, że na Mac można zainstalować Ghostscript aby powyższe polecenia dostępne poprzez homebrew z brew install ghostscript.
Nick
5

Właśnie tego ostatnio używałem. Myślę, że funkcjonalnie robi to samo pdf2ps file.pdf - | ps2pdf - file_flat.pdf, ale wydawało mi się, że działa lepiej.

gs -sDEVICE=pdfwrite -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -sOutputFile=<newfile> <oldfile>
Matthew Leingang
źródło
Rozwiązania ps2pdf zawiodły dla mnie. To działało, najwyraźniej ponownie indeksując czcionki w pliku PDF.
ℝaphink,
Żadne z tych poleceń nie jest spłaszczone. Możesz skopiować leżące poniżej warstwy za pomocą podglądu, a oryginalna zawartość będzie obecna.
Alain O'Dea,
1

Może to być opcjonalne, ale czy zastanawiałeś się nad łańcuchem kubków-pdf za pomocą pdftk lub pucharów? Jak już wspomniałeś, cups-pdf wygeneruje płaski plik pdf, a następnie przekaże go przez pdftk lub cupsfilter, aby uzyskać odpowiedni rozmiar?

Alternatywnie spójrz na /System/Library/Printers/Libraries/convert powinieneś być w stanie zrobić coś takiego

/System/Library/Printers/Libraries/convert -f input_file.pdf -o output_file.pdf -j "application/pdf"
Mxx
źródło
Mój Mac nie ma /System/Library/Printers/Libraries/convert. Próbowałem cupsfilter. Podczas konwersji z pliku PDF na plik PDF nie wprowadzono żadnych zmian. Adnotacje zostały utracone podczas konwersji z formatu PDF na PS, a następnie na PDF.
Matthew Leingang
1

OSTRZEŻENIE: gs i pdf2ps | ps2pdf NIE spłaszczaj plików PDF!

Użycie gs lub pdf2ps, a następnie ps2pdf da wielowarstwowy plik PDF z zawartością pod adnotacjami w oryginalnej formie . Możesz sprawdzić tę lukę w Podglądzie, używając Wybierz wszystko, a następnie Kopiuj, a następnie Wklej do okna TextEdit (w trybie tekstu sformatowanego). Na przykład zobaczysz tekst lub grafikę pod adnotacjami redakcji. Jest to oczywiście bardzo złe, jeśli prawnie potrzebujesz, aby ta zawartość zniknęła z wyników.

Działające rozwiązanie

ImageMagick może tworzyć konfigurowalny, wielostronicowy, jednowarstwowy spłaszczony plik PDF z rastrami każdej strony za pomocą następującego polecenia:

convert -density 150 document_original.pdf document_flat.pdf

To polecenie rasteryzuje document_original.pdf, tworząc pikselowy obraz każdej strony, przy 150 DPI, i wyświetla wynik w postaci document_flat.pdf.

Uwaga na temat jakości obrazu

Ze względu na rasteryzację tworzy nieskalowalny (powiększenie, a tekst lub oryginalne obrazy wektorowe zostają pikselowane) w formacie PDF. Prawdopodobnie będzie miał większy rozmiar pliku, chyba że oryginał ma bardzo złożoną zawartość wektorową, taką jak wykresy rozproszenia o milionach punktów.

Zmieniając gęstość , możesz handlować większymi rozmiarami plików w celu uzyskania wyższej rozdzielczości.

Cały tekst zostanie przekonwertowany na nieprzetworzone piksele na każdym obrazie strony. Najbardziej ucierpiały diagramy tekstowe i wektorowe, więc eksperymentuj z DPI, aż uzyskasz użyteczne pliki wyjściowe.

Alain O'Dea
źródło
1
Dziękujemy za udzielenie odpowiedzi. 5 lat temu rozwiązanie, które napisałem, działało dla mnie. Ale spróbuję odpowiedzieć następnym razem, gdy będę musiał to zrobić (właściwie bardzo szybko).
Matthew Leingang,
To ma sens. Wyobrażam sobie, że zachowanie Ghostscript zmieniło się w odniesieniu do spłaszczania adnotacji. Próbowałem dodać opcję -PreserveAnnots = false i nadal nie działało. Pod maską przekonwertuj za pomocą Ghostscript do przetwarzania plików PDF. Chciałbym coś, co robi to, co robi Acrobat: zachowuje adnotacje, usuwa zawartość za nimi i zachowuje odkryte obrazy wektorowe. Dokument Document Cloud z nowym programem Acrobat naprawdę denerwuje mnie, gdy używam go do poufnych danych.
Alain O'Dea,
0

Applescript jest prawdopodobnie najlepszym / najszybszym sposobem na przejście do wiersza poleceń. Po uruchomieniu możesz zapisać go jako aplikację i utworzyć alias w powłoce poleceń, aby go uruchomić. Następnie wystarczy wpisać swój alias w wierszu polecenia.

JRobert
źródło
Ale jaki jest najłatwiejszy sposób spłaszczenia pliku PDF w AppleScript? Wolę nie pisać skryptów interfejsu użytkownika, aby naśladować drukowanie do pliku. To wydaje się niechlujne i powolne.
Matthew Leingang