Il n'y a pas d'astuce particulière, mais il est essentiel de bien comprendre comment les transformations sont appliquées dans PDFKit.
La principale chose à comprendre est qu'on ne fait pas pivoter un texte ou une forme : vous faites pivoter votre document , comme l'implique doc.rotate(...).rect(...)
.
Il peut être utile de considérer votre document comme une toile dotée de propriétés physiques. L'une de ses propriétés est sa rotation.
Si vous souhaitez dessiner un texte en rotation sur une page de papier, vous ferez probablement pivoter physiquement votre page, puis vous écrirez du texte horizontalement comme vous le feriez habituellement, puis vous ferez pivoter la page pour la ramener à son état normal.
Vous obtenez alors un texte tourné sur une page droite :
C'est exactement comme cela que fonctionne PDFKit : vous appliquez une transformation à votre document, dessinez tout ce que vous avez besoin de dessiner dans ce contexte transformé, et ramenez le document à son état précédent.
Pour ce faire, deux méthodes s'offrent à vous : doc.save()
y doc.restore()
.
- Utilisation
save()
avant en appliquant une transformation, de sorte que tout ce qui a été dessiné auparavant n'est pas affecté.
- Vous pouvez ensuite transformer votre toile et dessiner ce dont vous avez besoin
- Une fois que vous avez dessiné tout ce qui devait être transformé, appelez
restore()
pour remettre le document dans son état initial. Il s'agit essentiellement d'annuler toutes les transformations (c'est-à-dire la rotation, la mise à l'échelle, la translation) effectuées après la dernière modification du document. save()
appel.
Pour reproduire (en quelque sorte) le diagramme ci-dessus, vous devez procéder comme suit :
doc.text('text', ...)
doc.save()
doc.rotate(90).text('rotated text', ...)
doc.restore()
Une dernière chose à comprendre est que le système de coordonnées de votre document est affecté par les transformations :
Ainsi, si text
a été dessiné aux coordonnées (0, 0)
alors rotated text
a été fixé à quelque chose comme (0, documentHeight / 2 - offset)
.
C'est assez facile à gérer lorsque l'on utilise des multiples de 90 degrés de rotation, mais vous devrez jouer avec la trigonométrie dans le cas contraire :)
Pour faciliter les choses, vous pouvez jouer avec l'origine de la rotation pour vous assurer que vous faites pivoter le document autour d'un point qui a du sens pour vos prochains dessins !