Existe uma maneira de nivelar uma imagem .pdf na linha de comando?

19

No GIMP, posso importar um .pdf e usar a GUI para achatá-lo (se ele tiver sido feito com várias camadas) selecionando "Achatar imagem" no menu suspenso "Imagem". Em seguida, posso exportar o arquivo .pdf com um novo nome de arquivo.

Eu gostaria de automatizar isso. Existe alguma maneira de fazê-lo através do terminal?

generic_user
fonte
11
instale o imagemagick e leia man mogrify-im6, montagem-im6, display-im6, stream-im6, identifique-im6, import-im6, conjure-im6, composite-im6, convert-im6, anima-im6 e compare-im6.
Golfo Pérsico

Respostas:

25

Eu encontrei esses dois métodos via Google, neste tópico intitulado: Re: Achatamento de arquivos PDF na linha de comando do UNIX .

Método # 1 - usando o convert do Imagemagick:
$ convert orig.pdf flattened.pdf 

NOTA: É relatado que a qualidade é muito boa com esta abordagem.

Método # 2 - Usando pdf2ps -> ps2pdf:
$ pdf2ps orig.pdf - | ps2pdf - flattened.pdf 

NOTA: Esse método é relatado para manter a qualidade da imagem.

slm
fonte
11
Melhor qualidade que o GIMP no segundo - obrigado!
generic_user
@ ACD - é bom saber. Que bom que resolveu o seu Q.
slm
2
O método 1 gerou uma imagem muito confusa, enquanto o método 2 funcionou perfeitamente.
Severyn Kozak
11
Infelizmente, o Método 2 não rasteriza a imagem; portanto, se você estiver tentando bloquear partes sensíveis, um usuário ainda poderá abrir o documento e remover camadas (com algo como o Inkscape). No entanto, você pode modificar a resolução do Método 1: $ convert -density 150 {original,flattened}.pdf se você precisar preservar o espaço em disco, poderá usar -type Grayscaleou -monochromeou coisas desse tipo.
Eacousineau
11
Ambos os métodos rasterizarão o pdf, embora o método nº 2 o faça em uma resolução muito maior. Portanto, nenhum desses métodos é satisfatório.
Ant
18

Ghostscript (gs) funcionou melhor do que pdf2pse convertpara mim. A qualidade dificilmente foi degradada e o tamanho do arquivo é pequeno.

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

Encontrado aqui: http://zeroset.mnim.org/2015/01/07/flatten-pdfs-with-ghostscript/

Stan Bondi
fonte
Este método funciona muito bem, o PDF não é rasterizada eo texto é conservado como texto
Ant
2
Tentei usar isso para remover uma camada de transparência por achatamento, mas não funcionou para mim.
Mikemtnbikes #
Ele mudou uma fonte para mim, mas com uma resolução muito melhor do que os outros métodos propostos.
ste
1

Embora o Convert mantenha o mesmo tamanho de arquivo, achei lento.

O método pdf2ps ps2pdf é mais rápido, mas notei que estava aumentando o tamanho do arquivo.

O pdftk é bom porque não é apenas rápido, mas também mantém um tamanho de arquivo semelhante.

É isso que eu uso para achatar em massa um diretório.

    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
fonte
O pdftk flatten não altera as imagens em um PDF. De docs que "se funde campos de uma entrada de PDF interativos do formulário (e seus dados) com as páginas do PDF"
Aidan Kane
11
Para ficar claro, essa abordagem não aplana camadas transparentes (como indicado acima).
Mikemtnbikes #