Outils pour utilisateurs

Outils du site


issue159:python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue159:python [2020/08/08 08:31] d52frissue159:python [2020/08/09 09:48] (Version actuelle) auntiee
Ligne 7: Ligne 7:
 PyFPDF est une bibliothèque qui vous permet de générer des documents PDF sous Python. Elle a été portée à partir de FPDF (« Free » -PDF) dans une bibliothèque en PHP. Le dépôt est sur github à https://github.com/reingart/pyfpdf et la documentation est à https://pyfpdf.readthedocs.io/en/latest/index.html PyFPDF est une bibliothèque qui vous permet de générer des documents PDF sous Python. Elle a été portée à partir de FPDF (« Free » -PDF) dans une bibliothèque en PHP. Le dépôt est sur github à https://github.com/reingart/pyfpdf et la documentation est à https://pyfpdf.readthedocs.io/en/latest/index.html
  
-Certaines des fonctionnalités que cette bibliothèque fournit sont la possibilité d'inclure des images graphiques, des impressions à une position définie, des lignes, rectangles, ellipses, entêtes et pieds de page, et la possibilité de créer des formulaires pré-définis pour des choses comme des factures.+Certaines des fonctionnalités que cette bibliothèque fournit sont la possibilité d'inclure des images graphiques, des impressions à une position définie, des lignes, rectangles, ellipses, en-têtes et pieds de page, et la possibilité de créer des formulaires pré-définis pour des choses comme des factures.
  
 Elle est assez ancienne et il n'y a pas eu beaucoup d'activité récente. En fait, la dernière mise à jour dans le dépôt date d'environ 3 ans.  Elle est assez ancienne et il n'y a pas eu beaucoup d'activité récente. En fait, la dernière mise à jour dans le dépôt date d'environ 3 ans. 
Ligne 53: Ligne 53:
 pdf.output('tuto1a.pdf', 'F') pdf.output('tuto1a.pdf', 'F')
  
-Maintenant, décomposons le programmeAprès l'import de la bibliothèque FPDF, nous instancions la bibliothèque, par l'appel pdf=FPDF(), avec les options par défaut.+Maintenant, décomposons le programmeAprès l'import de la bibliothèque FPDF, nous instancions la bibliothèque, par l'appel pdf=FPDF(), avec les options par défaut.
  
 **Next, we add a page. These are pretty much the first two things that you have to do before you can do anything else. **Next, we add a page. These are pretty much the first two things that you have to do before you can do anything else.
Ligne 69: Ligne 69:
 format = (A3, A4, A5, Letter, Legal) (default is A4) (see below)** format = (A3, A4, A5, Letter, Legal) (default is A4) (see below)**
  
-Ensuite, nous ajoutons une page. Ce sont pratiquement les deux premières choses que vous devez faire avant que vous puissiez faire autre chose.+Ensuite, nous ajoutons une page. Ce sont pratiquement les deux premières actions qu'il faut faire avant toute autre chose.
  
-Ensuite, nous paramétrons la police par défaut pour la page ; après, nous utilisons la méthode cell pour imprimer un simple texte et, alors, nous appelons la méthode output pour créer le fichier pdf lui-même.+Ensuite, nous paramétrons la police par défaut pour la page ; après, nous utilisons la méthode cell pour imprimer un simple texte, puis nous appelons la méthode output pour créer le fichier pdf lui-même.
  
 Quand nous avons créé l'objet PDF, comme je l'ai dit, nous avons utilisé les paramètres par défaut. Voici les options : Quand nous avons créé l'objet PDF, comme je l'ai dit, nous avons utilisé les paramètres par défaut. Voici les options :
  
-pdf = FPDF(orientation, unités, format-de-page)+pdf = FPDF(orientation, unités, format de page)
  
 où : où :
Ligne 83: Ligne 83:
 unités = (pt:point, mm:millimètre, cm:centimètre, in:pouce) (la valeur par défaut est mm) unités = (pt:point, mm:millimètre, cm:centimètre, in:pouce) (la valeur par défaut est mm)
  
-format = (A3, A4, A5, Letter, Legal) (A4 est la valeur par défaut) (voir ci-dessous)+format = (A3, A4, A5, Letter, Legal) (A4 est la valeur par défaut) (voir ci-dessous).
  
 **If you need a custom page size, you can send a tuple with the width and height in the given units. If you are using Portrait mode, the order should be (width, height), but if you are using landscape, it should be (height, width). Also, try as I might, I couldn't get the units to work with the inch option. Nothing seems to render, so I stick with 'mm'. **If you need a custom page size, you can send a tuple with the width and height in the given units. If you are using Portrait mode, the order should be (width, height), but if you are using landscape, it should be (height, width). Also, try as I might, I couldn't get the units to work with the inch option. Nothing seems to render, so I stick with 'mm'.
Ligne 98: Ligne 98:
 •  ZapfDingbats** •  ZapfDingbats**
  
-Si vous avez besoin d'une taille de page personnalisée, vous pouvez envoyer un tuple avec la largeur et la hauteur dans les unités données. Si vous utilisez le mode Portrait, l'ordre devra être (largeur, hauteur), mais, si vous utilisez le paysage, il devra être (hauteur, largeur). De plus, essayez comme je le fis, je n'ai pas réussi à faire marcher les unités avec l'option « inch » (pouce). Rien ne semblait être restitué ; je suis donc resté aux mm.+Si vous avez besoin d'une taille de page personnalisée, vous pouvez envoyer un tuple avec la largeur et la hauteur dans les unités données. Si vous utilisez le mode Portrait, l'ordre devra être (largeur, hauteur), mais, si vous utilisez le mode Paysage, il devra être (hauteur, largeur). De plus, quoi que je fasse, je n'ai pas réussi à faire marcher les unités avec l'option « inch » (pouce). Rien ne semblait être restitué ; je suis donc resté aux mm.
  
 Ensuite, nous réglons la police à utiliser. L'appel est : Ensuite, nous réglons la police à utiliser. L'appel est :
Ligne 124: Ligne 124:
 If you want to use a special font for some reason, outside of the standard font set provided, you can use the add_font method. However, it is fairly difficult, so we'll discuss it in a future article. In the meantime, you can look at the documentation to see how to do it.** If you want to use a special font for some reason, outside of the standard font set provided, you can use the add_font method. However, it is fairly difficult, so we'll discuss it in a future article. In the meantime, you can look at the documentation to see how to do it.**
  
-Dans ces 5 polices sont fournies une à largeur fixe, une sans-serif, une serif et deux polices symboliques. Le paramètre des familles de polices est insensible à la casse de même que le style de la police. Ces styles peuvent être :+Ces 5 polices fournissent une largeur fixe, une sans-serif, une serif et deux polices symboliques. Le paramètre des familles de polices est insensible à la casse de même que le style de la police. Ces styles peuvent être :
  
      B : gras      B : gras
Ligne 131: Ligne 131:
      vide : normal      vide : normal
            
-Note : si vous voulez changer la taille de la police dans le document, changer la famille ou le style, vous pouvez appeler :+Note : si vous voulez changer la taille de la police dans le document, la famille ou le style, vous pouvez appeler :
  
 fpdf.set_font_size(size) fpdf.set_font_size(size)
  
-Si vous voulez utiliser une police spéciale pour un raison quelconque, en dehors du lot de polices fournies en standard, vous pouvez utiliser la méthode add_font. Cependant, elle est assez compliquée, donc nous en parlerons dans un article futur. Entre temps, vous pouvez regarder la documentation pour voir comment faire.+Si vous voulez utiliser une police spéciale pour une raison quelconque, en dehors du lot de polices fournies en standard, vous pouvez utiliser la méthode add_font. Cependant, elle est assez compliquée, donc nous en parlerons dans un article futur. Entre temps, vous pouvez regarder la documentation pour voir comment faire.
  
 **Now, we'll take a look at the cell method, that allows you to place the text to be rendered. This method will print a rectangular area with optional borders, possibly background and foreground colors, and the character string. The text can be aligned to the right or left or can be centered. When the call is finished, the current position moves to the right or to the next line, depending on a parameter passed, and allows for an optional link to be attached to the text. The format of the method parameters is fairly comprehensive, but, luckily, the author of the library has set a number of defaults, so it isn't as bad as it could be. **Now, we'll take a look at the cell method, that allows you to place the text to be rendered. This method will print a rectangular area with optional borders, possibly background and foreground colors, and the character string. The text can be aligned to the right or left or can be centered. When the call is finished, the current position moves to the right or to the next line, depending on a parameter passed, and allows for an optional link to be attached to the text. The format of the method parameters is fairly comprehensive, but, luckily, the author of the library has set a number of defaults, so it isn't as bad as it could be.
Ligne 143: Ligne 143:
  We'll take a look at each parameter in a bit more depth...**  We'll take a look at each parameter in a bit more depth...**
  
-Maintenant, nous allons regarder la méthode cell, qui vous permet de placer le texte à restituer. cette méthode imprimera une zone rectangulaire avec des bordures optionnelles, un possibilité de couleurs de fond et de premier-plan, et la chaîne de caractères. Le texte peut être aligné à droite ou à gauche, ou peut être centré. Quand l'appel est fini, la position actuelle se déplace à droite ou sur la ligne suivante, suivant comment un paramètre a été passé, et vous donne la possibilité d'attacher un lien optionel au texte. Le format des paramètres de la méthode se comprend plutôt bien, mais, par chance, l'auteur de la bilbiothèque a placé un certain nombre de défauts ; aussi, elle n'est pas aussi mauvaise qu'elle l'aurait pu.+Maintenant, nous allons regarder la méthode cell, qui vous permet de placer le texte à restituer. Cette méthode imprimera une zone rectangulaire avec des bordures optionnelles, une possibilité de couleurs de fond et de premier plan, et la chaîne de caractères. Le texte peut être aligné à droite ou à gauche, ou peut être centré. Quand l'appel est fini, la position actuelle se déplace à droite ou sur la ligne suivante, selon un paramètre passé, et vous donne la possibilité d'attacher un lien optionnel au texte. Le format des paramètres de la méthode est plutôt complet, mais, par chance, l'auteur de la bilbiothèque a placé un certain nombre de défauts ; aussi, elle n'est pas aussi difficile qu'elle pouvait l'être.
  
 fpdf.cell(w, h=0, txt='', border=0, ln=0, align='', fill=false, link='') fpdf.cell(w, h=0, txt='', border=0, ln=0, align='', fill=false, link='')
  
-Regardons chacun des paramètres un peu plus en détail...+Regardons chacun des paramètres un peu plus en détail :
    
 **w: Cell width. If this value is 0, the cell will extend to the right margin. **w: Cell width. If this value is 0, the cell will extend to the right margin.
Ligne 173: Ligne 173:
 txt - la chaîne à imprimer. txt - la chaîne à imprimer.
  
-border - 0 : pas de bordure. 1 cadre (ou une chaîne contenant quelles sont les lignes du cadre à restituer)+border - 0 : pas de bordure. 1 cadre (ou une chaîne contenant les lignes du cadre à restituer).
  
 ln - 0 : à droite. 1 : au début de la ligne suivante. 2 : en dessous. ln - 0 : à droite. 1 : au début de la ligne suivante. 2 : en dessous.
  
-align - « L » : alignement à gauche, « C » : centré, « R » : alignement à droite+align - « L » : alignement à gauche, « C » : centré, « R » : alignement à droite.
  
-fill - True : fond coloré. False : transparent. Valeur par défaut = False+fill - True : fond coloré. False : transparent. Valeur par défaut = False.
  
-link - URL ou indentifiant retourné par add_link()+link - URL ou identifiant retourné par add_link().
  
-Enfin, nous appelons pdf.output pour un rendu du fichier et sa sauvegarde sous le nom de fichier spécifié (qui est le paramètre « F »). Il y a d'autres paramètres, que vous pouvez chercher dans le document.+Enfin, nous appelons pdf.output pour un rendu du fichier et sa sauvegarde sous le nom de fichier spécifié (qui est le paramètre « F »). Il y a d'autres paramètres dans le document et vous pouvez faire des recherches sur ceux-là
  
 **Once the program is done, you can open it with your default PDF viewer. It should look something like the image above. **Once the program is done, you can open it with your default PDF viewer. It should look something like the image above.
Ligne 207: Ligne 207:
 pdf.output('test1a.pdf', 'F') pdf.output('test1a.pdf', 'F')
  
-Notez que nous avons ajouté tous les paramètres de la méthode cell. Dans cette version, nous ajouterons une bordure avec un remplissage transparent, centrerons le texte, la cellule s'étendant de l'extrême gauche à l'extrême droite de la page, paramètrerons pour que la prochaine ligne soit sur la ligne du dessous et ajouterons un lien vers le site Web du Full Circle Magazine, quand nous cliquons sur le texte. Nous changerons aussi le nom du fichier de sortie.+Notez que nous avons ajouté tous les paramètres de la méthode cell. Dans cette version, nous ajouterons une bordure avec un remplissage transparent, centrerons le texte, la cellule s'étendant de l'extrême gauche à l'extrême droite de la page, paramétrerons pour que la prochaine ligne soit sur la ligne du dessous et ajouterons un lien vers le site Web du Full Circle Magazine, quand nous cliquons sur le texte. Nous changerons aussi le nom du fichier de sortie.
  
 **Save the program as “test1a” and try it again (see image below). **Save the program as “test1a” and try it again (see image below).
Ligne 221: Ligne 221:
 Sauvegardez le programme comme « test1a » et essayez-le à nouveau (voir l'image ci-dessous). Sauvegardez le programme comme « test1a » et essayez-le à nouveau (voir l'image ci-dessous).
  
-C'est super, mais que se passe-t-il si nous voulons faire des longs paragraphes de texte ? Il y a une méthode qui est proche de la méthode cell qui le gèrera pour nous. Elle est appelée multi_cell. la méthode multi_cell utilise les paramètres suivants :+C'est super, mais que se passe-t-il si nous voulons faire de longs paragraphes de texte ? Il y a une méthode qui est proche de la méthode cell qui le gérera pour nous. Elle est appelée multi_cell. La méthode multi_cell utilise les paramètres suivants :
  
 pdf.multi_cell(w: float, h: float, txt: str, border = 0,  pdf.multi_cell(w: float, h: float, txt: str, border = 0, 
Ligne 227: Ligne 227:
       align: str = 'J', fill: bool = False)       align: str = 'J', fill: bool = False)
              
-Elle peut être utilisée à la place de la méthode cell, mais nous allons faire quelque chose de spécial pour la démonstration. Cette fois-ci, nous étendrons et recouvrirons certaines fonctions intégrées (ce sont simplement des souches que sont conçues pour être implémentées dans votre code) qui sont header (entête) et footer (pied de page) et en ajouter d'autres de notre cru. Ouvrez un nouveau fichier vide dans votre IDE et nommez ce fichier Demo3.py.+Elle peut être utilisée à la place de la méthode cell, mais nous allons faire quelque chose de spécial pour la démonstration. Cette fois-ci, nous étendrons et passerons outre certaines fonctions intégrées (ce sont simplement des souches qui sont conçues pour être implémentées dans votre code) qui sont header (en-tête) et footer (pied de page) et en ajouter d'autres de notre cru. Ouvrez un nouveau fichier vide dans votre IDE et nommez ce fichier Demo3.py.
  
 **from fpdf import FPDF **from fpdf import FPDF
Ligne 245: Ligne 245:
 import os import os
  
-Bien sûr, nous devons commencer par les déclarations d'import. Ensuite, nous étendrons la classe fpdf en créant des méthodes « header » et « footer » pour nous-mêmes (empruntées à l'une des démos de la documentation). Voir en haut à droite).+Bien sûr, nous devons commencer par les déclarations d'import. Ensuite, nous étendrons la classe fpdf en créant des méthodes « header » et « footer » pour nous-mêmes (empruntées à l'une des démos de la documentation). (Voir en haut à droite).
  
-La méthode header, comme vous l'avez peut-être deviné, crée une entête qui est (largement) centrée horizontalement et est constituée du titre de notre document. D'abord, nous paramétrons la police, puis nous utilisons la méthode get_string_width() pour calculer la largeur dans la valeur d'unité qui a été  réglée pour le titre lorsqu'il sera rendu. Puis  c'est mis dans une cellule commençant à l'endroit approprié en haut de la page. Vous pourriez utiliser un « 0 » dans la méthode cell à la place du « w » et ne pas utiliser la méthode set_x, forçant la cellule à commencer à la position x valant 0 et s'étendant jusqu'à la marge droite, mais mais vous devriez vraiment regarder cette autre méthode.+La méthode header, comme vous l'avez peut-être deviné, crée une en-tête qui est (principalement) centrée horizontalement et est constituée du titre de notre document. D'abord, nous paramétrons la police, puis nous utilisons la méthode get_string_width() pour calculer la largeur dans la valeur d'unité qui a été réglée pour le titre lorsqu'il sera restitué. Puis c'est mis dans une cellule commençant à l'endroit approprié en haut de la page. Vous pourriez utiliser un « 0 » dans la méthode cell à la place du « w » et ne pas utiliser la méthode set_x, forçant la cellule à commencer à la position x valant 0 et s'étendant jusqu'à la marge droite, mais vous devriez vraiment regarder cette autre méthode.
  
  
Ligne 262: Ligne 262:
 Ensuite, nous créerons une méthode pour gérer un texte multi-lignes. Vous pouvez créer différentes méthodes pour gérer différents types de paragraphes. Ceci (ci-dessous), à nouveau, a été emprunté à la documentation. Ensuite, nous créerons une méthode pour gérer un texte multi-lignes. Vous pouvez créer différentes méthodes pour gérer différents types de paragraphes. Ceci (ci-dessous), à nouveau, a été emprunté à la documentation.
  
-Maintenant, nous paramétrerons quelques variables normales et ajouterons des propriétés au fichier PDF. La propriétés sont optionnelles, mais nous les ferons ici simplement pour montrer comment faire au cas où vous le voudriez (c'est en dehors de la classe ; aussi, ce n'est pas indenté) :+Maintenant, nous paramétrerons quelques variables normales et ajouterons des propriétés au fichier PDF. Les propriétés sont optionnelles, mais nous les ferons ici simplement pour montrer comment faire au cas où vous le voudriez (c'est en dehors de la classe ; aussi, ce n'est pas indenté) :
  
-Maintenant, nous envoyons chaque groupe de texte dans la méthode chapter_body() que nous venons de créer. Pour la démo, j'ai choisi du texte de l'article du mois dernier et un des programmes pour essayer de montrer comment utiliser différents réglages des polices *(en haut à droite).+Maintenant, nous envoyons chaque groupe de texte dans la méthode chapter_body() que nous venons de créer. Pour la démo, j'ai choisi du texte de l'article du mois dernier et un des programmes pour essayer de montrer comment utiliser différents réglages des polices * (en haut à droite).
  
 **pdf.chapter_body('demotext1.txt') **pdf.chapter_body('demotext1.txt')
Ligne 288: Ligne 288:
 pdf.output('demo3.pdf', 'F') pdf.output('demo3.pdf', 'F')
  
-Enfin, le code suivant (emprunté à nouveau à la documentation) ouvrira la visionneuse de document PDF par défaut du système, en supposant qu'il y en ait une de définie, pour afficher le PDF que nous venons de créer. Pour vous et l'utilisateur, ceci économise le besoin d'ouvrir une fenêtre avec le gestionnaire de fichier, pour rechercher le fichier et l'ouvrir. Je sais que le code fonctionne pour Linux, mais je ne l'ai pas essayé sur une machine Windows ou un Mac.+Enfin, le code suivant (emprunté à nouveau à la documentation) ouvrira la visionneuse de document PDF par défaut du système, en supposant qu'il y en ait une de définie, pour afficher le PDF que nous venons de créer. Pour vous et l'utilisateur, cela économise l'ouverture d'une fenêtre avec le gestionnaire de fichiers, pour rechercher le fichier et l'ouvrir. Je sais que le code fonctionne pour Linux, mais je ne l'ai pas essayé sur une machine Windows ou un Mac.
  
 **if sys.platform.startswith("linux"): **if sys.platform.startswith("linux"):
Ligne 311: Ligne 311:
     os.system("./demo3.pdf")     os.system("./demo3.pdf")
          
-Maintenant que le PDF est (par chance) visible, vérifions les propriétés du document, après que vous ayiez vérifié le texte lui-même dans le document. Vous deviez voir quelque chose comme ça :+Maintenant que le PDF est (je l'espère) visible, vérifions les propriétés du document, après avoir vérifié le texte lui-même dans le document. Vous deviez voir quelque chose comme ceci :
  
-Ça y estvous y êtes arrivé. Les débuts d'une possibilité de créer vos propres fichiers PDF. Je vous suggère instamment de télécharger le dépôt avec tout le code source. Il vous donne une bonne vue des possibilités de la bibliothèque. La chose la plus importante dont nous n'avons pas parlé cette fois-ci, c'est la possibilité avec la bibliothèque d'utiliser des modèles pré-définis. Nous le garderons pour un prochain article.+Voilàc'est tout. Les débuts d'une possibilité de créer vos propres fichiers PDF. Je vous suggère instamment de télécharger le dépôt avec tout le code source. Il vous donne une bonne vue des possibilités de la bibliothèque. La chose la plus importante dont nous n'avons pas parlé cette fois-ci, c'est la capacité de la bibliothèque d'utiliser des modèles pré-définis. Nous le garderons pour un prochain article.
  
 **The code files (and the text files for the last demo) have been uploaded to pastebin to make life easy for you. The links are below: **The code files (and the text files for the last demo) have been uploaded to pastebin to make life easy for you. The links are below:
Ligne 345: Ligne 345:
 birthdays2.py - https://pastebin.com/0Gwke6FD birthdays2.py - https://pastebin.com/0Gwke6FD
  
-Jusqu'à la prochaine fois, restez sauf, en bonne santé, positif et créatif !+Jusqu'à la prochaine fois, soyez prudent, en bonne santé, positif et créatif !
  
issue159/python.1596868291.txt.gz · Dernière modification : 2020/08/08 08:31 de d52fr