Bonjour,
Existe t-il un moyen simple d'afficher dans une fenetre un fichier pdf que j'ai généré avec ReportLab ? En fin de compte je voudrais réaliser un "aperçu avant impression" !
Merci d'avance pour vos pistes.
Cordialement,
Bonjour,
Existe t-il un moyen simple d'afficher dans une fenetre un fichier pdf que j'ai généré avec ReportLab ? En fin de compte je voudrais réaliser un "aperçu avant impression" !
Merci d'avance pour vos pistes.
Cordialement,
Bonjour
essayez avec ceci
http://code.google.com/p/python-poppler-qt4/
j'ai voulu tester mais pas encore eu le temps..
Je te remercie Nico pour ton lien.
J'ai omis de dire que je travaillais avec Pyside...
et je n'arrive pas à installer le module ...
Je vais creuser un peu pour réussir l'installation.
Je suis néanmoins toujours à l'écoute pour d'éventuelles autres pistes.
@+
au fait..
serait ce contraignant d'utiliser les fonctionnalités pdf de pyqt/pyside au lieu de reportlab?
Vous pourriez avant d'imprimer en pdf, utiliser un widget de visualisation (QGraphicScene entre autre) et l'imprimer en pdf ensuite..
Nico tout ca m'a l'air fort intéressant
C'est vrai qu'en fin de compte j'ai juste besoin de visualiser et d'imprimer, éventuellement, une liste de données ...
Je suis preneur pour tout complément d'information.
@+
Tout dépend ce que tu veux visualiser et imprimer je pense... mais comme ça sans trop réfléchir je pourrais te proposer de visualiser le contenu dans un QWebView avant de l'imprimer en pdf.
En effet Qt, et par conséquent PySide et PyQt permette d'imprimer un pdf depuis un code html.
http://pyqt.developpez.com/telecharg...un-fichier-pdf
Sinon, dans QPrinter & co tu dois aussi pouvoir y trouver ton bonheur
En fait, je veux simplement visualiser, avec une mise en forme, et pouvoir imprimer le contenu d'informations issu d'une base Sqlite manipulée avec SqlAlchemy.
@+
Bonjour,
Dans un programme, j'utilise PyQt4 pour créer des pages pdf (plusieurs centaines), qui sont des courriers multipages qui contiennent des données issues d'une base de données sqlite3.
Mais je ne les visualise / imprime pas directement: le programme appelle le reader de pdf par défaut de l'OS pour visualiser les pages et si nécessaire les imprimer. C'est très simple et ça marche très bien. Ceci sous Windows et sous Linux (je n'ai pas encore essayé sous MacOSX).
Mais même si je n'envisage pas de changer cela, je suis très intéressé par toute solution de visualisation et d'impression de pages pdf sous Qt.
Jiyuu j'ai voulu tester ta solution qui me parait intéressante mais je n'obtiens qu'une page bien vide :
form.pdf est le fichier pdf et il est dans le même répertoire que l'application.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ... self.preview = QtWebKit.QWebView() self.preview.load(QtCore.QUrl().fromLocalFile("form.pdf")) ...
Est-ce que j'ai loupé quelque chose ?
Merci
@+
Salut,
Tout d'abord QtCore.QUrl().fromLocalFile() demande le chemin complet et non le chemin relatif. En tous cas sous Linux.
Question : quel est la forme du document avant transformation en pdf ?
Bonjour VinsS,
Je l'ai généré avec ReportLab.
@+
Oui, oui, j'avais bien lu, mais était-ce un document créé avec Pyside ?
PlainText, Document, Image ?
La question de VinsS est très pertinente car elle peut jouer sur la solution choisie.
Pour ma part, voila ce que je propose avec quelques difficultés possible notamment pour les sauts de pages, mais rien d'insurmontable je pense.
Si tu peux :
- oublie Reportlab ;
- génère un .html du fichier que tu veux ;
- visualise ton .html ;
- transforme le en .pdf ;
Exemple :
Code HTML :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <img src= "Qt-logo.png"> <div id="t1"> <b>Bonjour {{nom}}</b> <br> ceci est un test </div> </body> </html>
Code de visualisation (à retravailler pour l'affichage des balises de modif):
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 from sys import exit from PySide.QtGui import QApplication from PySide.QtWebKit import QWebView app = QApplication([]) webview = QWebView() webview.show() webview.load("index.html") exit(app.exec_())
Code d'impression :
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 # coding: utf-8 -*- import sys from PySide import QtGui, QtCore Appli=QtGui.QApplication(sys.argv) printer=QtGui.QPrinter() printer.setOutputFileName("essai.pdf") doc = QtGui.QTextDocument() ressource = doc.loadResource(QtGui.QTextDocument.HtmlResource, QtCore.QUrl("index.html")) ressource.replace("{{nom}}", "Toto") doc.setHtml(str(ressource)) doc.print_(printer) doc.print_(printer)
Pour générer et bien gérer les html tu peux aussi te servir d'XML...
Autre solution : afficher du html dans un QTextEdit en passant par QTextDocument. Seul interrogation que je ne peux pas tester dans l'immédiat c'est l'affichage éventuelle d'autre chose que du texte...
L'avantage c'est que tout ça peut être fait avec PySide sans aucun autre import.
[EDIT]
Ça passe les images dans un QTextEdit... mais je te laisse chercher
Désolé pour le silence ... mais ma ligne telephonique était HS.
JiYuu, après réflexion je pense que ton approche devrait convenir. J'étais parti avec ReportLab car j'avais peut être pas assez fouillé avec PySide. La manipulation de QTextDocument parait intéressante et je vais creusé par là. Il faut juste que je l'alimente à partir de requete SqlAlchemy. J'aurai ensuite des images à insérer mais on verra après ...
Ensuite effectivement l'impression ou la sauvegarde en pdf devrait être aisée.
Je reviens vers vous après mes essais.
Merci encore de vos conseils éclairés.
@+
Si on a pu t'aider c'est le principal. Pense à mettre le sujet en résolu si tu penses que c'est le cas.
Tu pourras toujours en ouvrir un autre si ton problème se déplace.
@+
Partager