Como posso reduzir o tamanho do arquivo de um arquivo PDF digitalizado?

348

Eu tenho um arquivo PDF de 72,9 MB que eu preciso reduzir para menos de 500 KB.

O arquivo era uma imagem JPEG que eu tinha digitalizado e convertido para pdf.

    
por tamimym 16.03.2012 / 18:12

21 resposta

138

aking1012 está certo. Com mais informações sobre possíveis imagens incorporadas, hiperlinks, etc., seria muito mais fácil responder a esta pergunta!

Aqui estão algumas soluções de script e linha de comando. Use como achar melhor.

por v2r 16.03.2012 / 18:28
478

Use o seguinte comando ghostscript :

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
  • -dPDFSETTINGS=/screen de qualidade inferior, tamanho menor. ( 72 dpi )
  • -dPDFSETTINGS=/ebook para melhor qualidade, mas pdfs ligeiramente maiores. ( 150 dpi )
  • -dPDFSETTINGS=/prepress saída semelhante à configuração "Prepress Optimized" do Acrobat Distiller ( 300 dpi )
  • -dPDFSETTINGS=/printer seleciona saída semelhante à configuração "Otimizada para impressão" do Acrobat Distiller ( 300 dpi )
  • -dPDFSETTINGS=/default seleciona a saída destinada a ser útil em uma ampla variedade de usos, possivelmente às custas de um arquivo de saída maior
por Michael D 15.02.2013 / 14:53
145

Minha maneira favorita de fazer isso é converter o pdf para ps e vice-versa. Nem sempre funciona, mas quando funciona, os resultados são bons:

ps2pdf input.pdf output.pdf

Isso também funciona diretamente em pdf, como sugerido nos comentários.

Alguns usuários também relatam mais sucesso ao usar as configurações do e-book da seguinte forma:

ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf 
    
por don.joey 16.01.2013 / 10:18
122

Se você tem um pdf com imagens digitalizadas , você pode usar convert para criar um pdf com compressão jpeg (você pode usar este método em qualquer pdf, mas você perderá todas as informações de texto).

Por exemplo:

convert -density 200x200 -quality 60 -compress jpeg input.pdf output.pdf

Ajuste densidade (por exemplo, 100x100) e qualidade de acordo com suas necessidades.

Dependendo do seu jpeg de entrada, a compactação pode não ser a melhor escolha devido a artefatos de compactação. Você tem a opção entre BZip, Fax, Grupo4, JPEG, JPEG2000, Lossless, LZW, RLE ou Zip como métodos de compactação alternativos (alguns permitem apenas imagens em preto e branco). Para detalhes, consulte aqui .

Consegui obter excelentes taxas de compactação para documentos digitalizados / fotografados (dependendo das configurações). Dependendo da origem do documento, você pode querer reduzir a profundidade de cor (argumento -depth ).

    
por someonr 19.05.2014 / 19:39
39

Eu precisava reduzir o tamanho de um PDF que continha varreduras em cores de um documento. Cada uma das minhas páginas era uma imagem colorida no que dizia respeito ao arquivo. Eram imagens de páginas contendo texto e imagens, mas foram criadas digitalizando para uma imagem.

Eu usei uma combinação do comando abaixo ghostscript e um de outro thread.

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true \
-dColorImageResolution=150 -dNOPAUSE  -dBATCH -sOutputFile=output.pdf input.pdf

Isso reduziu a resolução da imagem para 150 dpi, cortando o tamanho do meu arquivo pela metade. Olhando para o documento, quase não houve perda perceptível de qualidade de imagem. O texto ainda é perfeitamente legível no meu Nexus7 de 2012.

    
por mlitty 19.01.2014 / 07:25
28

Aqui está um script para reescrever os PDFs digitalizados:

#!/bin/sh

gs  -q -dNOPAUSE -dBATCH -dSAFER \
    -sDEVICE=pdfwrite \
    -dCompatibilityLevel=1.3 \
    -dPDFSETTINGS=/screen \
    -dEmbedAllFonts=true \
    -dSubsetFonts=true \
    -dColorImageDownsampleType=/Bicubic \
    -dColorImageResolution=72 \
    -dGrayImageDownsampleType=/Bicubic \
    -dGrayImageResolution=72 \
    -dMonoImageDownsampleType=/Bicubic \
    -dMonoImageResolution=72 \
    -sOutputFile=out.pdf \
     $1

Você pode personalizá-lo um pouco para torná-lo mais reutilizável, mas se você tiver apenas um pdf, basta substituir o $1 pelo seu nome de arquivo em pdf e colocá-lo em um terminal.

    
por Oli 31.08.2010 / 22:29
20

Eu costumo usar ps2pdf para fazer isso (sintaxe mais fácil), algo assim:

ps2pdf -dPDFSETTINGS=/ebook BiggerPdf SmallerPDF

Eu uso o seguinte script python para reduzir o tamanho de todos os arquivos PDF em um diretório em um servidor de produção (8.04). Então deve funcionar.

#!/usr/bin/python

import os

for fich in os.listdir('.'):
        if fich[-3:]=="pdf":
                os.system("ps2pdf -dPDFSETTINGS=/ebook %s reduc/%s" % (fich,fich))
    
por Javier Rivera 01.09.2010 / 09:26
15
  1. Eu uso LibreOffice Draw para abrir o pdf.
  2. Eu então "exporto como pdf"
  3. E defina "qualidade de compressão jpeg" para 50% e "resolução de imagem" para 150 dpi

Isso terá um bom resultado.

    
por Marius4674 14.06.2016 / 11:59
8

O melhor para mim foi

convert -compress Zip -density 150x150 input.pdf output.pdf

Outras maneiras:

#### gs
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE

### pdf2ps && ps2pdf
pdf2ps input.pdf output.ps && ps2pdf output.ps output.pdf

### Webservice
http://compress.smallpdf.com/de

considera

    
por oxidworks 21.04.2016 / 13:03
5

Acabei de encontrar este problema sozinho. Se estiver usando uma varredura simples, selecione o modo de texto para digitalizações de baixa resolução e você não precisará se preocupar com o material da linha de comando. Apenas dizendo.

    
por user179584 29.07.2013 / 23:13
3

Como esse link foi o primeiro para mim quando pesquisei no Google, pensei em adicionar mais uma possibilidade. Nenhuma das soluções acima estava funcionando para mim em um pdf exportado do Inkscape (15 mb), mas finalmente consegui reduzi-lo para 1 mb abrindo-o no GIMP e exportando como pdf novamente.

Outra opção que chegou perto (mas o texto foi um pouco confuso) foi o utilitário de conversão do ImageMagick:

convert -compress Zip input.pdf output.pdf
    
por mbroshi 13.02.2014 / 13:32
3

No final, escrevi meu próprio script bash para resolver isso, ele usa mogrify , convert e gs para extrair páginas em pdf como png, redimensioná-las, convertê-las em bmp de 1 bit e reconstruí-las como pdf. A redução do tamanho do arquivo pode ser superior a 90%. Disponível no link .

    
por scoobydoo 21.09.2016 / 14:15
3

Controle a qualidade de compactação:

#!/bin/sh
INPUT=$1; shift
OUTPUT=$1; shift
GS_BIN=/usr/bin/gs
QFACTOR="0.40"

# Image Compression Quality
#
# Quality HSamples VSamples QFactor
# Minimum [2 1 1 2] [2 1 1 2] 2.40
# Low     [2 1 1 2] [2 1 1 2] 1.30
# Medium  [2 1 1 2] [2 1 1 2] 0.76
# High    [1 1 1 1] [1 1 1 1] 0.40
# Maximum [1 1 1 1] [1 1 1 1] 0.15 

${GS_BIN} -dBATCH -dSAFER -DNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=${OUTPUT} -c "<< /ColorImageDict << /QFactor ${QFACTOR} /Blend 1 /HSample [1 1 1 1] /VSample [1 1 1 1] >> >> setdistillerparams" -f ${INPUT}
    
por user525719 02.04.2016 / 06:11
2

Eu estava enfrentando o mesmo problema e fiquei feliz em encontrar esse segmento. Especificamente, eu tinha um pdf gerado a partir de imagens digitalizadas e precisava reduzir seu tamanho de byte por um fator de 6.

Infelizmente, nenhuma das soluções acima funcionou :(. Então percebi que em algum lugar no processo de scanner > jpeg- > pdf o tamanho da página tinha ficado inchado por um fator de aprx 4. Os documentos que digitalizei foram todos tamanho Carta, mas o pdf tinha tamanho de

identify -verbose doc_orig.pdf | grep "Print size"
 Print size: 35.4167x48.7222

Eu finalmente obtive os resultados desejados com um comando "convert" que fazia as etapas de redimensionamento e compactação em um:

convert -density 135x135 -quality 70 -compress jpeg -resize 22.588% doc_orig.pdf doc_lowres.pdf

Note que doc_orig tinha uma densidade de 72x72 ppp.

    
por Kalpit 20.03.2016 / 12:56
1

Se a conversão para djvu também estiver ok e se nenhuma cor estiver envolvida, você pode tentar o seguinte:

Converta o pdf em arquivos jpg usando pdfimages -j

Se você receber arquivos pbm, deverá fazer a etapa intermediária:

for FILENAME in $(ls *.pbm); do convert $FILENAME ${FILENAME%.*}.jpg ;done

O comando convert é do pacote imagemagick.

Em seguida, use scantailor para deixar o tif fora disso.

Em um último passo, você vai para o diretório scentailors (onde o tif está localizado) e aplica djvubind a esse diretório.

Isso deve reduzir drasticamente o tamanho do arquivo sem grande perda de qualidade do texto. Se você quer um controle mais preciso sobre o ocr-backend, você pode tentar djvubind --no-ocr e usar ocrodjvu para adicionar a camada de ocr depois.

Se você tem cores em seu documento, as coisas ficam um pouco mais complicadas. Em vez de djvubind , você poderia usar didjvu e no scantailor você tem que mudar para o modo misto e selecionar algumas vezes imagens coloridas manualmente.

    
por student 11.09.2011 / 10:43
1

carregue imagem ou até arquivo pdf no inkscape.

Do inkscape: salve em formato vetorial (como o .svg nativo).

Importe arquivos vetoriais para o scribus, edite o layout e exporte / salve como .pdf de lá

    
por ape 28.07.2013 / 22:45
1

Recentemente descobri e recomendo vivamente pdfsizeopt .

É muito mais eficiente do que qualquer software de CLI e GUI anterior que eu tentei (incluindo convert , gs , pdftk , etc.) - embora possivelmente mais lento com pngout ativado - e não não tem alguns dos seus problemas (sem imagens muito pixeladas / degradadas, sem perda de marcadores, etc.).

Eu recomendo a instalação genérica do Unix :

  1. Instale todas as dependências necessárias:

  2. Faça o download e instale o executável:

    curl -L -o https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
    cp pdfsizeopt.single /usr/local/bin/pdfsizeopt
    

Uso:

pdfsizeopt original.pdf [compressed.pdf]
    
por Serge B. 02.03.2018 / 15:37
0

A vetorização de todas as fontes ajudará. Não insira fontes no arquivo.

Use uma resolução de imagem pequena: na maioria das vezes você realmente não precisa de imagens em alta definição. Tenha cuidado com o software de imagem como o Gimp, ele pode fazer um arquivo compactado muito grande (cuidado com o modo como você o comprime). Eu não gosto de softwares proprietários, mas algumas ferramentas de compactação do Adobe Photoshop são melhores que as do Gimp.

Mais: você precisa colocar a imagem em um arquivo PDF?

É muito simples, mas mais do que a resolução da imagem, você pode simplesmente alterar o tamanho do documento ...

@Lord of Time está certo: mudar de 72Mo para 500Ko será difícil sem mudar algo radicalmente.

    
por smonff 31.05.2012 / 03:13
0

Ferramenta de compactação de PDF super simples: página do GitHub.

Instalação no Ubuntu:

sudo add-apt-repository ppa:jfswitz/released

sudo apt-get update

sudo apt-get install pdf-compressor

Ele usa ghostscript.

    
por John 12.10.2015 / 14:39
0

Você pode tentar isso:

$ time pdftk myFile.pdf output myFile__SMALLER.pdf compress
GC Warning: Repeated allocation of very large block (appr. size 16764928):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 8384512):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 11837440):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 8384512):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 33525760):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 7254016):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 34041856):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 33525760):
    May lead to memory leak and poor performance.

real    0m23.677s
user    0m23.142s
sys     0m0.540s
$ du myFile*.pdf
108M    myFile.pdf
74M     myFile__SMALLER.pdf

É mais rápido que gs , mas comprime até 30% neste caso para um arquivo de entrada 107.5MiB.

    
por SebMa 09.08.2018 / 18:01
0

Para mim, a opção gs screen foi muito ruim e o ebook é muito grande.

Meu documento original continha texto como imagens coloridas e em preto e branco (dependendo da página).

A melhor solução que surgiu foi:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true -dDownsampleGrayImages=true -dDownsampleMonoImages=true -dColorImageResolution=130 -dGrayImageResolution=130 -dMonoImageResolution=130 -r130 -dNOPAUSE  -dBATCH -sOutputFile=output_lr.pdf input.pdf

Note que o nível de compressão não é linear .. se eu estivesse especificando 135 ele não foi compactado, eu achei 130 como (no meu caso) a resolução máxima que atinge uma compressão.

    
por 08.03.2019 / 11:36
-2

Eu usei os comandos abaixo, mas ele não comprime o arquivo pdf substancialmente. Algumas vezes parte da porção foi escurecida após a compressão.

  1. gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE

  2. "ps2pdf -dPDFSETTINGS=/ebook %s %s" % (input_file_path, out_file_path)

Depois de muito vagar pela web, não consegui encontrar a biblioteca de compactação correta. Eu me deparei com pdfcompressor.com . Este é apenas um site incrível. Comprime o pdf em 95% (15Mb de arquivos). Então eu usei selênio e Tor para automatizar a compressão. Finalize meu repositório do Github. [GITHUB] ( link )

    
por Prince 08.05.2018 / 13:10