J'essaie d'ajouter une simple "page x de y" à un rapport réalisé avec ReportLab .. J'ai trouvé this old post à ce sujet, mais peut-être que six ans plus tard quelque chose de plus simple a émergé? ^^;
Je trouve this recipe aussi, mais quand je l'utilise, le PDF résultant manque les images ..Affichage du nombre de pages avec ReportLab
Répondre
J'ai été en mesure d'implémenter l'approche NumberedCanvas d'ActiveState. C'était très facile à faire et n'a pas changé beaucoup de mon code existant. Tout ce que j'avais à faire était d'ajouter cette classe NumberedCanvas et d'ajouter l'attribut canvasmaker lors de la construction de mon document. J'ai aussi changé les mesures de où le "x de y" a été affiché:
self.doc.build(pdf)
est devenu
self.doc.build(pdf, canvasmaker=NumberedCanvas)
doc est un BaseDocTemplate et pdf ma liste d'éléments fluides.
Est-ce que les images apparaissaient normalement avec cette approche? – Joril
J'ai des images affichées sur le pdf sans aucun problème. Si vous rencontrez un problème avec les images, pourriez-vous élaborer ou lancer une nouvelle question? – adam
Il semble que cette technique casse les liens intra-document. Quand je l'ai utilisé, tous les liens d'une partie du document vers une autre partie ont commencé à naviguer à mi-chemin de la première page, plutôt que d'aller à leurs cibles réelles. – CoreDumpError
Il suffit de déterrer un code pour vous, nous utilisons ceci:
SimpleDocTemplate(...).build(self.story,
onFirstPage=self._on_page,
onLaterPages=self._on_page)
maintenant self._on_page
est une méthode qui est appelé pour chaque page comme:
def _on_page(self, canvas, doc):
# ... do any additional page formatting here for each page
print doc.page
Oui mais la partie difficile est de savoir comment comprendre la partie "de y" :) C'est-à-dire, le nombre total de pages – Joril
utilisation doc.multiBuild
et dans la méthode d'en-tête de page (définie par "onLaterPages ="):
global TOTALPAGES
if doc.page > TOTALPAGES:
TOTALPAGES = doc.page
else:
canvas.drawString(270 * mm, 5 * mm, "Seite %d/%d" % (doc.page,TOTALPAGES))
cela ne fonctionne que si vous avez plusieurs passes – jake77
- 1. Affichage simple page, problème d'impression de plusieurs pages
- 2. nombre de pages dans un fichier pdf
- 3. Affichage d'un nombre en mots dans SSRS
- 4. Téléchargement avec ASP.NET MVC, affichage du résultat de la redirection
- 5. Affichage de la légende du bouton CommandBar avec Excel VBA
- 6. Affichage 100000 enregistrements sur le navigateur/plusieurs pages
- 7. Affichage du temps conditionnel
- 8. Affichage des lignes avec un nombre 0 avec le groupe mysql par
- 9. PHP - Obtenir le nombre de pages dans un document Word
- 10. Flex: Affichage des données Advanced DataGrid dans Pages
- 11. Affichage de l'infobulle du contrôle WPF sous les touches décisives
- 12. Affichage du code étendu du compilateur - C++
- 13. Comment créer une liste à puces dans ReportLab
- 14. Mesure du nombre de cycles
- 15. Affichage avec jQuery
- 16. Affichage du chemin dans l'étiquette
- 17. Affichage du contenu de Session, Application et Request Bean
- 18. Affichage du jour de comptage vers l'arrière en php
- 19. Utilisation de pages maîtres avec plusieurs entités
- 20. Conversion du texte en nombre
- 21. Affichage de DirectoryIndex dans l'URL avec Apache
- 22. Affichage d'équations de fantaisie avec Java
- 23. Apache/Rails/Passenger Affichage du site Index?
- 24. Modification du nombre total de fichiers récents
- 25. Bizarrerie avec ToString() mise en forme du nombre personnalisé
- 26. Affichage du texte avec VBScript lors de l'exécution de l'invite de commande numéro
- 27. Création de deux pages pdf avec Imagick
- 28. Nombre moyen de relations avec XML
- 29. Batch: Vérification du nombre de paramètres
- 30. Nombre de fichiers supprimés du fichier batch
J'ai eu ce même problème. Voici la recette d'ActiveState en utilisant NumberedCanvas qui fonctionne réellement: http://code.activestate.com/recipes/576832/ – Esteban