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

VB.NET Discussion :

Changer ma methode d'impression mais comment faire ?


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut Changer ma methode d'impression mais comment faire ?
    Bonjour,
    J'ai une appli qui effectue des calculs que je peux jusqu'à présent imprimer via un button print de cette manière :
    - j'ai créé un form appelé formprint
    - ma class impression est la suivante :
    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
    Imports System.Drawing.Printing
     Public Class ClassImpression
     Private Declare Function StretchBlt Lib "gdi32.dll" Alias "BitBlt" (ByVal _
               hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As _
               Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal _
               hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, _
               ByVal dwRop As System.Int32) As Long
        Private myimage As Bitmap
        Private thectrl As Control
        Private Function Capturectrl(ByVal ctrl As Control) As Bitmap
            Dim memoryImage As Bitmap
            Dim mygraphics As Graphics = ctrl.CreateGraphics()
            Dim s As Size = ctrl.Size
            memoryImage = New Bitmap(s.Width - 10, s.Height - (SystemInformation.FrameBorderSize.Width + 6 + SystemInformation.CaptionHeight), mygraphics)
            Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
            Dim dc1 As IntPtr = mygraphics.GetHdc
            Dim dc2 As IntPtr = memoryGraphics.GetHdc
            StretchBlt(dc2, 0, 0, ctrl.ClientRectangle.Width, _
               ctrl.ClientRectangle.Height, dc1, 0, 0, 13369376)
            mygraphics.ReleaseHdc(dc1)
            memoryGraphics.ReleaseHdc(dc2)
            Return memoryImage
        End Function
        Public Function GetPreview() As Bitmap
            Return Capturectrl(thectrl)
        End Function
        Public Sub printdoc()
            Try
                Dim prtd As New PrintDialog
                'document à imprimer
                Dim doc As New PrintDocument
                myimage = Capturectrl(thectrl)
                AddHandler doc.PrintPage, AddressOf printform
                'paramètres de page
                Dim ps As New PageSettings
                ps.Landscape = False
                doc.DefaultPageSettings = ps
                'indique à la prévisualisation le document à montrer
                prtd.Document = doc
                If prtd.ShowDialog = DialogResult.OK Then
                    prtd.Document.Print()
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
        Private Sub printform(ByVal sender As Object, ByVal e As PrintPageEventArgs)
            Try
                e.Graphics.DrawImage(myimage, 0, 0)
                e.HasMorePages = False
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
        Public Sub New(ByVal ctrl As Control)
            thectrl = ctrl
        End Sub
    End Class
    - mon bouton print renvoie le code suivant :
    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
    Private Sub print_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles print.Click
                   If printerlist() = String.Empty Then
                messageaff = "No printer available on this station"
                infoaff = "Error"
                MessageBox.Show(messageaff, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Error)
            Else
            Try
                Dim p As New ClassImpression(Me)
                showimage = p.GetPreview
                p.printdoc()
     
            Catch ex As Exception
                    messageaff = "Printer Error : end of the impression"
                    infoaff = "Error"
                    MessageBox.Show(messageaff, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
     
            End If
               End Sub
    J'ai par contre de gros problèmes avec cette méthode :
    - Je voudrais pouvoir imprimer 2 feuilles format A4 ce qui n'est pas le cas actuellement.
    - Je suis limité à la résolution de mon écran pour l'impression. Pour exemple :

    Impression faite avec un moniteur ayant une résolution verticale de 1024



    La même mais avec un écran ayant une résolution verticale de 768 (moniteur 16/10)



    Je pense qu'il faut donc que je change ma méthode d'impression. Peut-être générer un pdf par exemple, que je puisse imprimer au moins 2 feuilles car j'ai de nouvelles données a imprimer et surtout m'affranchir de la résolution des écrans car cela devient insupportable.

    Pourrais-je avoir un conseil avisé ?
    Merci beaucoup

  2. #2
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    personne ?
    Je me suis peut être mal exprimé .....
    Actuellement et si je fais bien ce que je veux faire, mon classimpression fait une "capture d'ecran" de mon printform en jpg et imprime ce qu'il a capturé, ce qui fonctionne bien dans le cadre d'une feuille format portrait A4.

    J'aurais juste voulu qu'au lieu d'un jpg, je puisse obtenir un pdf et imprimer celui ci même si il contient plusieurs pages A4

  3. #3
    Membre expérimenté Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Par défaut
    Salut,

    Je crois que le plus simple serais d'utiliser crystal report.

    Tu pourra disposer tes valeurs comme bon te semble, pour ensuite l'afficher ou l'imprimer.

    Tu aura un plein contrôle sur tout.

    Bonne chance

  4. #4
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    Salut Saintelaitlait
    J'ai bien pensé a utiliser crystal report, j'ai dailleurs installé crystal report pour VS2010 et tenté la chose suivante :
    Mon projet ==> ajouter ==> nouvel element ==> reporting ==> crystal report
    apres soit j'utilise l'assistant soit manuellement.
    Avec l'assistant il me demande de connecter a une DB mais elle ne contient pas tous les elements que je veux avoir a l'impression
    Manuellement, je peux ma baser sur mon formulaire printform poste en debut de topic.
    Mais moi ce que je voudrais, c'est vraiment avoir sous forme pdf la même visualisation que le printform, et surtout pouvoir imprimer sur plusieurs pages (2 pages pour être précis)

  5. #5
    Membre expérimenté Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Par défaut
    Si tu veux imprimer sur deux pages c'est parce que ton formulaire est plus grand que ton écran?

    Si oui imprimer des contrôles qui ne sont pas dans la zone d'affichage c'est relou.

    J'ai trouvé une classe qui permet de le faire avec un treeView. Si jamais tu veux essayer de t'en coder une en te basant dessus je te l'enverrai.

    Sinon sur msdn ya ca, ca explique comment utiliser printDocument pour imprimer un richtextBox avec une scrollbar. En appliquant le même principe à ton form tu devrait arriver à faire ce que tu veux.

  6. #6
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    disons qu'en fait:
    au début j'ai fait un form avec un height de 1044 (le max que je pouvais faire) qui rassemblait tous les paramètres que je devais imprimer (textbox avec contenu, labels, picturebox ...etc ..).
    Je faisais une capture d'ecran, un enregistrement en jpg de ce printform et je l'imprimais.
    Vu que 1044 passait juste niveau résolution verticale, j'avais l'intégralité de ce que je voulais.

    J'ai maintenant beaucoup plus de choses a imprimer et a enregistrer, ca ne passe plus du tout dans un form de 1044. Cest pourquoi j'avais pensé a crystal report et a générer un rapport de plusieurs pages en PDF. Un peu comme si j'ouvrais un document PDF avec adobe reader et que je voulais l'imprimer.
    J'ai essayé avec la librairie iTextSharp et j'ai aussi bidouillé un truc pour essayer d'utiliser pdf creator mais ca a lamentablement raté du coup je suis un peu planté la

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/11/2008, 20h00
  2. erreur de syntaxe, mais comment faire?
    Par bastienh dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 27/05/2008, 10h47
  3. Réponses: 46
    Dernier message: 04/01/2007, 19h02
  4. [C#] Impression GDI+, OK mais comment faire plus simple ?
    Par yo2105 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 29/12/2006, 20h29
  5. Réponses: 4
    Dernier message: 13/12/2005, 18h14

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