IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Imprimer des étiquettes


Sujet :

PyQt Python

  1. #1
    Membre du Club
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Points : 56
    Points
    56
    Par défaut Imprimer des étiquettes
    Bonjour à tous, voici un petit moment que je suis sur un programme qui complète mon cahier de recettes, imprimer des étiquettes avec les ingrédients de la recette, pourcentage, etc.
    Je me suis beaucoup inspiré du code de Tyrtamos, code que tu avais posté il y a quelques temps sur l'impression d'étiquette.
    Mais je suis confronté à 2 problèmes :
    - Je voudrais imprimer du texte enrichie format html, il me restitue le texte avec les balises.
    - je préfères un boite de dialogue "QPrintPreviewDialog()" pour visualiser l'impression et choisir l'imprimante.
    Merci d'avance pour ceux qui prendront le temps de me lire.
    Voici une partie du code que j'ai adapté pour que vous puissiez comprendre ma demande.
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 3.4
     
    from __future__ import division
    import os,sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    from PyQt5.QtPrintSupport import *
    from PyQt5.QtGui import *
     
    #############################################################################
    class Etiquettespdf(object):
        """Imprime en fichier .pdf et affiche la liste d'etiquettes a imprimer"""
     
        # =======================================================================
        def __init__(self, etiq, deph, pash, nbeh, depv, pasv, nbev):
            """Initialise toutes les variables necessaires
            etiq: liste des chaines, eventuellement multilignes (avec os.linesep)
            deph: point de depart en mm a partir du bord gauche de la feuille
            pash: pas horizontal en mm entre 2 etiquettes
            nbeh: nombre d'etiquettes en horizontal
            depv: point de depart en mm a partir du bord superieur de la feuille
            pasv: pas vertical entre 2 etiquettes (mm)
            nbev: nombre d'etiquettes en vertical
            font: police de caracteres a utiliser (de type QFont)
            """
            self.etiq = etiq
            self.deph = deph
            self.pash = pash
            self.nbeh = nbeh
            self.depv = depv
            self.pasv = pasv
            self.nbev = nbev
     
            # Les var. suivantes (modifiables) ont une valeur par defaut
     
            # nom du fichier pdf a creer
            self.nomfichierpdf = "etiquettes.pdf"
            # nom de l'application qui cree le fichier pdf
            self.nomapplication = ""
            # nom du document pdf cree
            self.nomdocument = ""
            # orientation de la page a imprimer
            self.orientation = QPrinter.Portrait
            # format de la page a imprimer
     
            self.formatpage = QPrinter.A4 #QPrinter.Custom
            self.formatpapier = QSizeF(90.00,30.00)
            # alignement de l'impression sur les etiquettes
            self.alignement = Qt.AlignLeft
     
        # =======================================================================
        def imprime(self):
            """Lance l'impression des etiquettes dans le fichier pdf donne"""
     
            # creation de l'instance printer => fichier etiquettes.pdf
            printer = QPrinter(QPrinter.HighResolution)
            printer.setOutputFileName(self.nomfichierpdf)
            printer.setCreator(self.nomapplication)
            printer.setDocName(self.nomdocument)
            printer.setPageSize(self.formatpage)
            if self.formatpage == QPrinter.Custom :
                printer.setPaperSize(self.formatpapier,printer.Millimeter)
     
            printer.setOrientation(self.orientation)
            printer.setFullPage(True)
            resolution = printer.resolution() # en principe, c'est 1200dpi
     
            # conversion en pixels des distances donnees en mm
            mm2px = lambda mm: int(mm / 25.4 * resolution)
            deph = mm2px(self.deph)
            pash = mm2px(self.pash)
            depv = mm2px(self.depv)
            pasv = mm2px(self.pasv)
     
            # Calcul du nombre de pages:
            pages, sup = divmod(len(self.etiq), self.nbeh*self.nbev)
            if sup > 0:
                # dans ce cas, il y a une derniere page incomplete
                pages += 1
     
            # page a creer
            painter = QPainter()
     
            # impression sur le fichier pdf
            painter.begin(printer)
            k = 0 # compteur du nombre d'etiquettes imprimees
            for page in range(1, pages+1):
                v = depv # initialisation de la coordonnee verticale de chaque etiquette
                for i in range(self.nbev):
                    # traiter chaque ligne d'etiquette de la page
                    h = deph# initialisation de la coordonnee horizontale de chaque etiquette
                    for j in range(self.nbeh):
                        # traiter chaque etiquette de la ligne
                        if k < len(self.etiq):
                            # ecrire l'etiquette k de coordonnees [h, v] en pixels
                            painter.drawText(h, v, pash-1, pasv-1, self.alignement, self.etiq[k])
                            k += 1
                        h += pash
                    v += pasv
                if page < pages:
                    # faire un 'newPage' a la fin de chaque page, sauf pour la derniere
                    printer.newPage()
            painter.end()
     
        # =======================================================================
        def affiche(self):
            """affiche le pdf cree, dans le visualiseur pdf par defaut de l'OS"""
            if os.path.exists(self.nomfichierpdf):
                try:
                    # solution pour Windows
                    os.startfile(self.nomfichierpdf)
                except:
                    # solution pour les Linux recents
                    os.system('xdg-open ' + self.nomfichierpdf)
     
    ###################################################################################################
    class Feuille( QWidget) :
        def __init__(self, parent = None) :
            super(Feuille, self).__init__( parent)
            self.setObjectName("Feuille")
            self.parent = parent
            self.texte = QTextEdit("Bonjour\ntout va bien")
            self.btn = QPushButton("lancer l'impression")
            self.btn.clicked.connect(self.action_btn)
            layout = QVBoxLayout()
            layout.addWidget(self.texte)
            layout.addWidget(self.btn)
            self.setLayout(layout)
     
        def action_btn(self):
            etiq = []
            nbr_eti = 1
            prm_eti = 0 #pour la page d'etiquette entammee
            for i in range(nbr_eti + prm_eti):
                if i < prm_eti :
                    etiq.append("")
                else :
                    etiq.append(self.texte.toHtml())
     
            deph = 1.0 # mm
            pash = 200.0 # mm
            nbeh = 1
     
            depv = 14 # mm
            pasv = 25.0 # mm
            nbev = 10
     
            etiquettes = Etiquettespdf(etiq, deph, pash, nbeh, depv, pasv, nbev)#, font)
            etiquettes.imprime()
            etiquettes.affiche()
     
    #############################################################################
    if __name__ == "__main__":
        app =  QApplication (sys.argv)
        fp = Feuille()
        fp.show()
        sys.exit(app.exec_())
        app.MainLoop()

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il y a quelques mois, j'ai changé de méthode pour imprimer mes étiquettes, pour les mêmes raisons que tu cites: écrire du html.

    Au lieu d'utiliser painter.drawText, j'utilise maintenant painter.drawStaticText(x, y, qtexte), avec:
    -> x et y = coordonnées en pixels du début d'écriture de l'étiquette (en haut et à gauche de la 1ère ligne)
    -> qtexte = le texte en html intégré dans un QtGui.QStaticText

    Cela donne, par exemple pour une étiquette donnée dans laquelle on a:
    -> le texte "texte" en html
    -> i=numéro de ligne d'étiquettes
    -> j=numéro de colonne d'étiquettes
    -> deph = déplacement horizontal (marge gauche)
    -> pash = pas horizontal entre 2 étiquettes
    -> depv = déplacement vertical (marge haute)
    -> pasv = pas vertical entre 2 étiquettes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                        qtexte = QtGui.QStaticText(texte)
                        qtexte.setTextFormat(QtCore.Qt.RichText) # forcer l'usage du html
                        qtexte.setTextWidth(pash)# largeur étiquette pour alignement des textes par html/css
                        x = deph + j*pash
                        y = depv + i*pasv
                        painter.drawStaticText(x, y, qtexte)
    Cependant, il faut bien se souvenir que ce n'est pas du html, mais seulement un sous-ensemble appelé "rich text" qui a quelques particularités, et il faut s'attendre à quelques tâtonnements: http://doc.qt.io/qt-5/richtext-html-subset.html.

    Par exemple, pour avoir un positionnement précis à l'intérieur de l'étiquette, voilà un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MONTEXTE = """
    <p style="font-size:1px;">&nbsp;</p>
    <div style="margin-top:130px; font-family:sans-serif; color:black;">
      <p style="text-align:center; font-size:10pt; ">{}</p>
      <p style="margin-left:141px;"><span style="font-size:16pt;">Bordereau: </span><span style="font-size:32pt;">{}</span></p>
      <p style="margin-left:141px; margin-top:250px; font-size:14pt;">N° de colis:</p>
    </div>
    La 1ère ligne est bizarre: j'écris un espace de... 1 pixel! Mais si je ne fais pas, le "margin-top" n'est pas reconnu. De ce fait, toutes mes étiquettes commencent par cette ligne.

    Il reste à remplir les '{}' de chaque étiquette avec la méthode format:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte = MONTEXTE.format(var1, var2)
    Bref, avec un peu de tâtonnement sur les particularités du "rich text", on arrive à écrire de plus belles étiquettes qu'avec la précédente méthode.


    En ce qui concerne "QPrintPreviewDialog", je ne l'utilise pas pour l'instant, mais je sais l'utiliser: tu as besoin d'aide?
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre du Club
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    Bonsoir Tyrtamos,
    Tout d'abord un grand merci, pour ta disponibilité et tes conseils qui sont toujours très bons.
    Comme tu me l'as conseillé, j'ai utilisé painter.drawStaticText au lieu de painter.drawText.
    Petit problème mon texte apparaît en tout petit au point de ne pouvoir le lire à l'écran ! je te remets mon code si tu veux constater.

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 3.4
     
    from __future__ import division
    import os,sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    from PyQt5.QtPrintSupport import *
    from PyQt5.QtGui import *
     
    #############################################################################
    class Etiquettespdf(object):
        """Imprime en fichier .pdf et affiche la liste d'etiquettes a imprimer"""
     
        # =======================================================================
        def __init__(self, etiq, deph, pash, nbeh, depv, pasv, nbev):
            """Initialise toutes les variables necessaires
            etiq: liste des chaines, eventuellement multilignes (avec os.linesep)
            deph: point de depart en mm a partir du bord gauche de la feuille
            pash: pas horizontal en mm entre 2 etiquettes
            nbeh: nombre d'etiquettes en horizontal
            depv: point de depart en mm a partir du bord superieur de la feuille
            pasv: pas vertical entre 2 etiquettes (mm)
            nbev: nombre d'etiquettes en vertical
            font: police de caracteres a utiliser (de type QFont)
            """
            self.etiq = etiq
            self.deph = deph
            self.pash = pash
            self.nbeh = nbeh
            self.depv = depv
            self.pasv = pasv
            self.nbev = nbev
     
            # Les var. suivantes (modifiables) ont une valeur par defaut
     
            # nom du fichier pdf a creer
            self.nomfichierpdf = "etiquettes.pdf"
            # nom de l'application qui cree le fichier pdf
            self.nomapplication = ""
            # nom du document pdf cree
            self.nomdocument = ""
            # orientation de la page a imprimer
            self.orientation = QPrinter.Portrait
            # format de la page a imprimer
     
            self.formatpage = QPrinter.A4 #QPrinter.Custom
            self.formatpapier = QSizeF(90.00,30.00)
            # alignement de l'impression sur les etiquettes
            self.alignement = Qt.AlignLeft
     
        # =======================================================================
        def imprime(self):
            """Lance l'impression des etiquettes dans le fichier pdf donne"""
     
            # creation de l'instance printer => fichier etiquettes.pdf
            printer = QPrinter(QPrinter.HighResolution)
            printer.setOutputFileName(self.nomfichierpdf)
            printer.setCreator(self.nomapplication)
            printer.setDocName(self.nomdocument)
            printer.setPageSize(self.formatpage)
            if self.formatpage == QPrinter.Custom :
                printer.setPaperSize(self.formatpapier,printer.Millimeter)
     
            printer.setOrientation(self.orientation)
            printer.setFullPage(True)
            resolution = printer.resolution() # en principe, c'est 1200dpi
     
            # conversion en pixels des distances donnees en mm
            mm2px = lambda mm: int(mm / 25.4 * resolution)
            deph = mm2px(self.deph)
            pash = mm2px(self.pash)
            depv = mm2px(self.depv)
            pasv = mm2px(self.pasv)
     
            # Calcul du nombre de pages:
            pages, sup = divmod(len(self.etiq), self.nbeh*self.nbev)
            if sup > 0:
                # dans ce cas, il y a une derniere page incomplete
                pages += 1
     
            # page a creer
            painter = QPainter()
     
            # impression sur le fichier pdf
            painter.begin(printer)
            k = 0 # compteur du nombre d'etiquettes imprimees
            for page in range(1, pages+1):
                v = depv # initialisation de la coordonnee verticale de chaque etiquette
                for i in range(self.nbev):
                    # traiter chaque ligne d'etiquette de la page
                    h = deph# initialisation de la coordonnee horizontale de chaque etiquette
                    for j in range(self.nbeh):
                        # traiter chaque etiquette de la ligne
                        if k < len(self.etiq):
                            qtexte = QStaticText(self.etiq[k])
                            qtexte.setTextFormat(Qt.RichText) # forcer l'usage du html
                            qtexte.setTextWidth(pash)# largeur étiquette pour alignement des textes par html/css
                            x = deph + j*pash
                            y = depv + i*pasv
                            painter.drawStaticText(x, y, qtexte)
     
    ##                        painter.drawText(h, v, pash-1, pasv-1, self.alignement, self.etiq[k])
                            k += 1
                        h += pash
                    v += pasv
                if page < pages:
                    # faire un 'newPage' a la fin de chaque page, sauf pour la derniere
                    printer.newPage()
            painter.end()
        # =======================================================================
        def affiche(self):
            """affiche le pdf cree, dans le visualiseur pdf par defaut de l'OS"""
            if os.path.exists(self.nomfichierpdf):
                try:
                    # solution pour Windows
                    os.startfile(self.nomfichierpdf)
                except:
                    # solution pour les Linux recents
                    os.system('xdg-open ' + self.nomfichierpdf)
     
     
    ###################################################################################################
    class Feuille( QWidget) :
        def __init__(self, parent = None) :
            super(Feuille, self).__init__( parent)
            self.setObjectName("Feuille")
            self.parent = parent
            self.texte = QTextEdit("Bonjour\ntout va bien")
            self.btn = QPushButton("lancer l'impression")
            self.btn.clicked.connect(self.action_btn)
            layout = QVBoxLayout()
            layout.addWidget(self.texte)
            layout.addWidget(self.btn)
            self.setLayout(layout)
     
        def action_btn(self):
            etiq = []
            nbr_eti = 1
            prm_eti = 0 #pour la page d'etiquette entammee
            for i in range(nbr_eti + prm_eti):
                if i < prm_eti :
                    etiq.append("")
                else :
                    etiq.append(self.texte.toHtml())
     
            deph = 1.0 # mm
            pash = 200.0 # mm
            nbeh = 1
     
            depv = 14 # mm
            pasv = 25.0 # mm
            nbev = 10
     
            etiquettes = Etiquettespdf(etiq, deph, pash, nbeh, depv, pasv, nbev)#, font)
            etiquettes.imprime()
            etiquettes.affiche()
     
    #############################################################################
    if __name__ == "__main__":
        app =  QApplication (sys.argv)
        fp = Feuille()
        fp.show()
        sys.exit(app.exec_())
        app.MainLoop()
    Pour ta méthode de formater le texte avec les balises, le problème est que je pensais récupéré un texte d'un Qtextedit formaté par l'utilisateur avec toHtml().

    pour "QPrintPreviewDialog" je veux bien de l'aide car j'ai essayé à plusieurs reprises de l'utiliser.
    Lorsque je l'utilise avec un QtextEdit je passe avec un lamba preview.paintRequested.connect(lambda p : editor.print_(p)) :
    Comment l'utiliser avec QPrinter ?
    Au plaisir de te relire.

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonsoir,

    Effectivement, comme je travaille toujours avec un printer en "HighResolution" (1200dpi), les caractères affichés par le painter sont tout petits.

    Pour éviter ça, voilà ce que je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            # ajuster la taille des caractères à la définition de l'imprimante
            font = QtGui.QFont()
            font.setFamily("SansSerif")
            paintFont = QtGui.QFont(font, printer)
            painter.setFont(paintFont)
    D'après ce que je comprends, ça équilibre les tailles de polices entre printer et painter.


    Concernant QPrintPreviewDialog, voilà un petit code qui fait le boulot:

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 3
     
    import sys
    from PyQt5 import (QtWidgets, QtCore, QtPrintSupport)
     
    #############################################################################
    class Fenetre(QtWidgets.QWidget):
     
        def __init__(self, parent=None):
            super().__init__(parent)
     
            self.tedit = QtWidgets.QTextEdit(self)
     
            self.bouton = QtWidgets.QPushButton("imprimer", self)
            self.bouton.clicked.connect(self.imprimer)
     
            posit = QtWidgets.QGridLayout()
            posit.addWidget(self.tedit, 0, 0)
            posit.addWidget(self.bouton, 1, 0)
            self.setLayout(posit)
     
        def imprimer(self):
            printer = QtPrintSupport.QPrinter()
            preview = QtPrintSupport.QPrintPreviewDialog(printer)
            preview.paintRequested.connect(self.tedit_printPreview)
            preview.exec_()
     
        @QtCore.pyqtSlot("QPrinter")
        def tedit_printPreview(self, printer):
            self.tedit.print_(printer)
     
    #############################################################################
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        fen = Fenetre()
        fen.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        fen.show()
        sys.exit(app.exec_())
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Membre du Club
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    Ta solution pour la taille de la police règle bien le problème.

    Pour l'aperçu avant impression cela fonctionne aussi si je veux imprimer que le contenu du QtextEdit.
    Mais pour l'impression de mes étiquettes, je transfert le contenu de ma zone texte dans une liste et c'est à partir de cette liste que j'imprime via Qprinter.
    D'ailleurs c'est à partir de ton code étiquette
    Bonne journée

  6. #6
    Membre du Club
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    Bonjour,
    Voici plusieurs jours que je cherche comment afficher mes étiquettes créées via "QPrinter" dans un "QPrintPreviewDialog" ?
    Ta solution Tyrtamos est bien pour le contenu d'un QTextEdit, mais comme je veux imprimer le texte saisi, sous forme d'étiquette en plusieurs exemplaires.
    y a t'il une solution ?
    Merci

  7. #7
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par rob-42 Voir le message
    y a t'il une solution ?
    Désolé, mais pour l'instant, je ne trouve pas.

    Avec le code actuel, la seule chose que ça fait, c'est de créer un fichier pdf. Il n'est pas prévu de pouvoir l'afficher dans un objet Qt.

    Il faudrait pouvoir créer les étiquettes dans un QTextEdit, et ne passer au pdf que pour l'enregistrement. Avec le QTextEdit, on devrait alors pouvoir l'utiliser dans un QPrintPreviewDialog. Mais pour l'instant, je n'ai pas trouvé, et je ne sais même pas si ce sera possible.

    Je ne désespère pas, mais si tu es pressé, utilise ma solution: affiche le fichier pdf et imprime-le avec un lecteur pdf (acroread, etc...).
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  8. #8
    Membre du Club
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    merci pour ton implication.
    oui en attendant je reste avec le lecteur Pdf, mais comme dans mon appli toutes les impressions se font avec "QPrintPreviewDialog", je préférerai harmoniser mes impressions.
    mais je viens de voir que tu bosses dessus

  9. #9
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Cela fait maintenant pas mal d'heures que je suis sur le sujet, et je n'y arrive toujours pas.

    La solution de surcharger le paintEvent pour pouvoir dessiner avec un QPainter sur un QTextEdit est trop limitée: le dessin ne concerne que la partie visible à l'écran (.viewport()), ce qui ne suffit pas pour imprimer des étiquettes!

    Je viens d'essayer avec un QPixmap placé dans un QLabel, lui-même dans un QScrollArea, mais ça devient une usine à gaz.

    Manifestement, la solution initiale qui consiste à dessiner directement sur un QPrinter est la meilleure, mais elle semble exclure QPrintPreviewDialog.

    Bref, pas de solution pour l'instant, et je suis obligé de lâcher le sujet pendant quelques temps.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  10. #10
    Membre du Club
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    Merci Tyrtamos, de toute façon je ne suis pas sans solution.

Discussions similaires

  1. [XL-2010] générer et imprimer des étiquettes DATAMATRIX sans Web service
    Par amineham87 dans le forum Excel
    Réponses: 0
    Dernier message: 10/07/2015, 10h26
  2. Réponses: 1
    Dernier message: 07/01/2014, 12h17
  3. Imprimer des étiquettes avec un code barre
    Par TLOH45 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 29/09/2011, 10h27
  4. Réponses: 0
    Dernier message: 22/01/2011, 16h32
  5. Réponses: 4
    Dernier message: 07/12/2009, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo