====== Manipuler des PDF sous Linux ? ======

===== Liste des programmes  =====

**pdfshuffler** (PDF file merging, rearranging, and splitting)\\
Concaténer, séparer ou modifier l'ordre des pages des fichiers PDF.

**pdfmod** (A simple application for modifying PDF documents)

**poppler** (Command line utilities for converting PDF files)

**pdftk** 

**pdf chain**

===== pdfmod =====

==== Installer pdfmod ====

{{ informatique:cfp:ico_pdfmod.png?direct|}}

Executer l'installation :
<code>sudo dnf install pdfmod</code>

Résultat :
<code>
Dernière vérification de l’expiration des métadonnées effectuée il y a 1:48:37 le sam. 29 juil. 2017 18:27:15 CEST.
Dépendances résolues.
================================================================================
 Paquet               Architecture  Version                 Dépôt         Taille
================================================================================
Installation de :
 pdfmod               x86_64        0.9.1-15.fc26           fedora        723 k
Installation des dépendances:
 gnome-sharp          x86_64        2.24.2-13.fc26          fedora        315 k
 gtk-sharp2           x86_64        2.12.42-2.fc26          fedora        702 k
 hyena                x86_64        0.5-15.fc26             fedora        355 k
 nunit                x86_64        3.6-2.fc26              fedora        369 k
 poppler-sharp        x86_64        0.0.3-13.fc26           fedora         34 k

Résumé de la transaction
================================================================================
Installer  6 Paquets

Taille totale des téléchargements : 2.4 M
Taille des paquets installés : 8.4 M
Voulez-vous continuer ? [o/N] :o
Téléchargement des paquets :
(1/6): gnome-sharp-2.24.2-13.fc26.x86_64.rpm    190 kB/s | 315 kB     00:01    
(2/6): hyena-0.5-15.fc26.x86_64.rpm             217 kB/s | 355 kB     00:01    
(3/6): poppler-sharp-0.0.3-13.fc26.x86_64.rpm   158 kB/s |  34 kB     00:00    
(4/6): pdfmod-0.9.1-15.fc26.x86_64.rpm          206 kB/s | 723 kB     00:03    
(5/6): gtk-sharp2-2.12.42-2.fc26.x86_64.rpm     159 kB/s | 702 kB     00:04    
(6/6): nunit-3.6-2.fc26.x86_64.rpm              333 kB/s | 369 kB     00:01    
--------------------------------------------------------------------------------
Total                                           478 kB/s | 2.4 MB     00:05     
Test de la transaction en cours
La vérification de la transaction a réussi.
Lancement de la transaction de test
Transaction de test réussie.
Exécution de la transaction
  Préparation           :                                                   1/1 
  Installation de       : gtk-sharp2-2.12.42-2.fc26.x86_64                  1/6 
  Exécution du scriptlet: gtk-sharp2-2.12.42-2.fc26.x86_64                  1/6 
  Installation de       : gnome-sharp-2.24.2-13.fc26.x86_64                 2/6 
  Exécution du scriptlet: gnome-sharp-2.24.2-13.fc26.x86_64                 2/6 
  Installation de       : poppler-sharp-0.0.3-13.fc26.x86_64                3/6 
  Installation de       : nunit-3.6-2.fc26.x86_64                           4/6 
  Installation de       : hyena-0.5-15.fc26.x86_64                          5/6 
  Installation de       : pdfmod-0.9.1-15.fc26.x86_64                       6/6 
  Exécution du scriptlet: pdfmod-0.9.1-15.fc26.x86_64                       6/6 
  Vérification de       : pdfmod-0.9.1-15.fc26.x86_64                       1/6 
  Vérification de       : gnome-sharp-2.24.2-13.fc26.x86_64                 2/6 
  Vérification de       : gtk-sharp2-2.12.42-2.fc26.x86_64                  3/6 
  Vérification de       : hyena-0.5-15.fc26.x86_64                          4/6 
  Vérification de       : poppler-sharp-0.0.3-13.fc26.x86_64                5/6 
  Vérification de       : nunit-3.6-2.fc26.x86_64                           6/6 

Installé :
  pdfmod.x86_64 0.9.1-15.fc26           gnome-sharp.x86_64 2.24.2-13.fc26      
  gtk-sharp2.x86_64 2.12.42-2.fc26      hyena.x86_64 0.5-15.fc26               
  nunit.x86_64 3.6-2.fc26               poppler-sharp.x86_64 0.0.3-13.fc26     

Terminé !
</code>


===== pdf shuffler =====

==== Installer pdf shuffler ====

{{ informatique:cfp:ico_pdfshuffler.png?direct|}}

Exécuter l'installation :

<code>
sudo dnf install pdfshuffler
</code>


Résultat :
<code>
Dernière vérification de l’expiration des métadonnées effectuée il y a 1:59:55 le sam. 29 juil. 2017 18:27:15 CEST.
Dépendances résolues.
================================================================================
 Paquet              Architecture   Version                Dépôt          Taille
================================================================================
Installation de :
 pdfshuffler         noarch         0.6.0-10.fc26          fedora          69 k
Installation des dépendances:
 pyPdf               noarch         1.13-13.fc26           fedora          73 k
 pypoppler           x86_64         0.12.2-5.fc26          fedora          31 k

Résumé de la transaction
================================================================================
Installer  3 Paquets

Taille totale des téléchargements : 173 k
Taille des paquets installés : 636 k
Voulez-vous continuer ? [o/N] :o
Téléchargement des paquets :
(1/3): pypoppler-0.12.2-5.fc26.x86_64.rpm        19 kB/s |  31 kB     00:01    
(2/3): pdfshuffler-0.6.0-10.fc26.noarch.rpm      19 kB/s |  69 kB     00:03    
(3/3): pyPdf-1.13-13.fc26.noarch.rpm             15 kB/s |  73 kB     00:04    
--------------------------------------------------------------------------------
Total                                            29 kB/s | 173 kB     00:05     
Test de la transaction en cours
La vérification de la transaction a réussi.
Lancement de la transaction de test
Transaction de test réussie.
Exécution de la transaction
  Préparation           :                                                   1/1 
  Installation de       : pypoppler-0.12.2-5.fc26.x86_64                    1/3 
  Installation de       : pyPdf-1.13-13.fc26.noarch                         2/3 
  Installation de       : pdfshuffler-0.6.0-10.fc26.noarch                  3/3 
  Exécution du scriptlet: pdfshuffler-0.6.0-10.fc26.noarch                  3/3 
  Vérification de       : pdfshuffler-0.6.0-10.fc26.noarch                  1/3 
  Vérification de       : pyPdf-1.13-13.fc26.noarch                         2/3 
  Vérification de       : pypoppler-0.12.2-5.fc26.x86_64                    3/3 

Installé :
  pdfshuffler.noarch 0.6.0-10.fc26           pyPdf.noarch 1.13-13.fc26          
  pypoppler.x86_64 0.12.2-5.fc26            

Terminé !

</code>

==== Utiliser pdf shuffler ====

{{ informatique:cfp:pdfshuffler_capture.png?direct |}}


===== Poppler =====

==== Installer poppler ====

{{ informatique:cfp:ico_poppler.gif?direct|}}

Exécuter l'installation :

<code>
sudo dnf install poppler-utils
</code>

==== Utiliser poppler ====

**poppler-utils** est un collection d'outils qui s'appuie sur l'API **poppler** pour éditer et modifier les fichiers PDF.
  * **pdfdetach** extract embedded documents from a PDF
  * **pdffonts** lists the fonts used in a PDF
  * **pdfimages** extract all embedded images at native resolution from a PDF
  * **pdfinfo** list all infos of a PDF
  * **pdfseparate** extract single pages from a PDF
  * **pdftocairo** convert single pages from a PDF to vector or bitmap formats using cairo
  * **pdftohtml** convert PDF to HTML format retaining formatting
  * **pdftoppm** convert a PDF page to a bitmap
  * **pdftops** convert PDF to printable PS format
  * **pdftotext** extract all text from PDF
  * **pdfunite** merges several PDF

The popper-utils package provides several different commands for interacting with and modifying PDF files. However, the two commands that help us the most here are **pdfseparate** and **pdfunite**. 

**pdfseparate** extracts pages into multiple PDFs that we can later merge together with **pdfunite**. To extract all the pages of a document into individual files, use:

<code>
pdfseparate ColoringBook.pdf ColoringBook-page_%d.pdf
</code>

To export a range of pages — say just pages 3,4,5,6,7,8 and 9 of a PDF — use the command:

<code>
pdfseparate -f 3 -l 9 ColoringBook.pdf ColoringBook-page_%d.pdf
</code>

Finally, after using **pdfseparate**, if we wanted to create a new document (NewColoringBook.pdf) with ColoringBook-page_3.pdf and ColoringBook-page_3.pdf we could use the following **pdfunite** command:

<code>
pdfunite ColoringBook-page_3.pdf ColoringBook-page_7.pdf NewColoringBook.pdf
</code>

  
===== PDFTK =====

==== Installer le programme PDFTK ====
<code>yum install pdftk</code>

==== Utiliser PDFTK ====

Assembler (merge, join) plusieurs fichiers PDF en un seul nouveau fichier PDF
Syntaxe
<code>pdftk P1 cat output P2</code>

  * P1 - source - correspond à la liste de fichiers à assembler
  * P2 - destination - correspond au fichier créé avec les documents PDF assemblés.

==== Exemple ====

Assembler in1.pdf et in2.pdf dans un nouveau fichier out1.pdf :
<code>pdftk in1.pdf in2.pdf cat output out2.pdf</code>

==== Remarque ====

Si PDFMERGE est installé sur votre poste, il rempli aussi cette fonctionnalité :
<code>pdfmerge file1.pdf file2.pdf... fileN.pdf outfile.pdf</code>


===== PDF Chain =====

PDF Chain est une interface graphique pour PDF Toolkit (pdftk). Cette interface supporte toutes les commandes disponibles dans PDF Toolkit.


===== ImageMagick =====

==== Installer ImageMagick ====

> Fedora 30

Sous **Fedora 30**, il suffit d’exécuter **dnf** pour installer le paquet présent dans des dépots **fedora** et ** updates **.

  $ sudo dnf install ImageMagick
  
Les dépendances à d'autres paquets sont les suivantes :

   provider: ImageMagick-libs-1:6.9.10.75-1.fc30.x86_64
   provider: glibc-2.29-27.fc30.x86_64
   provider: glibc-2.29-27.fc30.i686


===== - La compil' des questions =====


==== - Recompiler un fichier PDF (pdftocairo et popple) ====


Dans un dossier vide, copier le fichier PDF à traiter. Se placer dans ce dossier avec la commande ''cd'' puis exécuter les commandes suivantes.

## Convertir le fichier PDF en plusieurs fichiers JPEG avec **poppler** :

  $ pdftocairo `ls -v *.jpg` -jpeg

## Convertir les fichiers JPEG et les assembler en un fichier PDF avec **ImageMagick** :

  $ convert `ls -v *.jpg` "final.pdf"

## Effacer les fichiers temporaires :

  $ rm *.jpg
  
Le fichier ''final.pdf'' est prêt.


==== - Recompiler un fichier PDF (gs via ps) ====

Voici une méthode avec les prorgrammes **pdf2ps** et **ps2pdf** en ligne de commande. Ces programmes sont intégrés au paquets **GhostScript**.

On considère que l'on souhaite transformer le fichier nommé **livre.pdf**. Le résultat sera dans le fichier **livre-opti.pdf**

<code>
pdf2ps livre.pdf inter.ps
ps2pdf -dPDFSETTINGS=/prepress inter.ps livre-opti.pdf 
</code>

L'option **dPDFSETTINGS** défini la qualité d'image issue du fichier PDF. Elle peut prendre les valeurs (du moins bon au meilleur résultat) **/screen**, **/default**, **/ebook**, **/printer**, **/prepress**


==== - Recompiler un fichier PDF (gs) ====

Voici une méthode avec les prorgrammes **gs** en ligne de commande. Le programme **gs** s'appelle **GhostScript** qui est un interpreteur de langage PDF et PS.

On considère que l'on souhaite transformer le fichier nommé **livre.pdf**. Le résultat sera dans le fichier **livre-opti.pdf**

<code>
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -sOutputFile=livre-opti.pdf livre.pdf
</code>

L'option **dPDFSETTINGS** défini la qualité d'image issue du fichier PDF. Elle peut prendre les valeurs (du moins bon au meilleur résultat) **/screen**, **/default**, **/ebook**, **/printer**, **/prepress**

==== - Extraire le texte présent dans un PDF ====

Votre fichier PDF peut contenir un ensemble de textes. Celui-ci peut être extrait directement en fichier texte.
Voici une méthode avec le prorgramme **pdftotext** en ligne de commande. Ce programme fait partie de la suite **poppler-utils**.

On considère que l'on souhaite extraire le texte présent dans le fichier nommé **livre.pdf**. Le résultat sera dans le fichier **livre.txt**

<code>
pdftotext livre.pdf livre.txt
</code>


==== - Deviner le texte d'un fichier PDF ====

Si votre fichier PDF ne comporte que des images, il est nécessaire de ''deviner'' le texte présent. Il s'agit de la méthode OCR. Voici une méthode avec le prorgramme **ocrmypdf** en ligne de commande.

Ce programme peut être installé avec la commande :
  sudo apt install ocrmypdf

On considère que l'on souhaite extraire le texte présent dans le fichier nommé **livre.pdf**. Le résultat sera dans le fichier **livre.txt**

<code>
ocrmypdf livre.pdf livre.txt -l fra
</code>

Le dictionnaire OCR s'appuie sur le programme **tesseract**. Il faut installer le dictionnaire que l'on souhaite utiliser par la suite :
  sudo apt install tesseract-ocr-fra



