Pdf2cbz

De Centre de Ressources Numériques - Labomedia
Révision de 31 mai 2018 à 20:01 par MrJO (discussion | contributions) (Page créée avec « '''Petit Script perso pour convertir des .PDF en archives .CBZ en bash (par JO) :''' == Déroulement du script == # listing de tous les pdf du répertoire # création d'... »)

(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Petit Script perso pour convertir des .PDF en archives .CBZ en bash (par JO) :

Déroulement du script

  1. listing de tous les pdf du répertoire
  2. création d'un répertoire temporaire du même nom que le .PDF
  3. extraction du .PDF page par page en fichiers .JPG dans le répertoire temporaire précédemment créé
  4. compression du répertoire au format .CBZ
  5. suppresion du répertoire temporaire

Configurations disponibles

  • DPI_CONVERT Qualité DPI du scan lors de la convertion (à augmenter pour améliorer le rendu des textes)
  • JPG_MAX_SIZE Taille max des images .JPG générés
  • JPG_QUALITY Qualité de la compression .JPG permetttant de réduire le poids final de l'archive (0=grosse compression, 100=aucune compression)
  • PROGRESS_BAR_WIDTH=20 Largeur de la barre de progression du script

Installation du script

Copiez simplement le script dans le dossier contenant vos .PDF et pensez à le rendre executable :
chmod +x pdf2cbz.sh

Le Script en question

#!/bin/bash

#######################################################################
#
# Conversion de tous les .PDF d'un répertoire en archives .CBZ
#
########################################################################

# Qualité DPI du scan de la conversion (augmenter pour améliorer le scan)
DPI_CONVERT=300

# Taille max des images .JPG. Exemple de taille optimale pour le format
# A4 en fonction du DPI : http://www.format-papier-a0-a1-a2-a3-a4-a5.fr
#
# 300DPI = 2480x3508
# 200DPI = 1654x2339
# 100DPI =  827x1170
#  72DPI =   596x842
JPG_MAX_SIZE=2480x3508

# Qualité de la compression .JPG (0=grosse compression, 100=aucune compression)
JPG_QUALITY=75

# Largeur de la barre de progression
PROGRESS_BAR_WIDTH=20

########################################################################
#
# NE PAS TOUCHER AU RESTE DU CODE SAUF SI VOUS SAVEZ CE QUE VOUS FAITE !
#
########################################################################

########################################################################
#
# Fonctions du script
#
########################################################################

show_progress_bar() {
	# Calcul le nombre de casee remplie/vide de la barre de progression
	progress=$(echo "$PROGRESS_BAR_WIDTH/$pages*$page" | bc -l)  
	fill=$(printf "%.0f\n" $progress)
	if [ $fill -gt $PROGRESS_BAR_WIDTH ]; then
		fill=$PROGRESS_BAR_WIDTH
	fi
	empty=$(($fill-$PROGRESS_BAR_WIDTH))

	# Calcul des pourcentage
	percent=$(echo "100/$pages*$page" | bc -l)
	percent=$(printf "%0.2f\n" "$percent")
	if [ $(echo "$percent>100" | bc) -gt 0 ]; then
		percent="100.00"
	fi

	# Affichage
	printf "\r# ["
	printf "%${fill}s" '' | tr ' ' '#'
	printf "%${empty}s" '' | tr ' ' ' '
	printf "] $percent%% - $show_text "
}

########################################################################
#
# Déroulement du script
#
########################################################################

echo ""
echo "### CONVERSION DE TOUS LES .PDF DU RÉPERTOIRE EN ARCHIVES .CBZ"

export LC_NUMERIC="en_US.UTF-8"

for pdf in *.pdf; do
	echo "#"
	echo "# CONVERSION : \"$pdf\""

	echo "# - création du répertoire : \"${pdf%.*}\""
	mkdir "${pdf%.*}"

	pages=$(strings < "$pdf" | sed -n 's|.*/Count -\{0,1\}\([0-9]\{1,\}\).*|\1|p' | sort -rn | head -n 1)
	# nombre de pages incorrecte, on essait avec pdfinfo
	if [ -z "$pages" ]; then
		pages=$(pdfinfo "$pdf" | grep Pages | awk '{print $2}')
	fi
	page=0

	echo "# - extraction du PDF : \"$pdf\" ($pages pages)"
	while [ $page -lt $pages ]; do
		show_text=$(echo "page $(( $page + 1 ))/$pages - $pdf")
		show_progress_bar $pages $page $show_text
		convert -quality $JPG_QUALITY -density $DPI_CONVERT -resize $JPG_MAX_SIZE\> "$pdf"["$page"] "${pdf%.*}"/P%07d.jpg;
		page=$(( $page + 1 ))
	done
	printf "\r"; printf " %0.s" {0..100}; printf "\r";

	echo "# - création de l'archive : \"${pdf%.*}.cbz\""
	zip -r -q "${pdf%.*}.cbz" "${pdf%.*}"

	echo "# - suppression du répertoire : \"${pdf%.*}\""
	rm -r "${pdf%.*}"
done

exit 0