Table des matières
Convertir un document LibreOffice en JPEG ou PNG
Cette fiche regroupe plusieurs cas d'utilisation1)
Document multi-pages
Dans le cas d'usage, l'objectif est d'obtenir une image indépendante pour chaque page2).
La marche suivre comprend 2 étapes :
- exporter le document en PDF
- convertir le fichier PDF résultant en autant de fichiers-images que nécessaire
Concrètement…
- L'export en PDF se fait depuis LibreOffice (par exemple, à l'aide de la commande “Export direct au format PDF”)
- La conversion se fait en ligne de commande en utilisant la commande convert :
$ convert mon-fichier.pdf les-images.png
Dans cet exemple, les fichiers-images seront nommés “les-images-X.png” où “X” sera l'indice numérique de chaque image créée (initialisé à 0). S'agissant d'un document ne contenant que du texte, j'ai choisi le format png car il est plus compact que jpeg.
Il peut être souhaitable de rassembler les fichiers-images dans un (sous-)répertoire. Il faut que le répertoire existe avant de lancer la commande :
$ mkdir dossier-images $ convert -density 1080 mon-fichier.pdf ./dossier-images/les-images.png
Ici, les images seront générées dans la sous-répertoire “dossier-images” du répertoire courant où se trouve le fichier intermédiaire PDF. La valeur du paramètre density doit être adapté à la définition d'image souhaitée.
Transparence des PNG
Par defaut, convert génère des images PNG utilisant la transparence permise par ce format (canal alpha). Si on souhaite des images PNG sans transparence, il suffit de l'indiquer dans la commande :
$ convert -alpha remove mon-fichier.pdf les-images.png
Images dans le fichier source
Si le fichier source3) contient des images, une partie de la conversion peut échouer. Des messages d'erreurs en cascade s'afficheront dans le terminal, notamment4) :
convert-im6.q16: profile 'icc': 'RGB ': RGB color space not permitted on grayscale PNG `
Pour y remédier, on précise :
convert -define png:color-type=6 -density 1080 -alpha remove mon-fichier.pdf ./dossier-images/les-images.png
Une seule page d'un document
Dans le cas où on ne souhaite convertir qu'une seule page du document, tout se fait depuis LibreOffice.
- ouvrir le document,
- se positionner sur la page voulue,
- exporter la page courante au format souhaité en utilisant la commande d'export de LibreOffice.
Document mono-page
Dans ce cas5), on peut utiliser LibreOffice, en ligne de commande.
On se contentera d'un format de commande minimal :
$ soffice --convert-to jpg mon_document.odt
ou on tirera parti des possibilités de paramétrage :
$ soffice --convert-to png:writer_png_Export mon-doc.odt --outdir "./mon-page-en-image"
Cette dernière commande placera le fichier-image dans un sous-répertoire du répertoire courant contenant le fichier LibreOffice.
Outils
J'ai créé un modèle libreoffice writer pour composer les textes et un script pour générer les images d'un fichier multi-pages.
Modèle libreoffre writer
Pour composer les textes à mettre en image, j'utilise un modèle de document libreoffice adapté à mon besoin. Il s'agit d'une page dans un format carré (personnalisé) avec des marges très réduites (en dessous de celles de l'imprimante).
Compte tenu des polices et tailles de caractères choisies, il me permet d'écrire 14 lignes par page/image.
Script pour PixelFed
Pour me simplifier la vie j'ai écrit un script pour mettre en ligne des textes sous forme d'images sur PixelFed :
- pdf2pxf.sh
#!/bin/bash # Convertit un fichier pdf en une série d'images png # pour publication sur PixelFed # Utilisation : pdf2pxf.sh <mon-fichier> <mon-répertoire> if ! [[ -z "$2" ]] && ! [[ -d "$2" ]] then mkdir "$2" fi repertoire="$(dirname "$1")" radical="$(basename "$1")" [ ! -z "$2" ] && supplement="$2/" convert -define png:color-type=6 -density 1080 -alpha remove "$1" "$repertoire/$supplement""$radical.png"
