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.
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.
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.
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 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
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
).
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.
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.
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))
Isso terá um bom resultado.
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
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.
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
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}
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.
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.
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á
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 :
Instale todas as dependências necessárias:
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]
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.
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.
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.
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.
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.
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE
"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 )
Tags pdf compression