Czy istnieje sposób spłaszczenia obrazu .pdf z wiersza poleceń?

19

W GIMP mogę zaimportować plik .pdf i użyć interfejsu GUI, aby go spłaszczyć (jeśli został utworzony z wieloma warstwami), wybierając opcję „Spłaszcz obraz” z menu rozwijanego „Obraz”. Następnie mogę wyeksportować plik .pdf z nową nazwą pliku.

Chciałbym to zautomatyzować. Czy można to zrobić za pomocą terminala?

użytkownik_ogólny
źródło
1
zainstaluj imagemagick i przeczytaj man mogrify-im6, montage-im6, display-im6, stream-im6, identim-im6, import-im6, conjure-im6, composite-im6, convert-im6, animate-im6 i Compare-im6.
PersianGulf,

Odpowiedzi:

25

Znalazłem te 2 metody przez Google, w tym wątku zatytułowanym: Re: Spłaszczanie plików PDF w wierszu polecenia systemu UNIX .

Metoda nr 1 - użycie konwersji Imagemagick:
$ convert orig.pdf flattened.pdf 

UWAGA: Przy takim podejściu jakość jest podobna.

Metoda nr 2 - Korzystanie z pdf2ps -> ps2pdf:
$ pdf2ps orig.pdf - | ps2pdf - flattened.pdf 

UWAGA: Zgłoszono, że ta metoda pozwala zachować jakość obrazu.

slm
źródło
1
Z drugiej strony lepsza jakość niż GIMP - dzięki!
generic_user
@ACD - dobrze wiedzieć. Cieszę się, że to rozwiązało twoje pytanie.
slm
2
Metoda 1 wygenerowała bardzo niewyraźny obraz, podczas gdy metoda 2 działała idealnie.
Severyn Kozak,
1
Niestety metoda nr 2 nie rasteryzuje obrazu, więc jeśli próbujesz zablokować wrażliwe części, użytkownik nadal może otworzyć dokument i usunąć warstwy (za pomocą czegoś takiego jak Inkscape). Możesz jednak zmodyfikować rozdzielczość metody nr 1: $ convert -density 150 {original,flattened}.pdf Jeśli chcesz zachować miejsce na dysku, możesz użyć -type Grayscalelub -monochromepodobnych rzeczy.
eacousineau,
1
Obie metody zrasteryzują pdf, chociaż metoda 2 robi to w znacznie wyższej rozdzielczości. Żadna z tych metod nie jest więc satysfakcjonująca.
Ant
18

Ghostscript (GS) pracował lepiej niż pdf2psi convertdla mnie. Jakość prawie nie uległa pogorszeniu, a rozmiar pliku jest niewielki.

gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite \
-sColorConversionStrategy=/LeaveColorUnchanged  \
-dAutoFilterColorImages=true \
-dAutoFilterGrayImages=true \
-dDownsampleMonoImages=true \
-dDownsampleGrayImages=true \
-dDownsampleColorImages=true \
-sOutputFile=document_flat.pdf document_original.pdf

Znaleziono tutaj: http://zeroset.mnim.org/2015/01/07/flatten-pdfs-with-ghostscript/

Stan Bondi
źródło
Ta metoda działa świetnie, plik pdf nie jest rasteryzowany, a tekst jest zachowywany jako tekst
Ant
2
Próbowałem użyć tego do usunięcia warstwy przezroczystości poprzez spłaszczenie, ale to nie działało dla mnie.
mikemtnbikes
Zmieniło to czcionkę, ale poza tym znacznie lepszą rozdzielczość niż inne proponowane metody.
ste
1

Mimo że konwersja zachowa ten sam rozmiar pliku, okazało się, że jest powolny.

Metoda ps2pdf pdf2ps jest szybsza, ale zauważyłem, że zwiększa rozmiar pliku.

pdftk jest fajny, ponieważ jest nie tylko szybki, ale zachowuje podobny rozmiar pliku.

To jest to, czego używam do masowego spłaszczenia katalogu.

    function pdfflatten () {
        pdftk "$1" output "$2" flatten
    }
    export pdfflatten
    alias pdfflattenDIR='mkdir flattenedPDFs; for i in `seq $(ls *.pdf | wc -l)`; do a=`ls *.pdf | head -$i | tail -1`; pdfflatten "$a" flattenedPDFs/"$a"; done'
Jgar
źródło
pdftk spłaszczony nie zmienia obrazów w pliku PDF. Z dokumentacji „łączy pola interaktywnego formularza wejściowego pliku PDF (i ich dane) ze stronami pliku PDF”
Aidan Kane
1
Żeby było jasne, to podejście nie spłaszcza przezroczystych warstw (jak wskazano powyżej).
mikemtnbikes