OVH Cloud OVH Cloud

Découper et rassembler des PDF

58 réponses
Avatar
Olivier Miakinen
[diapublications dans deux groupes, suivi vers fcolc seul, mais
il vaudrait peut-être mieux choisir fcal -- changez le suivi si
ça vous semble préférable]

Bonjour,

J'ai numérisé des recueils de partitions afin d'en faire des PDF
imprimables pour un ensemble vocal(¹). Le scanner me permet de
numériser les pages deux par deux, et il crée un PDF d'une page
par scan (sauf une fois où, sans que je comprenne pourquoi, il
a mis deux résultats de scan dans un PDF de deux pages).

Bref, pour un recueil de 7 pages, j'obtiens par exemple quatre PDF
contenant ceci :

+----+----+-+
| | | |
| | p1 | |
| | | |
+----+----+-+

+----+----+-+
| | | |
| p2 | p3 | |
| | | |
+----+----+-+

+----+----+-+
| | | |
| p4 | p5 | |
| | | |
+----+----+-+

+----+----+-+
| | | |
| p6 | p7 | |
| | | |
+----+----+-+

Je voudrais alors obtenir un seul PDF de sept pages :

+----+ +----+ +----+ +----+ +----+ +----+ +----+
| | | | | | | | | | | | | |
| p1 | | p2 | | p3 | | p4 | | p5 | | p6 | | p7 |
| | | | | | | | | | | | | |
+----+ +----+ +----+ +----+ +----+ +----+ +----+

Je voudrais savoir ce que vous me conseilleriez, sur Linux, pour le
faire le plus simplement possible. Vu que certains recueils peuvent
avoir beaucoup de pages, si c'était possible avec un outil en ligne
de commande plutôt qu'avec un cliquodrome ce serait encore mieux
(mais si ça n'existe pas, tant pis).

Pour fixer les idées, voici un exemple d'un PDF obtenu en sortie de
numérisation : <http://www.cjoint.com/15mi/EEvxS4BptI5_doc49.pdf>.

Cordialement,
--
Olivier Miakinen

Note (¹) : Pour ceux qui s'en inquièteraient, ce n'est pas illégal. En
effet, l'ensemble vocal a signé une convention avec la SEAM permettant,
avec un abonnement dépendant du nombre de choristes, d'acheter une seule
partition et d'en faire autant de photocopies qu'il y a de choristes :
<http://www.seamfrance.fr/les-conventions/chorales/>.

10 réponses

1 2 3 4 5
Avatar
Olivier Miakinen
Le 22/05/2015 19:31, Nicolas George a écrit :

Excellente suggestion. Je ne sais pas ce qui est le mieux entre
pdfimages et convert, mais l'un comme l'autre doivent me permettre
d'automatiser le boulot.



pdfimages extrait les images qui sont stockées dans le PDF. Si le PDF
contient du texte, pdfimages ne le voit pas du tout ; s'il y a plusieurs
images par page, pdfimages les extrait de manière indépendante.

convert opère un rendu du PDF (vectoriel) en une image bitmap.



D'accord. Il y a de grandes chances que pdfimages soit plus
adapté à mon cas, donc.
Avatar
Philippe
Le Fri, 22 May 2015 19:45:04 +0200, Olivier Miakinen a écrit :

Désolé, je croyais l'avoir expliqué dans mon premier article mais je viens
de m'apercevoir que je ne l'ai pas fait : le scanner n'est pas relié à mon
Linux (ni d'ailleurs à un Windows), mais il envoie le résultat du scan à
une adresse de courriel. L'utilisation de xsane est donc malheureusement
exclue.



Ça change la donne.
Il te faut scanner les pages paires avec un réglage d'acquisition adapté
puis les pages impaires avec un deuxième réglage.
Tu obtiendras alors un pdf par page, tout le reste a été dit. Pdfsam ou tout
autre fera le travail de concaténation des fichiers.
C'est la lourdeur du traitement sous forme d'images qu'il faut éviter.

Je suppose que ton scanner est rapide et que scanner en deux fois les pages
doubles prends moins de temps que tout le travail sur des fichiers image.


--
http://www.assemblee-nationale.fr/histoire/jaures/discours/responsables-guerre_25071914.asp
https://www.youtube.com/watch?v=EUoxRR5aRlI
Philippe Vessaire Ò¿Ó¬
Avatar
Nicolas George
Philippe , dans le message <mjnp5d$2gp$, a écrit :
C'est très lourd.



C'est l'ordinateur qui fait le boulot.

Scanner au plus prés de ce que l'on veux est bien plus efficace.



Ça dépend. Scanner au plus près nécessite d'apprendre à bien régler le
scanner, d'ajuster le positionnement physique des pages soigneusement, etc.
Tous ces ajustements peuvent se faire a posteriori par logiciel, c'est plus
lourd en calculs mais ça peut être plus confortable pour l'utilisateur.

On peut préférer passer moins de temps dans le local du scanner au prix de
devoir laisser l'ordinateur mouliner un peu, c'est un compromis intéressant
selon les circonstances.
Avatar
Olivier Miakinen
Le 22/05/2015 22:11, Nicolas George répondit à ma place à Philippe :

C'est très lourd.



C'est l'ordinateur qui fait le boulot.

Scanner au plus prés de ce que l'on veut est bien plus efficace.



Ça dépend. Scanner au plus près nécessite d'apprendre à bien régler le
scanner, d'ajuster le positionnement physique des pages soigneusement, etc.
Tous ces ajustements peuvent se faire a posteriori par logiciel, c'est plus
lourd en calculs mais ça peut être plus confortable pour l'utilisateur.

On peut préférer passer moins de temps dans le local du scanner au prix de
devoir laisser l'ordinateur mouliner un peu, c'est un compromis intéressant
selon les circonstances.



E-xac-te-ment !!! Je n'aurais pas mieux dit.
Avatar
Nicolas Richard
Nicolas George <nicolas$ writes:

"Nicolas Richard" , dans le message , a écrit :
$ convert un-joli-nom-000.pbm -crop 2050x+0+0 gauche.jpg
$ convert un-joli-nom-000.pbm -crop 2200x+2050+0 droite.jpg



Notons que si le scanner a compressé en JPEG, pdfimages -j va extraire les
JPEG (c'est à ça que sert le -j)



Cela n'était pas le cas sur le fichier exemple.

, et dans ce cas il vaut mieux utiliser
jpegtran, car il fait un crop sans pertes.



Je note néanmoins précieusement.

--
Nico.
Avatar
Olivier Miakinen
Bonjour

Le 22/05/2015 00:19, j'écrivais :

[...]

Bref, pour un recueil de 7 pages, j'obtiens par exemple quatre PDF
contenant ceci :

+----+----+-+
| | | |
| | p1 | |
| | | |
+----+----+-+

+----+----+-+
| | | |
| p2 | p3 | |
| | | |
+----+----+-+

+----+----+-+
| | | |
| p4 | p5 | |
| | | |
+----+----+-+

+----+----+-+
| | | |
| p6 | p7 | |
| | | |
+----+----+-+

Je voudrais alors obtenir un seul PDF de sept pages :

+----+ +----+ +----+ +----+ +----+ +----+ +----+
| | | | | | | | | | | | | |
| p1 | | p2 | | p3 | | p4 | | p5 | | p6 | | p7 |
| | | | | | | | | | | | | |
+----+ +----+ +----+ +----+ +----+ +----+ +----+



Pour ceux que cela intéresse, voici comment j'ai procédé pour un
résultat optimal.


1re étape : extraire les images des pdf
---------------------------------------

C'est l'une des deux étapes les plus faciles :

for i in *.pdf
do
pdfimages -j $i ${i%.pdf}
done

Bien entendu, si j'ai scanné plusieurs recueils à la suite,
je peux lancer ce mini-script sur l'ensemble de tous les scans.
C'est seulement après que je mets les fichiers résultants dans
des répertoires séparés, un répertoire par recueil.


2e étape : connaître la largeur des pages
-----------------------------------------

Vu comment j'ai scanné, les fichiers bitmap (.pbm) comportent
chacun deux pages de largeur x, plus une bande à droite :

0 x 2x
+----+----+-+
| | | |
| p2 | p3 | |
| | | |
+----+----+-+

Pour connaître la largeur des pages en nombre de pixels, je
lance GIMP sur quelques fichiers au hasard puis je pointe la
souris aux positions x et 2x pour voir s'afficher leur valeur.
Je choisis une valeur moyenne, mettons 2050 pour la suite des
explications.


3e étape : découper chaque bitmap et deux images jpeg
-----------------------------------------------------

Une méthode possible, celle proposée par Nicolas Richard, consiste
à lancer deux commandes, l'une pour l'image de gauche et l'autre
pour l'image de droite :

convert xxx.pbm -crop 2050x+0+0 gauche.jpg
convert xxx.pbm -crop 2050x+2050+0 droite.jpg

Mais je peux aussi obtenir en une seule commande un découpage en
mosaïque, tous les 2050 pixels :

convert xxx.pbm -crop 2050x xxx.jpg

En l'occurrence, ça me donnera trois images, xxx-0.jpg et xxx-1.jpg
étant les deux pages qui m'intéressent de 2050 pixels de large, et
xxx-2.jpg étant la bande inutile de droite (moins large).

Finalement, je fais ceci :

for i in *.pbm
do
convert $i -crop 2050x ${i%pbm}jpg
done
rm *-2.jpg

Pour m'y retrouver ensuite, je supprime les pages vides, et je
renomme les autres avec le numéro de la page : 01.jpg, 02.jpg,
et ainsi de suite (j'écrirais 001.jpg s'il y avait 100 pages
ou plus).


4e étape : redresser les images
-------------------------------

Lors du scan, même si j'ai mis le livre bien droit sur la glace
d'exposition du scanner, il arrive que les pages « bombent » un
peu, et tournent de moins d'un degré. La page de gauche et la
page de droite ne tournant pas dans le même sens, on ne peut
les redresser qu'après avoir séparé l'une de l'autre.

Pour cela, j'utilise GIMP. Une fois lancé, je commence par ouvrir
la boîte à outils (Ctrl+B), puis je double-clique sur l'outil de
rotation et je change la direction : au lieu de « Normale (en
avant) » je sélectionne « Corrective (en arrière) ». Ensuite,
pour chaque fichier je fais :
- Ctrl+O pour ouvrir le prochain fichier
- au besoin, changer le niveau de zoom
- cliquer dans l'image : la grille de rotation apparaît
- si l'orientation est correcte, Esc puis Ctrl+W
- sinon :
- tourner la grille jusqu'à l'aligner avec les portées
- bouton « Rotation »
- menu Fichier > Écraser nn.jpg
- Ctrl+W puis bouton « Abandonner les modifications »


5e étape : créer un nouveau pdf
-------------------------------

Voilà enfin l'étape la plus facile.

convert *.jpg le_titre.pdf

Et c'est fini !


Encore merci à tous ceux qui m'ont aidé à trouver cette solution.

Cordialement,
--
Olivier Miakinen
Avatar
Nicolas George
Olivier Miakinen , dans le message <mk4spf$196p$,
a écrit :
convert xxx.pbm -crop 2050x+0+0 gauche.jpg
convert xxx.pbm -crop 2050x+2050+0 droite.jpg



Évite le JPEG comme format intermédiaire.

convert *.jpg le_titre.pdf



Je ne suis pas certain que convert soit le meilleur outil pour produire du
PDF. Est-ce que pdfimages -j sur le fichier résultant te fournit des
fichiers exactement identiques à ceux de départ ?
Avatar
Benoit Izac
Olivier Miakinen <om+ writes:

3e étape : découper chaque bitmap et deux images jpeg
-----------------------------------------------------

Une méthode possible, celle proposée par Nicolas Richard, consiste
à lancer deux commandes, l'une pour l'image de gauche et l'autre
pour l'image de droite :

convert xxx.pbm -crop 2050x+0+0 gauche.jpg
convert xxx.pbm -crop 2050x+2050+0 droite.jpg

Mais je peux aussi obtenir en une seule commande un découpage en
mosaïque, tous les 2050 pixels :

convert xxx.pbm -crop 2050x xxx.jpg

En l'occurrence, ça me donnera trois images, xxx-0.jpg et xxx-1.jpg
étant les deux pages qui m'intéressent de 2050 pixels de large, et
xxx-2.jpg étant la bande inutile de droite (moins large).

Finalement, je fais ceci :

for i in *.pbm
do
convert $i -crop 2050x ${i%pbm}jpg
done
rm *-2.jpg



One shot:

for i in *.pbm; do
convert "$i" -crop 2050x -delete 2 "${i%pbm}jpg"
done

Pour m'y retrouver ensuite, je supprime les pages vides, et je
renomme les autres avec le numéro de la page : 01.jpg, 02.jpg,
et ainsi de suite (j'écrirais 001.jpg s'il y avait 100 pages
ou plus).



Si les pages sont dans l'ordre après qu'elles aient été scannées, une
solution légèrement différente afin d'éviter de renommer les fichiers
à la main (avec 100 ou plus, ça doit vite être pénible) :
- tu rognes à 4100 pour supprimer la bande blanche ;
- tu concatènes les images horizontalement (convert +append) ;
- tu rognes à 2050 en mettant %03d.jpg pour la sortie.

--
Benoit Izac
Avatar
Olivier Miakinen
Le 27/05/2015 19:10, Nicolas George m'a répondu :

convert xxx.pbm -crop 2050x+0+0 gauche.jpg
convert xxx.pbm -crop 2050x+2050+0 droite.jpg



Évite le JPEG comme format intermédiaire.



Quel format me conseilles-tu ? En particulier, est-ce que ceux qui
reliront mes PDF créés à partir d'images dans un format autre que
JPEG n'auront pas de problèmes, même s'ils sont sur Windows ou
Mac ?

Habituellement mon format de prédilection pour les images est le
PNG, mais comme Nicolas Richard m'avait donné des exemples en JPEG
je n'ai pas cherché plus loin.

convert *.jpg le_titre.pdf



Je ne suis pas certain que convert soit le meilleur outil pour produire du
PDF. Est-ce que pdfimages -j sur le fichier résultant te fournit des
fichiers exactement identiques à ceux de départ ?



Non, en effet, les fichiers obtenus sont alors un peu plus gros que
ceux de départ. Curieusement, quand je recommence l'opération, les
nouveaux fichiers sont un peu plus petits que ceux obtenus la
première fois (mais toujours plus gros que ceux de départ).


Mais j'ai aussi un autre problème : les fichiers images (pbm d'abord,
puis JPEG ou PNG ensuite), sont notablement plus gros que le PDF
d'origine, et le PDF résultant l'est encore plus !

Partant d'un fichier a.pdf de 30634 octets, j'obtiens successivement :

================================================================ -> 30 634 a.pdf

$ pdfimages -j a.pdf b
-> 2 109 453 b-000.pbm


$ convert b-000.pbm c.jpg
-> 897 805 c.jpg

$ convert c.jpg c.pdf
-> 900 078 c.pdf


$ convert b-000.pbm d.png
-> 79 687 d.png

$ convert c.jpg c.pdf
-> 114 949 d.pdf


$ convert b-000.pbm e.pdf
-> 430 745 e.pdf

$ pdfimages -j e.pdf f
-> 50 626 577 f-000.ppm
================================================================
Au secours !!!

Ah, j'ai aussi le curieux résultat suivant après pdfimages -j :

================================================================ $ identify a.pdf
a.pdf PDF 1224x792 1224x792+0+0 16-bit Bilevel DirectClass 121KB 0.000u
0:00.010

$ pdfimages -j a.pdf b
$ identify b-000.pbm
b-000.pbm PBM 5120x3296 5120x3296+0+0 1-bit Bilevel DirectClass 2.109MB
0.030u 0:00.030
================================================================
Les dimensions 1224x792 deviennet 5120x3296, soit 4,18 fois plus en X
et 4,16 fois plus en Y !

Cordialement,
--
Olivier Miakinen
Avatar
Nicolas George
Olivier Miakinen , dans le message <mk5h5g$2j5m$,
a écrit :
Quel format me conseilles-tu ? En particulier, est-ce que ceux qui
reliront mes PDF créés à partir d'images dans un format autre que
JPEG n'auront pas de problèmes, même s'ils sont sur Windows ou
Mac ?

Habituellement mon format de prédilection pour les images est le
PNG, mais comme Nicolas Richard m'avait donné des exemples en JPEG
je n'ai pas cherché plus loin.



Je pense que tu aurais besoin de te documenter un peu sur la différence
entre image bitmap et image vectorielle, et ensuite sur la différence, pour
les images bitmap, pour les formats compressés avec pertes et les formats
sans pertes (compressés ou non compressés). Tu sembles manquer de bases
théoriques pour bien comprendre ce que tu fais.

Comme format intermédiaire, il faut utiliser un format sans pertes. Si
l'espace disque occupé temporairement n'est pas un problème, un format sans
compression comme PNM fera parfaitement l'affaire.

$ pdfimages -j a.pdf b
-> 2 109 453 b-000.pbm



Soit 5120*3296/8+13. Le format PBM n'effectue aucune compression.

$ convert b-000.pbm c.jpg
-> 897 805 c.jpg



Tu peux obtenir un fichier beaucoup plus gros en ajoutant « -quality 100 »
et un fichier beaucoup plus petit en ajoutant « -quality 10 ».

$ convert c.jpg c.pdf
-> 900 078 c.pdf



Je n'ai aucune idée de la compression qu'ImageMagick utilise par défaut pour
stocker un bitmap dans un PDF. Pour fabriquer le fichier PDF fiablement à
partir des JPEG, pdfTeX est probablement le plus simple.

$ convert b-000.pbm d.png
-> 79 687 d.png



Apparemment, le PNG compresse assez mal ce genre d'image. Il y a des formats
plus adaptés aux images scannées. En général, on les appelle TIFF, mais
c'est un fourre-tout pour cinquante formats différents.

$ convert c.jpg c.pdf
-> 114 949 d.pdf



Ça semble incohérent.

Ah, j'ai aussi le curieux résultat suivant après pdfimages -j :

Les dimensions 1224x792 deviennet 5120x3296, soit 4,18 fois plus en X
et 4,16 fois plus en Y !



Ça, c'est parfaitement normal, c'est parce que tu utilises un outil
inadapté au PDF.

Le PDF est un format vectoriel, il n'a pas de taille en pixels, il n'a même
pas de pixels. Il a une taille physique, en centimètres (ou en pouces, peu
importe). Mais comme ImageMagick est un outil bitmap, il invente une grille
de pixels, avec une finesse arbitraire.

La densité choisie par ImageMagick par défaut change de version en version,
mais avec les données que montres, on dirait que tu as une double page au
format « Letter », soit 2×8,5 pouces par 11, qu'ImageMagick utilise une
densité de 72 pixels par pouce et que le fichier contient des images
scannées à 300 pixels par pouce avec un peu d'arrondi.
1 2 3 4 5