Converta cada pdf no diretório atual para png

14

Eu quero escrever um script bash para converter todos os arquivos .pdf no diretório atual em um arquivo .png . Por exemplo:

$ls .
a.pdf b.pdf
$./pdf2png.sh
Converting pdfs to pngs
a.pdf -> a.png
b.pdf -> b.png

Esta é minha melhor tentativa:

#!/bin/bash
convert -verbose -density 500 -resize '800' a.pdf a.png
convert -verbose -density 500 -resize '800' b.pdf b.png
    
por I Like to Code 25.03.2014 / 02:55

4 respostas

16

Se você tiver nomes estranhos realmente , que contenham novas linhas ou barras invertidas e afins, você pode fazer algo assim:

find . -type f -name '*.pdf' -print0 |
  while IFS= read -r -d '' file
    do convert -verbose -density 500 -resize 800 "${file}" "${file%.*}.png"
  done

Isso deve ser capaz de lidar com praticamente qualquer coisa que você jogue.

Truques usados:

  • find ... -print0 : faz com que find imprima seus resultados separados pelo caractere nulo, vamos lidar com as novas linhas.
  • IFS= : isso desativará a divisão de palavras, necessária para lidar com o espaço em branco.
  • read -r : desativa a interpretação de caracteres de escape de barra invertida para lidar com arquivos que contenham barras invertidas.
  • read -d '' : configura o delimitador de registro para o caractere nulo, para lidar com a saída do find e manipular corretamente nomes de arquivos com caracteres de nova linha.
  • ${file%.*}.png : usa as capacidades de manipulação de string internas do shell para remover a extensão.
por 25.03.2014 / 03:24
11

Você pode usar o bash for loop da seguinte forma:

#!/bin/bash
for pdfile in *.pdf ; do
  convert -verbose -density 500 -resize '800' "${pdfile}" "${pdfile%.*}".png
done
    
por 25.03.2014 / 03:04
5

Você pode usar mogrify para converter & redimensione todos os .pdf s no diretório atual:

mogrify -verbose -density 500 -resize 800 -format png ./*.pdf

Ao usar um diferente format (neste caso -format png ), o .pdf s original não será alterado, os arquivos de saída terão o mesmo nome, exceto a extensão que será alterada para a especificada por format .

    
por 13.09.2015 / 21:04
1

Se você não está restrito ao bash, então você pode usar um script python para converter todos os arquivos .pdf no diretório atual para .png images de alta resolução. Poderia ser modificado para outros tipos de imagem de entrada / saída ou para usar argumentos diferentes para convert .

#! /usr/bin/env python

import os

def main():
    dir_list = os.listdir('.')
    for full_file_name in dir_list:
        base_name, extension = os.path.splitext(full_file_name)
        if extension == '.pdf': # then .pdf file --> convert to image!
            cmd_str = ' '.join(['convert',
                                '-density 400',
                                full_file_name,
                                base_name + '.png'])
            print(cmd_str)  # echo command to terminal
            os.system(cmd_str)  # execute command

if __name__ == '__main__':
    main()
    
por 03.08.2017 / 21:37