Bonsoir,
j'ai copié sur ce site un code pour imprimer en PDF, qui fonctionne très bien.
Etant amateur je ne fais qu'adapter les codes, en essayant de comprendre
Je désire imprimer une recette avec QtGui.QTextDocument mais j'ai un problème de mise en page, pour faire simple :
les ingrédients, le poids, l'unité et la méthode.
Impossible d'imprimer en colonne, ni de formater par exemple les ingrédients en gras, etc.
Je voulais présenter ma recette avec une partie gauche avec les colonnes de recette et la partie droite de la feuille avec la méthode.
Avez vous un exemple de code qui pourrait m'aider ?
Voici une portion du code imprimer :
Code : 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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/python
# -*- coding: utf-8 -*-
#Python 3.2
import sys, os
from PySide import QtCore, QtGui
app = QtGui.QApplication(sys.argv)
ingrient='Cacao en poudre'
poids ='10'
unit='grs'
c=ingrient+poids+unit
d='Méthode et conseil de fabrication'
doc=QtGui.QTextDocument(c+d)
fichierpdf = "Fiche Technique.pdf"
 
printer = QtGui.QPrinter()
printer.setPaperSize(QtGui.QPrinter.A4)
printer.setOrientation(QtGui.QPrinter.Portrait)
printer.setOutputFormat(QtGui.QPrinter.PdfFormat)
printer.setOutputFileName(fichierpdf)
 
# pour convertir des mm en pixels en utilisant la résolution
resolution = printer.resolution()
mm2px = lambda mm: int(mm/25.4*resolution)
 
 
MargeGauche = mm2px(30)#113
MargeHaute = mm2px(40)#151
MargeDroite = mm2px(10)#37
MargeBasse = mm2px(40)#151
 
 
printer.setPageMargins(MargeGauche, MargeHaute, MargeDroite, MargeBasse,
                                                QtGui.QPrinter.DevicePixel)
innerRect = printer.pageRect()
sizeF = QtCore.QSizeF(innerRect.size().width(), innerRect.size().height())
doc.setPageSize(sizeF)
contentRect = QtCore.QRect(QtCore.QPoint(0,0), doc.size().toSize())
currentRect = QtCore.QRect(QtCore.QPoint(0,0), innerRect.size())
painter = QtGui.QPainter(printer)#première page d'impression
count = 0
painter.save()
while currentRect.intersects(contentRect):
    doc.drawContents(painter, QtCore.QRectF(currentRect))
    count += 1
    currentRect.translate(0, currentRect.height())
    painter.restore()
    w="Fiche technique"
    # impression en-tête (0,0 => coin haut et gauche de la zone d'impression)
    painter.setFont(QtGui.QFont("Arial", 30))
    painter.drawText(0, -mm2px(10), w)#titre
    painter.save()
    painter.translate(0, -currentRect.height() * count)
    if currentRect.intersects(contentRect):
         printer.newPage()#ajoute une nouvelle page d'impression
painter.restore()
painter.end()#termine l'impression    
# affichage du pdf par le viewer pdf par défaut de l'OS
if os.path.exists(fichierpdf):
    try:
        os.startfile(fichierpdf) # solution pour Windows
    except:
        os.system('xdg-open ' + fichierpdf)# solution pour les Linux récents
Merci d'avance de votre aide, et merci aux auteurs des codes exemples.