Gostaria de transformar um pdf com texto e imagens coloridos em outro pdf apenas em preto e branco, a fim de reduzir suas dimensões. Além disso, gostaria de manter o texto como texto, sem transformar os elementos das páginas em figuras. Eu tentei o seguinte comando:
convert -density 150 -threshold 50% input.pdf output.pdf
encontrado em outra pergunta, um link , mas ele faz o que não quero: o texto na saída é transformado em uma imagem ruim e não é mais selecionável. Eu tentei com o Ghostscript:
gs -sOutputFile=output.pdf \
-q -dNOPAUSE -dBATCH -dSAFER \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.3 \
-dPDFSETTINGS=/screen \
-dEmbedAllFonts=true \
-dSubsetFonts=true \
-sColorConversionStrategy=/Mono \
-sColorConversionStrategyForImages=/Mono \
-sProcessColorModel=/DeviceGray \
$1
mas me dá a seguinte mensagem de erro:
./script.sh: 19: ./script.sh: output.pdf: not found
Existe alguma outra maneira de criar o arquivo?
bash
pdf
imagemagick
ghostscript
color-management
BowPark
fonte
fonte
Respostas:
O exemplo gs
O
gs
comando que você está executando acima possui um trailing,$1
que normalmente significa passar argumentos de linha de comando para um script. Portanto, não tenho certeza do que você realmente tentou, mas acho que você tentou colocar esse comando em um scriptscript.sh
:E execute-o assim:
Não sei como você configura esse script, mas ele precisa ser executável.
Algo definitivamente não parece certo com esse script. Quando tentei, recebi este erro:
Uma alternativa
Em vez desse script, eu usaria esse da pergunta SU.
Em seguida, execute-o assim:
fonte
sProcessColorModel
que deveria serdProcessColorModel
.Encontrei um script aqui que pode fazer isso. Requer o
gs
que você parece ter, mas tambémpdftk
. Você não mencionou sua distribuição, mas em sistemas baseados no Debian, você poderá instalá-la comVocê pode encontrar RPMs para isso aqui .
Depois de instalar
pdftk
, salve o script comograypdf.sh
e execute da seguinte forma:Isso criará um arquivo chamado
input-gray.pdf
. Estou incluindo o script inteiro aqui para evitar o rot pod:fonte
Eu também tinha alguns PDFs coloridos digitalizados e PDFs em escala de cinza que queria converter para bw. Tentei usar
gs
com o código listado aqui e a qualidade da imagem é boa com o texto em pdf ainda lá. No entanto, esse código gs é convertido apenas em escala de cinza (conforme solicitado na pergunta) e ainda possui um tamanho de arquivo grande.convert
produz resultados muito ruins quando usado diretamente.Eu queria PDFs BW com boa qualidade de imagem e tamanho pequeno de arquivo. Eu teria tentado a solução de Terdon, mas não consegui
pdftk
acessar o centOS 7 usando o yum (no momento da redação).Minha solução usa
gs
para extrair arquivos bmp em escala de cinza do pdf,convert
para limitar esses bmps a bw e salvá-los como arquivos tiff e, em seguida, img2pdf para compactar as imagens tiff e mesclá-las em um único pdf.Eu tentei ir diretamente para tiff do pdf, mas a qualidade não é a mesma, então eu salvei cada página em bmp. Para um arquivo pdf de uma página,
convert
faz um ótimo trabalho de bmp para pdf. Exemplo:Para várias páginas,
gs
pode mesclar vários arquivos pdf em um, masimg2pdf
gera um tamanho de arquivo menor que o gs. Os arquivos tiff devem ser descompactados como entrada para img2pdf. Lembre-se de que, para um grande número de páginas, os arquivos intermediários bmp e tiff tendem a ser grandes.pdftk
oujoinpdf
seria melhor se eles pudessem mesclar arquivos pdf compactadosconvert
.Imagino que exista uma solução mais elegante. No entanto, meu método produz resultados com qualidade de imagem muito boa e tamanho de arquivo muito menor. Para recuperar o texto no PDF bw, execute o OCR novamente.
Meu script de shell usa gs, convert e img2pdf. Altere os parâmetros (número de páginas, dpi de digitalização,% de limite etc.) listados no início, conforme necessário, e execute
chmod +x ./pdf2bw.sh
. Aqui está o script completo (pdf2bw.sh):fonte
RHEL6 e RHEL5, que ambos Ghostscript na linha de base na versão 8.70, não podiam usar as formas do comando fornecido acima. Supondo que um script ou função espere o arquivo PDF como o primeiro argumento "$ 1", o seguinte deve ser mais portátil:
Onde o arquivo de saída será prefixado com "grey_".
RHEL6 e 5 podem usar CompatibilityLevel = 1.4, que é muito mais rápido, mas eu estava buscando portabilidade.
fonte
sColorConversionStrategyForImages
opção.Eu obtenho resultados confiáveis limpando os PDFs digitalizados para contrastar com este script;
fonte