Redimensionar em lote e compactar arquivos PDF

15

Preciso de uma maneira de dimensionar e compactar lotes de arquivos PDF. Eu preferiria fazer isso no Windows, mas o Linux seria bom se significasse um fluxo de trabalho mais suave.

Sei que existem programas como o NitroPDF e o Acrobat que permitem isso, mas receio que isso deva ser feito arquivo por arquivo. Esses programas também não são baratos e eu prefiro não comprá-los apenas para poder usar um ou dois recursos.

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

Stan
fonte

Respostas:

15

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


O ImageMagick suporta PDFs e tem uma resizeopção com sua ferramenta de conversão . Eu nunca o usei pessoalmente, mas você pode tentar brincar com isso.

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

Girar um PDF

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

Isso pressupõe um PDF suportado por TIFF. O parâmetro de densidade é importante porque, caso contrário, o ImageMagick faz uma amostragem reduzida da imagem (por algum motivo). A adição da opção de compactação ajuda a manter o tamanho geral do PDF menor, sem perda de qualidade.

Para PDFs de várias páginas, convém pdftkusar o mogrifyImageMagick para converter cada página no local:

$ 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 mogrifya conversão seja feita no lugar, recomendo que você use convertpara manter os originais em caso de acidente.


Fiz alguns testes no seu exemplo de PDF fornecido. Isso funcionou muito bem para mim:

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

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

Compressão JPEG deve ou auto escolher um nível ou padrão para 92em uma escala 1da 100com 100sendo o melhor. Definindo-o como 20, parece quase tão bom quanto o original (um pouco mais confuso e o pequeno texto na parte inferior é um pouco difícil de ler, mas era originalmente de qualquer maneira).

Estas opções trazer o seu 1.7MB amostra até 0.5MB , mantendo-lo legível. Você pode experimentar um pouco.

Se você deseja um tamanho menor (tanto do arquivo quanto da imagem / PDF), pode usar -resize #%, por exemplo -resize 75%. No seu exemplo de PDF, isso torna as letras pequenas na parte inferior praticamente ilegíveis.

Se você ainda estiver com pouco espaço, principalmente para 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,43 MB no PDF de teste (a redução da qualidade da compactação JPEG tem um efeito muito mais drástico). Você também pode dividir o arquivo PDF em páginas com pdftk, como @glallen sugeriu em sua edição, ou dividir o arquivo e recombinar na outra extremidade.

2 MB também é um limite de anexo bastante pequeno; talvez você queira procurar outros provedores de email. De memória, o GMail fornece mais de 10 MB por email.

Essas opções e mais estão totalmente documentadas em seus sites .

Prumo
fonte
Essa parece ser uma excelente abordagem, mas não acho que meus PDFs sejam suportados por TIFF. O CamScanner primeiro tira fotos JPEG e depois as converte em PDF para exportação. O processamento desses PDFs parece diminuí-los como indica a postagem do blog, independentemente da compactação. Converter de PDF para TIFF e depois voltar para PDF parece preservar a qualidade, mas aumenta o tamanho do arquivo e atrapalha o tamanho e a densidade da página.
Stan
@paganompu Pelo que entendi, você deseja reduzir o tamanho do arquivo. Que tal compactar como JPEG? Como acabou resize? Você tem um arquivo de amostra (não sensível) com o qual podemos brincar? A amostragem é aceitável?
28412 Bob
O JPEG teria funcionado bem, mas preciso fazer o upload de documentos com várias páginas e só posso ter um anexo por entrada de conta. A redução da amostragem é grave: este documento de teste é ilegível após a conversão com compactação sem perdas.
288 Stan
@paganompu Eu mesmo experimentei um pouco e atualizei a resposta com um comando de trabalho. Veja aqui um teste em seu arquivo.
Bob
Esse comando funciona como um encanto. Parece que meu "downsampling" foi devido à omissão density... Juro que posso ler e seguir as instruções! Um pouco envergonhado agora: S Obrigado por dedicar um tempo para me ajudar. Bob #
295
19

Portanto, o convertImageMagick produzirá PDF rasterizado e muitas pessoas estariam interessadas em manter o gráfico vetorial e o texto intocados, para que apenas as imagens incorporadas sejam compactadas. Uma alternativa tão boa para fazer a compactação é usar o exemplo de uso gsdo pacote ghostscript:

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)
aNeutrino
fonte