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.


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!


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>

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"

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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.