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

2 3 4 5 6
Avatar
Olivier Miakinen
Le 29/05/2015 14:51, Nicolas George m'a répondu :

[...]



Oui, c'est bien ça.



Ok, ça me rassure. ;-)

Quant aux images vectorielles, je n'y
connais rien du tout, mais je pensais naïvement que ça ne pouvait pas
être utile pour représenter le résultat d'une numérisation par scanner.



En théorie, oui. En pratique, les formats bitmap ne sont pas pratiques quand
il y a plusieurs pages, les outils sont mauvais pour les imprimer en pleine
page, etc., donc les scanners produisent un PDF, pour avoir plusieurs pages
et stocker la taille physique de manière fiable. Chaque page est juste une
seule image bitmap qui occupe toute la place, et stockée de manière plus
efficace que des millions de carrés colorés côte à côte.



Merci, tu m'apprends effectivement quelque chose : qu'un PDF stocke
la taille physique, ce dont je n'avais pas pris conscience. Je savais
bien en revanche qu'un bitmap ne représente qu'une taille en pixels.

J'ajoute que, vu que le but de la manoeuvre est de donner une partition
musicale lisible et pas de reproduire fidèlement une oeuvre picturale,
il ne me semblait pas très grave d'utiliser un format avec pertes
plutôt qu'un format sans pertes.



Ce serait un argument pertinent si ça t'apportait quelque chose de
travailler avec un format à pertes comme format intermédiaire, mais tel
quel, tu n'y gagnes rien, donc autant utiliser la solution propre.



Je suis d'accord.

--
Olivier Miakinen
Avatar
Nicolas George
Olivier Miakinen , dans le message <mkd9s6$1esf$,
a écrit :
Je savais
bien en revanche qu'un bitmap ne représente qu'une taille en pixels.



Certains formats permettent de stocker la taille physique en plus, quand ça
a un sens. Mais ce n'est pas vrai pour tous les formats, et la plupart des
outils n'en font pas grand chose.
Avatar
Olivier Miakinen
Le 30/05/2015 19:09, Lucas Levrel m'a répondu :

============================================================== >> Mettons que tu aies scan1.pdf à scan4.pdf

for i in {1..4}
do pdfcrop --bbox '0 0 500 842' scan$i.pdf page$i_a.pdf
pdfcrop --bbox '500 0 1000 842' scan$i.pdf page$i_b.pdf
done
pdfjoin page*.pdf -o fini.pdf
============================================================== >>
Question : comment je détermine les valeurs 500, 1000 et 842 ?



Ah oui. En ouvrant le pdf avec gv, on a un pointeur dont les coordonnées
sont indiquées sur le côté. Les dimensions sont en points (je ne sais plus
si c'est 72 ou 72,27 points par pouce, mais pour ce que ça change ici...).



Je viens d'essayer, et en effet ça fonctionne.

Pour
ça il faudrait un code TeX avec des includegraphics, c'est plus lourd,



... de plus, je ne connais strictement rien à TeX.



Tu as bien découvert un certain nombre de commandes dans ce fil, ce ne
sont pas quatre ou cinq commandes TeX qui vont te faire fuir ! :-)



Non, bien sûr, je serai ravi d'apprendre.

Quant à la première, je ne sais pas plus comment déterminer les angles
de rotation (deux par PDF)



Toujours avec ta méthode. Gimp sait ouvrir du PDF.



Du coup je n'ai pas besoin de gv : Gimp me donne à la fois les tailles
pour le 'crop' (les mêmes valeurs que gv) et les angles de rotation.
Puisque ce n'est pas lui que j'utilise pour découper et tourner, autant
que je note toutes les valeurs en une seule fois sur le PDF d'origine
à deux pages.

Bref, je persiste à penser que c'est trop difficile de ne pas passer
par des images individuelles que je sais lire et traiter avec GIMP.



Vu que Gimp peut ouvrir du PDF, ma méthode répond à ces critères. ;-)
Tu coupes en images avec les pdfcrop, tu ouvres les pages avec Gimp pour
mesurer les angles, tu les écris au fur et à mesure « là où il faut » dans
le source tex, et zou !



Tu veux bien m'aider pour la partie tex ? Supposons que j'ai trois
PDF scan1.pdf, scan2.pdf et scan3.pdf et que je trouve les valeurs
suivantes :
crop :
'0 0 725 1435' à gauche, '725 0 1450 1435' à droite
rotations :
scan1.pdf : -0.30 à gauche, +0.20 à droite
scan2.pdf : -0.10 à gauche, +0.20 à droite
scan3.pdf : -0.30 à gauche, +0.30 à droite

Comment je demande à pdfcrop + tex de faire le boulot ?

Cordialement,
--
Olivier Miakinen
Avatar
Olivier Miakinen
Le 30/05/2015 23:27, Nicolas George m'a répondu :
Je savais
bien en revanche qu'un bitmap ne représente qu'une taille en pixels.



Certains formats permettent de stocker la taille physique en plus, quand ça
a un sens. Mais ce n'est pas vrai pour tous les formats, et la plupart des
outils n'en font pas grand chose.



Ok, merci pour le renseignement même si, comme les outils, je ne vais
du coup pas en faire grand chose ! C'est au moins une connaissance de
plus, et rien que ça c'est précieux.
Avatar
Olivier Miakinen
Le 30/05/2015 23:47, j'écrivais :

Du coup je n'ai pas besoin de gv : Gimp me donne à la fois les tailles
pour le 'crop' (les mêmes valeurs que gv) et les angles de rotation.



Bon, je ne sais pas ce que j'ai bu avant d'écrire ça, mais c'est faux
pour les tailles : non seulement ce n'est pas la même échelle, mais ce
n'est pas non plus la même orientation. Pour gv et pdfcrop l'origine
est en bas à gauche, alors que pour Gimp elle est en haut.
Avatar
Lucas Levrel
Le 30 mai 2015, Olivier Miakinen a écrit :

Tu veux bien m'aider pour la partie tex ? Supposons que j'ai trois
PDF scan1.pdf, scan2.pdf et scan3.pdf et que je trouve les valeurs
suivantes :
crop :
'0 0 725 1435' à gauche, '725 0 1450 1435' à droite
rotations :
scan1.pdf : -0.30 à gauche, +0.20 à droite
scan2.pdf : -0.10 à gauche, +0.20 à droite
scan3.pdf : -0.30 à gauche, +0.30 à droite

Comment je demande à pdfcrop + tex de faire le boulot ?



Tu peux utiliser pdfcrop si tu veux des fichiers indépendants, mais ce
n'est pas nécessaire si tu peux mesurer les angles sur le PDF à deux
pages.

Vu ton message suivant, je suppose que les nombres que tu donnes sont
erronés. (Une page A4 fait 595x842 points.) Je vais reprendre mon
estimation de 500 points de large, tu adapteras.

--- partoches.tex ---
documentclass{minimal}
% Ceci est un commentaire.
usepackage[a4paper,centering,height€0pt,widthQ0pt]{geometry}
% Les dimensions définissent la taille de la zone d'écriture (si tu essaies
% d'écrire au-delà ça peut marcher mais tu as un warning). Cette zone sera
% centrée dans la page.
usepackage{graphicx}% paquet qui permet d'inclure des PDF (entre autres)
begin{document}
raggedbottom
% Les images seront alignées en haut dans la zone d'écriture, il n'y aura
% pas de warning s'il reste du blanc en-dessous.
centering
% Les images seront centrées horizontalement.
includegraphics[viewport=0 0 500 792,angle=-0.3,clip]{scan1}par
% Le signe de l'angle suit la convention trigo.
% "par" dit d'aller à la ligne, pas de warning si l'image n'occupe pas
% toute la largeur.
includegraphics[viewportP0 0 1000 792,angle=0.2,clip]{scan1}par
includegraphics[viewport=0 0 500 792,angle=-0.1,clip]{scan2}par
includegraphics[viewportP0 0 1000 792,angle=0.2,clip]{scan2}par
includegraphics[viewport=0 0 500 792,angle=-0.3,clip]{scan3}par
includegraphics[viewportP0 0 1000 792,angle=0.3,clip]{scan3}par
end{document}
---------------------

Si tu as un PDF multipage, tu n'es pas obligé de le couper, tu peux
ajouter une option pageB à la commande includegraphics. Pour visualiser
l'emplacement occupé par une image, tu peux ajouter l'option draft qui
affichera un cadre à la place de l'image (peut être utilisée en option de
usepackage{graphicx}, l'effet sera alors global).

Compilation : pdflatex partoches.tex

Documentation : texdoc nom_du_paquet

Aide en ligne : fr.comp.text.tex !

--
LL
Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
C'est mieux avé les accents (F. Patte)
Avatar
Olivier Miakinen
Le 31/05/2015 23:06, Lucas Levrel m'a répondu :

Tu veux bien m'aider pour la partie tex ? [...]
Comment je demande à pdfcrop + tex de faire le boulot ?



Tu peux utiliser pdfcrop si tu veux des fichiers indépendants, mais ce
n'est pas nécessaire si tu peux mesurer les angles sur le PDF à deux
pages.



J'ai essayé, mais c'est quand même moins pratique que sur les images
seules ou les PDF à une seule page. Alors comme je suis obligé de
toute manière d'utiliser deux outils différents (gv pour les valeurs
de x et y, gimp pour les angles) je passe par les pdfcrop ; j'ai fait
un petit script pour automatiser ça.

Pour ce qui est du renommage de tous les fichiers, là j'ai eu la
flemme d'écrire un script traitant les différents cas ; par exemple
les partitions peuvent commencer à la page 1, mais parfois il y a
une table des matières ou une page de titre, et les partitions
commencent en page 3 ou en page 5. Du coup j'ai téléchargé un
clickodrome open-source en python, métamorphose2 :
<http://file-folder-ren.sourceforge.net/>.

Vu ton message suivant, je suppose que les nombres que tu donnes sont
erronés. (Une page A4 fait 595x842 points.) Je vais reprendre mon
estimation de 500 points de large, tu adapteras.



C'était une très bonne estimation. Pour trois des recueils que j'ai en
ce moment j'ai choisi 494, et pour le quatrième 520. Je crois que le
fichier que j'avais donné en exemple provenait de l'un des recueils à
494. Mais bon, je l'ai fait avec pdfcrop.

--- partoches.tex ---



Je n'ai pas encore essayé mais je vais le faire dès que j'ai fini de
rédiger cette réponse.

documentclass{minimal}
% Ceci est un commentaire.
usepackage[a4paper,centering,height€0pt,widthQ0pt]{geometry}
% Les dimensions définissent la taille de la zone d'écriture (si tu essaies
% d'écrire au-delà ça peut marcher mais tu as un warning). Cette zone sera
% centrée dans la page.



Ces valeurs de height et width inférieures à celles d'une page A4
(800 < 842 et 510 < 595) sont faites pour réserver une marge suffisante
autour de l'image ? Si oui, et s'il y a déjà une marge dans les PDF
d'origine, est-il nécessaire d'en remettre une ?

usepackage{graphicx}% paquet qui permet d'inclure des PDF (entre autres)
begin{document}
raggedbottom
% Les images seront alignées en haut dans la zone d'écriture, il n'y aura
% pas de warning s'il reste du blanc en-dessous.
centering
% Les images seront centrées horizontalement.



Ok.

includegraphics[viewport=0 0 500 792,angle=-0.3,clip]{scan1}par



Puisque j'ai déjà fait les pdfcrop, je suppose que je peux supprimer
l'option viewport pour ne garder que l'option angle.

En ce qui concerne l'option clip, j'ai consulté un certain nombre de
pages de doc sur la toile, et sur toutes j'ai vu la même chose :
l'option clip était mise en même temps que l'option viewport ou
l'option trim, avec souvent un commentaire du style « il faut mettre
clip pour que le trim fonctionne ». Du coup, j'ai du mal à comprendre
pourquoi cette option clip a été définie si elle n'est en fait pas
optionnelle...

% Le signe de l'angle suit la convention trigo.



Sauf erreur de ma part, je n'ai donc pas besoin de changer le signe de
la valeur d'angle que me donne Gimp.

% "par" dit d'aller à la ligne, pas de warning si l'image n'occupe pas
% toute la largeur.



Ok.

includegraphics[viewportP0 0 1000 792,angle=0.2,clip]{scan1}par
includegraphics[viewport=0 0 500 792,angle=-0.1,clip]{scan2}par
includegraphics[viewportP0 0 1000 792,angle=0.2,clip]{scan2}par
includegraphics[viewport=0 0 500 792,angle=-0.3,clip]{scan3}par
includegraphics[viewportP0 0 1000 792,angle=0.3,clip]{scan3}par
end{document}
---------------------

Si tu as un PDF multipage, tu n'es pas obligé de le couper, tu peux
ajouter une option pageB à la commande includegraphics.



Je ne sais pas si ça me servira, mais merci pour l'info, je saurai la
retrouver si j'en ai besoin. Pour le moment il se trouve que je n'ai
pas su dire au scanner d'envoyer plusieurs pages dans un seul courriel,
mais j'espère progresser aussi dans la connaissance de cet engin.

Pour visualiser
l'emplacement occupé par une image, tu peux ajouter l'option draft qui
affichera un cadre à la place de l'image (peut être utilisée en option de
usepackage{graphicx}, l'effet sera alors global).



Je ne suis pas sûr d'avoir compris ce que ça fait, mais je pense
l'essayer pour voir.

Compilation : pdflatex partoches.tex



C'est tout simple.

Documentation : texdoc nom_du_paquet



Oups ! J'aurais dû lire jusque là avant de commencer à te répondre.
Je viens de lancer la commande « texdoc graphicx » et je suppose que
je peux y trouver la réponse à mes interrogations sur 'clip'.

Aide en ligne : fr.comp.text.tex !



Et moi qui pensais que j'allais apprendre perl avant tex ! Ok, je
m'y abonne.


Cordialement,
--
Olivier Miakinen
Avatar
Olivier Miakinen
Le 01/06/2015 23:22, je répondais à Lucas Levrel :

Je n'ai pas encore essayé mais je vais le faire dès que j'ai fini de
rédiger cette réponse.



Ça y est, j'ai fait quelques essais (en laissant les options angle et
clip mais pas viewport).

Ici je supprime les commentaires car ils font plus de 72 caractères
par ligne et mon nouvelleur les envoie à la ligne :
---------------------------------------------------------------------
documentclass{minimal}
usepackage[a4paper,centering,height€0pt,widthQ0pt]{geometry}
usepackage{graphicx}
begin{document}
raggedbottom
centering
includegraphics[angle=0,clip]{03}par
includegraphics[angle=-0.5,clip]{04}par
includegraphics[angle=-0.3,clip]{05}par
includegraphics[angle=-0.4,clip]{06}par
includegraphics[angle=-0.4,clip]{07}par
includegraphics[angle=-0.5,clip]{08}par
includegraphics[angle=-0.4,clip]{09}par
includegraphics[angle=-0.5,clip]{10}par
end{document}
---------------------------------------------------------------------

C'est bô ! Par contre, comme je le craignais ça rajoute une marge
de chaque côté des pages, alors que le résultat était bon après les
pdfcrop.

P.-S. : je n'ose pas encore faire suivre vers fr.comp.text.tex car
je n'ai pas lu les autres articles du groupe.

Cordialement,
--
Olivier Miakinen
Avatar
Lucas Levrel
Le 1 juin 2015, Olivier Miakinen a écrit :

documentclass{minimal}
% Ceci est un commentaire.
usepackage[a4paper,centering,height€0pt,widthQ0pt]{geometry}
% Les dimensions définissent la taille de la zone d'écriture (si tu essaies
% d'écrire au-delà ça peut marcher mais tu as un warning). Cette zone sera
% centrée dans la page.



Ces valeurs de height et width inférieures à celles d'une page A4
(800 < 842 et 510 < 595) sont faites pour réserver une marge suffisante
autour de l'image ? Si oui, et s'il y a déjà une marge dans les PDF
d'origine, est-il nécessaire d'en remettre une ?



Le centrage vertical de trucs dans la zone de texte est un tout petit peu
plus compliqué que le centrage horizontal. Du coup pour centrer sur une
page A4 je crée une zone de texte centrée, de la taille des images (à peu
près), comme celles-ci sont placées dans la zone de texte elles se
retrouvent centrées sur la page.

(à suivre dans la réponse à ton autre message)

includegraphics[viewport=0 0 500 792,angle=-0.3,clip]{scan1}par



Puisque j'ai déjà fait les pdfcrop, je suppose que je peux supprimer
l'option viewport pour ne garder que l'option angle.

En ce qui concerne l'option clip,



Avec clip l'image est découpée selon la zone indiquée par les options
viewport ou bb. Sinon l'ensemble est imprimé, et la zone indiquée sert
seulement aux instructions de placement, redimensionnement... C'est un peu
compliqué à expliquer par des phrases. Il y a un exemple p. 10 de la doc,
mais peut-être pas super limpide.

--
LL
Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
C'est mieux avé les accents (F. Patte)
Avatar
Lucas Levrel
Le 1 juin 2015, Olivier Miakinen a écrit :
Ça y est, j'ai fait quelques essais (en laissant les options angle et
clip mais pas viewport).



Comme tu as déjà découpé avec pdfcrop, pas besoin de clip.

---------------------------------------------------------------------
documentclass{minimal}
usepackage[a4paper,centering,height€0pt,widthQ0pt]{geometry}
usepackage{graphicx}
begin{document}
raggedbottom
centering
includegraphics[angle=0,clip]{03}par
includegraphics[angle=-0.5,clip]{04}par
includegraphics[angle=-0.3,clip]{05}par
includegraphics[angle=-0.4,clip]{06}par
includegraphics[angle=-0.4,clip]{07}par
includegraphics[angle=-0.5,clip]{08}par
includegraphics[angle=-0.4,clip]{09}par
includegraphics[angle=-0.5,clip]{10}par
end{document}
---------------------------------------------------------------------

C'est bô ! Par contre, comme je le craignais ça rajoute une marge
de chaque côté des pages, alors que le résultat était bon après les
pdfcrop.



Je pense que je n'ai pas compris ce que tu voulais faire au final. Pour
moi, tu voulais imprimer sur du A4 sans agrandir. Du coup j'ai mis
« a4paper » et défini une zone de texte de la taille des morceaux découpés.

Quel résultat veux-tu obtenir ?

P.-S. : je n'ose pas encore faire suivre vers fr.comp.text.tex car
je n'ai pas lu les autres articles du groupe.



Ne t'inquiète pas, ils sont très gentils !

--
LL
Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
C'est mieux avé les accents (F. Patte)
2 3 4 5 6