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.

tamimym
fonte
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.

v2r
fonte
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
Michael D
fonte
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 
don.joey
fonte
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).

someonr
fonte
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.

mlitty
fonte
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.

Oli
fonte
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))
Javier Rivera
fonte
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.

Marius4674
fonte
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

oxidworks
fonte
Ó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.

user179584
fonte
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}
user525719
fonte
... 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
mbroshi
fonte
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

No final, eu escrevi o meu próprio script bash para resolver isso, ele usa mogrify, converte gspara extrair páginas PDF como png, redimensioná-las, convertê-los em 1-bit bmp e depois reconstruí-los como pdf. A redução do tamanho do arquivo pode ser superior a 90%. Disponível em http://www.timedicer.co.uk/programs/help/pdf-compress.sh.php .

scoobydoo
fonte
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
iNyar
fonte
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.

Kalpit
fonte
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.

aluna
fonte
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í

macaco
fonte
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.

John
fonte
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.

SebMa
fonte
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.

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

Principe
fonte