pdf para jpg sem perda de qualidade; gscan2pdf

51

Quando converto um arquivo pdf em vários arquivos jpg usando

convert -quality 100 file.pdf page_%04d.jpg

Tenho perda de qualidade apreciável.

No entanto, se eu fizer o seguinte, não haverá perda de qualidade (perceptível):

Inicie o gscan2pdf, escolha arquivo-> importar (e escolha arquivo.pdf). Em seguida, vá para o diretório temporário de gscan2pdf. Existem muitos arquivos pnm (um para cada página do arquivo pdf). Agora eu faço

  for file in *.pnm; do            
  convert $file $file.jpg done

Os arquivos jpg resultantes são (aproximadamente) da mesma qualidade que o pdf original (que é o que eu quero).

Agora, minha pergunta é: se existe uma maneira simples de linha de comando para converter o arquivo pdf em um monte de arquivos jpg sem perda perceptível de qualidade? (A solução acima é muito complicada e consome tempo).

aluna
fonte
O que não está claro em suas perguntas é se você fala sobre texto e gráficos vetoriais em seu pdf ou se deseja extrair imagens incorporadas.
asoundmove

Respostas:

92

Não está claro o que você quer dizer com "perda de qualidade". Isso pode significar muitas coisas diferentes. Você poderia postar algumas amostras para ilustrar? Talvez corte a mesma seção das versões de baixa qualidade e de boa qualidade (como um PNG para evitar mais perdas de qualidade).

Talvez você precise usar -densitypara fazer a conversão em um dpi mais alto:

convert -density 300 file.pdf page_%04d.jpg

(Você pode anexar -units PixelsPerInchou, -units PixelsPerCentimeterse necessário. Minha cópia é padronizada como ppi.)

Atualização: como você apontou, gscan2pdf(do jeito que você está usando) é apenas um invólucro para pdfimages(do poppler ). pdfimagesnão faz o mesmo que convertquando recebe um PDF como entrada.

convert pega o PDF, renderiza-o com alguma resolução e usa o bitmap resultante como imagem de origem.

pdfimagesprocura no PDF por imagens de bitmap incorporadas e exporta cada uma delas para um arquivo. Ele simplesmente ignora qualquer comando de desenho de texto ou vetor no PDF.

Como resultado, se o que você tem é um PDF que é apenas um invólucro em torno de uma série de bitmaps, pdfimagesfará um trabalho muito melhor de extraí-los, porque fornece os dados brutos no tamanho original. Você provavelmente também deseja usar a -jopção pdfimages, porque um PDF pode conter dados JPEG brutos. Por padrão, pdfimagesconverte tudo para o formato PNM, e converter JPEG> PPM> JPEG é um processo com perdas.

Então tente

pdfimages -j file.pdf page

Você pode ou não pode precisar a seguir que com um converta .jpgpasso (dependendo do que bitmap formatar o PDF estava usando).

Eu tentei esse comando em um PDF que eu havia criado a partir de uma sequência de imagens JPEG. Os JPEGs extraídos eram byte por byte idênticos às imagens de origem. Você não pode obter qualidade superior a isso.

cjm
fonte
+1 Estou tão feliz por não ter enviado à leitura esnobe de uma de suas frases inspiradas em mim e realmente experimentado o pdfimages - provavelmente o programa mais útil que já usei em meses! Eu incentivaria todos a experimentá-lo!
precisa saber é o seguinte
@ixtmixilix, estou curioso. O que você leu errado e como?
Cjm
Pretty awesome! Resolveu o meu dia. Obrigado!
Geppettvs D'Constanzo
converttambém é impraticável para PDFs grandes. Por exemplo, foram necessários 45 GB de memória para processar um livro de 700 páginas de 6 megapixels. Também demorou cerca de mil vezes mais que pdfimages.
Camille Goudeseune
Por outro lado, converta imagens em um pdf ou, melhor, agrupe imagens em um pdf, use img2pdf, aqui: gitlab.mister-muffin.de/josch/img2pdf ( agrupa jpg e jpg2000 em um pdf).
21416 erik
4

Como disse a resposta do aluno, pdfimagesé uma boa opção. Da minha experiência gse convertexportar para baixa qualidade, independentemente se você especificar o dpi correto.

Mas se o pdf tiver várias camadas por página pdfimagesnão funcionar e extrair as camadas como imagem separada, nesse caso, é melhor usar inskcapepara exportar a página como é vista.

Estes são os comandos que eu uso:

pdftk combined_to_do.pdf burst output pg_%04d.pdf
ls ./pg*.pdf | xargs -L1 -I {}  inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png

O primeiro comando divide todas as páginas. O segundo comando converte página por página em png. Você pode mantê-los png ou apenas convertê-los em jpeg

ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300 {}.jpg

Comparado com pdfimages, gse ImageMagick é convertque eu encontrar inkscapede exportação o melhor em qualidade.

Eduard Florinescu
fonte
3

a resposta do @cjm está correta, mas se você gosta de GUI e não deseja renderizar todas as páginas em pdf, apenas para obter uma imagem, use gimp.

Abra um pdf com o gimp e você receberá uma janela de importação com todas as páginas renderizadas. Escolha as páginas que você deseja e defina a resolução para 600 pix / polegada (eu achei 300 muito nítidas em muitos casos). Salve no formato desejado com "Arquivo / Exportar"

De qualquer forma, deve haver um sinalizador para selecionar as páginas desejadas na linha de comando.

albfan
fonte
2

Olhando para o código-fonte do gscan2pdf, notei que ele usa o pdfimages. Então pdfimages file.pdf pageresultaria em page-001.ppm, page-002.ppmetc.

aluna
fonte
pdfimages realmente faz o trabalho
Eduard Florinescu
2

O que não está claro em sua pergunta é se você fala sobre texto e gráficos vetoriais em seu PDF ou se seu PDF contém imagens incorporadas.

Depois de ler o que é o gscan2pdf, meu palpite é que seus arquivos PDF contêm (apenas) gráficos incorporados.

convertessencialmente "imprime" seu pdf sem considerar qual é o conteúdo. Como o @cjm sugere, convém alterar a densidade da impressão. Essa é a única maneira de aumentar a qualidade dos gráficos vetoriais.

Se, em vez disso, o que você deseja fazer é extrair imagens incorporadas (como o gscan2pdf parece fazer), supondo que a densidade geralmente leve a perda de qualidade ou qualidade superior à necessária (e desperdício de espaço em disco). A resposta então é extrair a imagem em vez de imprimir o pdf. Consulte este artigo, que defende basicamente o uso pdfimagespara extrair imagens sem perda de qualidade.

asoundmove
fonte