Lote redimensionar e compactar arquivos PDF

13

Eu preciso de uma maneira de reduzir e compactar lotes de arquivos PDF. Eu preferiria fazer isso no Windows, mas o Linux estaria bem se significasse um fluxo de trabalho mais suave.

Eu sei que existem programas como o NitroPDF e o Acrobat que permitem que você faça isso, mas temo que isso seja feito arquivo por arquivo. Esses programas também não são baratos e prefiro não comprá-los apenas para usar um ou dois recursos.

Informações de fundo: eu uso o CamScanner para digitalizar recibos e faturas para entrada em contas (FreeAgent). Os PDFs do CamScanner são todos de tamanho A4 e os de várias páginas geralmente excedem o limite de anexos de 2 MB.

    
por Stan 23.05.2012 / 12:54

2 respostas

13

Estou sugerindo uma ferramenta de linha de comando aqui, que pode ser facilmente agrupada com loops em linguagens de script internas no Windows, Linux, OS X, etc.

ImageMagick suporta PDFs e tem um resize com seu converter ferramenta. Eu nunca usei isso pessoalmente, mas você pode tentar brincar com isso.

Você também pode usar a opção compress (há um exemplo aqui ):

Rotate a PDF

$ convert -rotate 270 -density 300x300 -compress lzw in.pdf out.pdf

This assumes a TIFF-backed PDF. The density parameter is important because otherwise ImageMagick down-samples the image (for some reason). Adding in the compression option helps keep the overall size of the PDF smaller, with no loss in quality.

Para PDFs de várias páginas, convém usar pdftk , em seguida, use mogrify do ImageMagick para converter cada página:

$ pdftk in.pdf burst
$ mogrify -rotate 270 -density 300x300 -compress lzw pg_*.pdf
$ pdftk pg*.pdf cat output out.pdf
$ rm pg*.pdf

Para converter arquivos PDF com o ImageMagick, você precisa ter o GhostScript instalado.

O ImageMagick pode converter PDFs de várias páginas. Embora mogrify seja convertido no lugar, recomendo que você use convert para poder manter os originais em caso de acidente.

Eu fiz alguns testes em seu PDF de amostra fornecido. Isso funcionou muito bem para mim:

convert -density 200 -compress jpeg -quality 20 test.pdf test2.pdf

O padrão de densidade é 72 DPI. Ao defini-lo mais alto, podemos obter uma resolução mais alta e, portanto, uma qualidade aceitável. Parecia certo em 150 e era um pouco menor, mas se você quiser atender a um intervalo de PDFs 200 deve funcionar.

A compactação JPEG deve escolher um nível automaticamente ou usar 92 na escala de 1 a 100 , sendo 100 a melhor. Definindo-o em 20 , parece quase tão bom quanto o original (um pouco confuso e o pequeno texto na parte inferior é um pouco difícil de ler, mas era originalmente assim mesmo).

Essas opções trazem sua amostra de 1,7 MB para 0,5 MB , mantendo-a legível. Você pode experimentar um pouco.

Se você quiser um tamanho menor (do arquivo e da imagem / PDF), use -resize #% , por exemplo. %código%. No seu exemplo de PDF, isso torna as letras pequenas na parte inferior praticamente ilegíveis.

Se você ainda tiver pouco espaço, especialmente para os PDFs de várias páginas, poderá compactar ainda mais adicionando os arquivos a um arquivo ZIP (ou outro). Isso reduziu o tamanho do arquivo para 0,43MB nesse PDF de teste (reduzir a qualidade de compactação de JPEG tem um efeito muito mais drástico). Você também pode dividir o arquivo PDF em páginas com -resize 75% , como @glallen sugerido em sua edição, ou divida o arquivo e recombine na outra extremidade.

2MB também é um limite de anexo pequeno, você pode querer procurar outros provedores de e-mail. Da memória, o GMail fornece mais de 10MB por email.

Essas opções, e mais, estão totalmente documentadas em seu site .

    
por 23.05.2012 / 13:08
17

Portanto, convert do ImageMagick produzirá PDF rasterizado e muitas pessoas estariam interessadas em manter o gráfico vetorial e o texto inalterados, de modo que apenas as imagens incorporadas sejam compactadas. Então, uma boa alternativa para fazer a compactação é usar gs do pacote ghostscript de uso:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf in.pdf

no parâmetro de comando acima: -dPDFSETTINGS=/ebook é importante. Pode ter 3 valores:

-dPDFSETTINGS=/screen   (screen-view-only quality, 72 dpi images)
-dPDFSETTINGS=/ebook    (low quality, 150 dpi images)
-dPDFSETTINGS=/printer  (high quality, 300 dpi images)
-dPDFSETTINGS=/prepress (high quality, color preserving, 300 dpi imgs)
-dPDFSETTINGS=/default  (almost identical to /screen)
    
por 14.04.2015 / 18:33