Como posso reduzir o tamanho do arquivo PDF digitalizado?


372

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

O arquivo era uma imagem JPEG que eu havia digitalizado e convertido em pdf.


1
depende do que consome o espaço ... precisa de muito mais informação. compactar o espaço da imagem pode ajudar, mas se você estiver tentando usar um spray de pilha grande de arquivos, isso não funcionará. precisa seriamente de mais informações.
RobotHumans

1
convertê-lo para DjVu, em vez de tentar reduzir ao tamanho PDF impossível (fonte de acordo)
zetah

o arquivo era uma imagem JPEG que eu havia digitalizado e convertido em pdf.
tamimym

Parece apenas ajudar um pouco o tamanho do arquivo, mas pdfoptpossui uma sintaxe simples e melhora a velocidade de carregamento e de virar a página na era do iPad. :-)
Ari B. Friedman

1
PDF para PS não é eficaz em arquivo PDF digitalizado, eu tento converter 56 MB pdf em arquivo ps mas arquivo ps converter em 1,3 GB e novamente ps2pdf é convertido em 45 MB de arquivos

Respostas:


145

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

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


15
Muito obrigado por suas sugestões, o shell ghostscript trabalhou maravilhas e encolheu-lo até 460KB :)
tamimym

Isso não é necessariamente verdade. Se o conteúdo passou de uma imagem para o texto, isso é mais do que possível. [Isso pressupõe que o texto seja oculto com precisão] #
1615 monksy

2
Eu recomendo o script shrinkpdf.sh, você pode personalizar o código para usar o valor ppi desejado (72 por padrão) e atingir exatamente o tamanho do arquivo necessário para sacrificar a menor qualidade. Isso me permitiu carregar um documento digitalizado de 11 MB com no máximo tamanho de 3 MB sem perder muita qualidade.
Severo Raz

4
shrinkpdf funciona muito bem!
AmanicA

2
Onde está o shell ghostscript ao qual o OP está se referindo a askubuntu.com/questions/113544/… ?
user13107

521

Use o seguinte comando ghostscript :

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
  • -dPDFSETTINGS=/screenqualidade inferior, tamanho menor. ( 72 dpi )
  • -dPDFSETTINGS=/ebookpara obter melhor qualidade, mas PDFs um pouco maiores. ( 150 dpi )
  • -dPDFSETTINGS=/prepresssaída semelhante à configuração do Acrobat Distiller "Pré-impressão otimizada" ( 300 dpi )
  • -dPDFSETTINGS=/printerseleciona uma saída semelhante à configuração "Impressão otimizada" do Acrobat Distiller ( 300 dpi )
  • -dPDFSETTINGS=/default seleciona a saída destinada a ser útil em uma ampla variedade de usos, possivelmente à custa de um arquivo de saída maior

5
Essa deve ser a resposta aceita. ghostscript é o PDF, XPS e implementação PS para unices e pode fazer basicamente tudo o fornecimento de melhor qualidade ...
dom0

7
@Sina: Há realmente um Script Nautilus com uma interface gráfica simples baseado em Zenity que utiliza este gs de comando com todas as suas opções de nível de qualidade: launchpad.net/compress-pdf
Sadi

36
Esta é a resposta certa para esta pergunta (compactar um pdf que é principalmente dados de bitmap). Descobri que a screenconfiguração era de qualidade muito baixa para mim, mas ebookfuncionou bem, reduzindo um PDF baseado em digitalização de 33Mb para 3,6Mb e mantendo-o muito legível. Outras opções para a -dPDFSETTINGSopção estão listadas aqui: milan.kupcevic.net/ghostscript-ps-pdf , e pode ser uma boa ideia incluí-las nesta resposta.
precisa saber é o seguinte

5
parâmetros de configuração disponíveis da gs: ghostscript.com/doc/current/Ps2pdf.htm
Antonios Hadjigeorgalis

3
em 17.10 ele fez 42 mb em pdf para 127 mb :(
YaSh Chaudhary

157

Minha maneira favorita de fazer isso é converter o pdf em ps e vice-versa. Porém, 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 de e-book da seguinte maneira:

ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf 

4
Esta é uma maneira muito simples e eficaz de fazer isso. Fiquei surpreso ao ver o quanto esse método compactou os arquivos. Te agradece!
Gabriel

16
Apesar de essa abordagem ter se tornado minha solução favorita para compactar arquivos PDF, ela divide os links de URL que o documento pode ter (o que não acontece com a abordagem de @Michael D). Além disso, a grandiosidade é tudo o que consigo pensar em executar esse trecho! (:
Rubens

1
@Rubens Ah. Não sabia do fato de que ele quebra os links de URL. Obrigado por adicionar isso.
precisa

3
Isso ignora a proteção de senha ... apenas dizendo
jojo

8
ps2pdf terá pdfs como entradas, para que você possa fazer isso em uma única etapa:ps2pdf intput.pdf output.pdf
frabjous

127

Se você possui um pdf com imagens digitalizadas , pode convertcriar um PDF com compactação jpeg (você pode usar esse método em qualquer pdf, mas perderá todas as informações de texto).

Por exemplo:

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

Ajuste a densidade (por exemplo, 100x100) e a qualidade às suas necessidades.

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

Consegui ótimas taxas de compactação para documentos digitalizados / fotografados (dependendo das configurações). Dependendo da origem do documento, convém reduzir a profundidade da cor ( -depthargumento).


3
Para um documento digitalizado em que o texto é o seu interesse, e não as imagens e a preservação da profundidade não são um problema, a compactação jpeg não é uma boa ideia, porque os artefatos tendem a ser extremamente perceptíveis. Se você usar pdfimages input.pdf pagespara extrair arquivos PBM, em seguida, você pode fazer algo como: for page in *.pbm; do convert $page -compress Group4 -type bilevel TIFF:- | convert - output.pdf. Qualquer OCR será perdido, então normalmente o faço pdfsandwich output.pdf, o que parece reduzir ainda mais o tamanho do arquivo.
Brian Z

1
A @BrianZ com certeza a compactação JPEG nem sempre é a melhor opção, mas para mim foi a melhor abordagem para documentos do tipo misto. Eu adicionei algumas informações sobre outros métodos de compactação à resposta.
Someonr 6/05/19

2
Esse método acaba sendo usado gsnos bastidores.
ALFC

2
Eu tive que usar traço duplo para as opções para executar o comando --density --quality --compressvs -density -quality -compress.
Rotareti

1
Se a qualidade da imagem não for a preocupação mais alta (e você apenas deseja que o anexo dang e-mail seja pequeno o suficiente para ser enviado), é possível adicionar -resize 50%também, altere a porcentagem dependendo da quantidade de DPI usada durante a digitalização
chrki

41

Eu precisava reduzir o tamanho de um PDF que continha digitalizações coloridas de um documento. Cada uma das minhas páginas tinha uma imagem colorida no que dizia respeito ao arquivo. Eles eram imagens de páginas contendo texto e imagens, mas foram criadas digitalizando para uma imagem.

Eu usei uma combinação do comando ghostscript abaixo 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 pela metade o tamanho do meu arquivo. Olhando para o documento, quase não houve perda perceptível da qualidade da imagem. O texto ainda está perfeitamente legível no meu Nexus7 de 2012.


3
+1 para amostragem reduzida de imagens, mas mantendo o texto como vetores. Fez uma enorme diferença de lado sem deixar meu texto pixelizado.
Jason O'Neil

Fantástico que se possa ajustar a resolução com este comando - isso me deu melhores resultados do que usar dPDFSETTINGS = \ screen
exchange

29

Aqui está um script para reescrever 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, poderá substituí-lo $1pelo nome do arquivo pdf e conectá-lo em um terminal.


1
Funciona um prazer, obrigado Oli. Você respondeu praticamente tudo que eu pedi aqui até agora :-D
Rob Cowell

Essa é uma boa resposta, mas no meu caso, pelo menos, leva muito tempo para converter um arquivo PDF um pouco grande (> 10Mb) (mais de um minuto).
Gabriel

Não sei ao certo o que acontece, mas um PDF de 30 MB resulta em um arquivo de 68 MB. Em vez de reduzir, aumenta. A mesma saída se estiver usando diretamente o ps2pdf, como indicado na próxima resposta.
Ed Villegas

@ EdVillegas A única coisa em que consigo pensar (para explicar esse tipo de aumento) é que as imagens têm uma resolução menor do que as que estão sendo geradas (72 dpi). Ou, de alguma forma, incorporar as fontes está sugando todas as fontes.
Oli

21

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

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

Obrigado pela solução alternativa. Eu tentei o primeiro de Oli e ele me deu o resultado que eu precisava, mas vou manter este também para referência futura.
Rob Cowell

1
-dPDFSETTINGS = / opção de impressora redimensiona 50%. ebook fazer redimensionar 90%.
neouyghur

17
  1. Eu uso o 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 da imagem" para 150 dpi

Isso terá um bom resultado.


Pior solução possível para o problema! Isso estragou totalmente meu arquivo!

9

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

Saudações


Ótima solução. Fácil de lembrar e trouxe meu pdf de 32 para 3,5 MB sem perda sensível de legibilidade.
Immanuel Weihnachten

Eu gostei da segunda maneira pdf2ps input.pdf temp.ps && ps2pdf14 temp.ps output.pdf && rm temp.ps
McPeppr 6/11/19

5

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


1
Esta é a resposta única neste tópico que resolveu meu problema. Eu subestimei o Simplescan, mas realmente era a resposta para mim, em vez de lutar contra Xsane no que parecia ser uma agonia sem fim.
versvs 31/08/2015

4

Controle a qualidade da 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}

... então INPUT e OUTPUT são o mesmo argumento? Você pode querer adicionar diretrizes de uso.
Mikewhatever

2
Observe o shift. O primeiro parâmetro é o arquivo de entrada, o segundo é o arquivo de saída e o restante dos parâmetros será passado gscomo está.
Mikko Rantalainen

Eu acho que você quer / HSample s e / VSample s , não / HSample e / VSample. Veja, por exemplo, documentos ps2pdf ou o manual de referência da linguagem PostScript. Também talvez seja interessante notar que a faixa QFactor permitida é de 0 a 1.000.000 e valores mais baixos produzem maior qualidade.
Pont

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 estava um pouco confuso) foi o utilitário de conversão do ImageMagick:

convert -compress Zip input.pdf output.pdf

Eu acho que é isso que você quis dizer com "um pouco confuso", mas apenas para esclarecer, convert -compress Zipparecia rasterizar todos os vetores.
Sparhawk


3

Eu recomendo fortemente o pdfsizeopt .

É muito mais eficiente em termos de redução de tamanho do que qualquer um dos softwares CLI e GUI anterior que eu tentei (incluindo convert, gs, pdftk, etc.) - embora possivelmente mais lento com pngoutativado -, e não tem alguns dos seus problemas (sem pesadamente imagens pixeladas / degradadas, sem perda de marcadores, etc.).

Agora, se você precisar atingir um determinado tamanho, independentemente das conseqüências (incluindo degradar as imagens a um ponto de ilegibilidade), pode não ser a ferramenta de que você precisa, mas como uma solução permanente para reduzir tamanhos grandes desnecessários em PDFs sem perder legibilidade, informações e qualidade de imagem aceitável, acho que é a melhor opção. (Nota: costumo usá-lo depois de fazer um OCR de vetorização pela primeira vez no Adobe Acrobat [a função costumava ser chamada de "CleanScan"]], que pode ter um impacto dramático no tamanho de alguns documentos de texto digitalizados.


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

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

  2. Baixe 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]

Nota para usuários do Mac que encontram esta publicação (ou usuários do Linuxbrew): existe uma fórmula de instalação do Homebrew:

brew install --HEAD pts/utils/pdfsizeopt

2

Eu estava enfrentando o mesmo problema e fiquei feliz em encontrar esse tópico. Especificamente, eu tinha um pdf gerado a partir de imagens digitalizadas e precisava reduzir o tamanho de bytes em um fator de 6.

Infelizmente, nenhuma das soluções acima funcionou. mas o pdf tinha tamanho de

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

Finalmente, obtive os resultados desejados com um comando "convert" que executou o redimensionamento e a compactação em uma:

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

Observe que doc_orig tinha densidade de 72x72 dpi.


1

Se a conversão para djvu também estiver ok e se não houver cores envolvidas, tente o seguinte:

Converta os arquivos pdf em jpg usando pdfimages -j

Se você obtiver arquivos pbm, execute a etapa intermediária:

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

O comando convert é do pacote imagemagick.

Em seguida, use o scantailor para criar tifs com isso.

Em uma última etapa, você vai ao diretório de scantailors (onde estão os tifs ) e aplica o djvubind a esse diretório.

Isso deve reduzir drasticamente o tamanho do arquivo, sem grande perda de qualidade do texto. Se você deseja um controle mais refinado sobre o ocr-back-end, tente djvubind --no-ocrusar o ocrodjvu para adicionar a camada ocr posteriormente.

Se você tem cores no documento, as coisas ficam um pouco mais complicadas. Em vez de djvubind, você pode usar o didjvu e, no scantailor, é necessário mudar para o modo misto e selecionar, às vezes, imagens coloridas manualmente.


1

Carregar imagem ou mesmo arquivo PDF no inkscape.

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

Importe arquivos vetoriais para o scribus, edite o layout e exporte / salve como .pdf a partir daí


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.


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 do que gsmas compacta até 30% nesse caso para um arquivo de entrada 107,5MiB.


0

Para mim, a screenopção gs era muito ruim e a opção ebookmuito grande.

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

A melhor solução que encontrei 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

Observe que o nível de compactação não é linear. Se eu estava especificando 135 que não compactou, achei 130 como sendo (no meu caso) a resolução máxima que atinge uma compactação.


-1

Eu usei os comandos abaixo, mas ele não compactou meu arquivo pdf substancialmente. Algumas vezes, parte da porção ficou enegrecida 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 pdfcompressor.com. Este é apenas um site incrível. Comprime o pdf em 95% (15Mb de arquivos). Então usei selênio e Tor para automatizar a compressão. Confira meu repositório do Github. [GITHUB] ( https://github.com/gugli28/PdfCompressor )

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.