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 :

Impression de droite à gauche?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2013
    Messages : 121
    Par défaut Impression de droite à gauche?
    Bonjour

    je veux imprimer de droite à gauche (en arabe) y a t'il une instruction ou une configuration à faire pour ce là.

    voici mon code qui imprime de gauche à droite


    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
       Private Sub BtnImprimer_Click(sender As Object, e As EventArgs) Handles BtnImprimer.Click
                Dim MiseEnPage As New PageSetupDialog
            Dim MonDoc As New Printing.PrintDocument
            With MiseEnPage
                .Document = MonDoc
                .AllowOrientation = False
                .AllowPaper = False
                .EnableMetric = True
                .MinMargins = New Printing.Margins(0, 0, 0, 0)
                '.ShowDialog(Me)
                .Dispose()
            End With
     
            AddHandler MonDoc.PrintPage, AddressOf MonDoc_PrintPage 
            MonDoc.Print() ' Tu appels la fonction Print qui va appeler PrintPage
     
        End Sub
     
        Private Sub MonDoc_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
            ' C'est dans cette méthode qu'on imprime réellement.
            Dim Police As New Font("Arial", 11)
            Dim PoliceGras As New Font("Arial", 12, FontStyle.Bold)
            Dim XPos, YPos As Single
            Dim ChaineImpr As String
            Using MyGraphics As Graphics = e.Graphics
     
                '----------------------- Impression de l'image -------------------------------
                'Dim Picture As New Bitmap(Me.PictureBox1.Image)
                'MyGraphics.DrawImage(Picture, 2.0F * e.MarginBounds.Width / 3.0F, YPos)
                '----------------------------------------------------------------------
     
     
                Dim SautLigne As Single = MyGraphics.MeasureString("X", PoliceGras).Height
                ChaineImpr = Me.TXTCIN.Text + " -- " + Me.TXTCNRPS.Text 
                MyGraphics.DrawString(ChaineImpr, PoliceGras, Brushes.Black, XPos , YPos)
                YPos = YPos + SautLigne * 1.5F
     
                ChaineImpr = Me.TXTPreNomPers.Text + "الإسم و اللقب : "
                MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPos , YPos)
                YPos = YPos + SautLigne * 1.5F
     
           End Using
     
        End Sub

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Tu ne dis pas d'où provient ton texte à imprimer, mais beaucoup de contrôles, dont TextBox et RichTextBox ont une propriété RightToLeft pour afficher, du moins si j'ai bien compris mon aide, le texte de droite à gauche. Donc, en principe, si tu imprimes de gauche à droite un texte que tu affiches de droite à gauche, cela devrait ressembler au résultat requis.

  3. #3
    Membre très actif
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2013
    Messages : 121
    Par défaut
    Salut

    Je développe sur VS2012 avec une base Access 2007

    Pour ma form RightToLeft = Yes
    RightToLeftLayout = True
    Pour mes TextBox RightToLeft = Yes

    Dans ma Form, j'ai 38 TextBox et 3 ComboBox que je les charge à partir des tables de ma base. Je veux imprimer des TextBox choisies (Pas Tous) mais l'impression se fait de gauche à droite au lieu de droite à gauche.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    drawstring a une surcharge qui demande un stringformat je crois et ca doit etre là dessus qu'on dit qu'on veut right to left
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre très actif
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2013
    Messages : 121
    Par défaut
    Merci Pol
    J'ai essayée ton idée mais le correcteur automatique de VS2012 m'a proposé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     ChaineImpr = Me.TXTPreNomPers.Text + "Nom et Prénom :
     "MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, StringFormatFlags.DirectionRightToLeft, YPos)
     YPos = YPos + SautLigne * 1.5F

    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ChaineImpr = Me.TXTPreNomPers.Text + "Nom et Prénom : "
                MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPos , YPos)
                YPos = YPos + SautLigne * 1.5F
    mais aucun changement

  6. #6
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    Bonjour JetLibre

    Un peu "cumbersome" avec gdi+ mais possible...

    on utilise StringFormat:
    - StringFormatFlags.DirectionRightToLeft
    En plus StringFormat dispose de l'enum pour chiffre arabe hindi :
    -SetDigitSubstitution(CultureInfo("ar").LCID, StringDigitSubstitute.Traditional)

    Enfin il faut translater l'origine du graphics à droite à l'endroit approprie tenant compte des marges:
    -e.MarginBounds.Right (debut marge droite)
    -tenir compte du fait que xpos doit etre ajuste en soustrayant la largeur de chaine à imprimer..

    Dernier point avant de rentrer dans "zone de traitement arabic " on sauvegarde le graphicstate et on translate...

    A la sortie de la "zone de traitement arabic " on restore graphicstate....qui restore l'origine du graphics normale(0,0) et on continue en caracteres latins.....

    code:


    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
     
    Imports System.Drawing.Drawing2D
    Imports System.Globalization
     
    Public Class Form2
     
        Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            ' C'est dans cette méthode qu'on imprime réellement.
            Dim Police As New Font("Arial", 11)
            Dim PoliceGras As New Font("Arial", 12, FontStyle.Bold)
     
     
            'definit unite &  marges
            e.Graphics.PageUnit = GraphicsUnit.Display
            Dim valMargin As Single = 5
            e.PageSettings.Margins = New Printing.Margins(valMargin, valMargin, valMargin, valMargin)
            Dim XPos As Single = e.MarginBounds.Left
            Dim YPos As Single = e.MarginBounds.Top
     
            Dim ChaineImpr As String
            Dim MyGraphics As Graphics = e.Graphics
     
            '--------------- dessine limite page
            Dim penMargin = New Pen(Brushes.Red, 1.0F)
            penMargin.DashStyle = DashStyle.Dash
            MyGraphics.DrawRectangle(penMargin, e.MarginBounds)
     
            '--------------- save etat Graphics car 
            '---------------- translate origine de mygraphics à droite
            Dim myState As GraphicsState = MyGraphics.Save()
            '--------------- translate origine coords à droite
            Dim w As Single = CType(e.MarginBounds.Right, Single)
            MyGraphics.TranslateTransform(w, 0.0)
     
     
            '--------------- string format permet 
            ' = > ecrire de droite à gauche : StringFormatFlags.DirectionRightToLeft()
            ' =>  les chiffres hindi: SetDigitSubstitution. 
     
            Dim fmt As StringFormat = New StringFormat(StringFormat.GenericTypographic)
            fmt.SetDigitSubstitution(New CultureInfo("ar").LCID, StringDigitSubstitute.Traditional)
            fmt.FormatFlags = StringFormatFlags.DirectionRightToLeft
            fmt.Alignment = StringAlignment.Center
     
            Dim SautLigne As Single = MyGraphics.MeasureString("X", PoliceGras).Height
            ChaineImpr = Me.TXTCIN.Text & " -- " & Me.TXTCNRPS.Text
            'mesure largeur chaine pour ajuster le XposArabic
            Dim XPosArabic As Single = XPos - MyGraphics.MeasureString(ChaineImpr, PoliceGras).Width
            MyGraphics.DrawString(ChaineImpr, PoliceGras, Brushes.Black, XPosArabic, YPos, fmt)
     
            '--------------- restore etat Graphics
            '---------------- restore origine de mygraphics à gauche
            MyGraphics.Restore(myState)
     
            'pas de specification de fmt:ecriture occidentale de gauche à droite
            YPos = YPos + SautLigne * 1.5F
     
            ChaineImpr = Me.TXTPreNomPers.Text & "الإسم و اللقب : "
            MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPos, YPos)
            YPos = YPos + SautLigne * 1.5F
     
     
            penMargin.Dispose()
     
     
     
     
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            PrintDocument1.OriginAtMargins = False
            'texte aeabic
            Dim chiffreHindi As Integer = 245
            Me.TXTCIN.Text = "...إختبار  الرسم" & " => " & chiffreHindi.ToString
            Me.TXTCNRPS.Text = " سلام "
     
            'texte francais
            Me.TXTPreNomPers.Text = "Bonjour  "
     
            PrintPreviewDialog1.ShowDialog()
        End Sub
    End Class
    bonjour au general MontCalm ....et
    bon code....

  7. #7
    Membre très actif
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2013
    Messages : 121
    Par défaut
    Salut tous le monde
    J'ai essayée d'adapter le code de Mebarek en le modifiant un peut et voila à quoi j'ai arrivé à faire:


    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
    Private Sub MonDoc_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
    
            Dim Police As New Font("Arial", 13)
            Dim PoliceGras As New Font("Arial", 15, FontStyle.Bold)
            Dim XPos As Single = e.MarginBounds.Left
            Dim YPos As Single = e.MarginBounds.Top
            Dim ChaineImpr As String
            Dim MyGraphics As Graphics = e.Graphics
            Dim w As Single = CType(e.MarginBounds.Right, Single)
            MyGraphics.TranslateTransform(w, 0.0)
            e.Graphics.PageUnit = GraphicsUnit.Display
            e.PageSettings.Margins = New Printing.Margins(0, 0, 0, 0)
    
            Dim fmt As StringFormat = New StringFormat(StringFormatFlags.DirectionRightToLeft)
            fmt.SetDigitSubstitution(New Globalization.CultureInfo("Ar").LCID, StringDigitSubstitute.National)
            fmt.FormatFlags = StringFormatFlags.DirectionRightToLeft
            fmt.Alignment = StringAlignment.Near
    
    
            '        '----------------------- Impression de l'image -------------------------------
            '        'Dim Picture As New Bitmap(Me.PictureBox1.Image)
            '        ''MyGraphics.DrawImage(Picture, 2.0F * e.MarginBounds.Width / 3.0F, YPos)
            '        'MyGraphics.DrawImage(Picture, 1.0F * e.MarginBounds.Width / 30, YPos)
            '        '------------------------------------------------------------------------------
    
            '---------------------------------------ok-------------------------------------------------
            Dim SautLigne As Single = MyGraphics.MeasureString("X", Police).Height
            ChaineImpr = Me.TXTCIN.Text & " / " & Me.TXTCNRPS.Text & " / " & Me.TXTMutuel.Text
            Dim XPosArabic As Single = XPos - MyGraphics.MeasureString(ChaineImpr, Police).Width
            MyGraphics.DrawString(ChaineImpr, PoliceGras, Brushes.Black, XPosArabic, YPos, fmt)
            YPos = YPos + SautLigne * 1.5F
            '-------------------------------------ok---------------------------------------------------
            'Dim XPosArabic As Single = XPos - MyGraphics.MeasureString(ChaineImpr, Police).Width
            ChaineImpr = "الإسم و اللقب : " & Me.TXTPreNomPers.Text & " " & Me.TXTPerePers.Text & " " & Me.TXTNomPers.Text
            MyGraphics.DrawString(ChaineImpr, PoliceGras, Brushes.Black, XPosArabic, YPos, fmt)
            YPos = YPos + SautLigne * 1.5F
            '----------------------------------------ok------------------------------------------------
            ChaineImpr = "تاريخ الولادة ومكانها : " & Me.TXTDateNaisPers.Text & " -- " & Me.TXTLieuNais.Text
            MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPosArabic, YPos, fmt)
            YPos = YPos + SautLigne * 1.5F
            '--------------------------------------------------------------------------ok--------------
            ChaineImpr = "الحالة العائلية : " & Me.TXTSitFam.Text
            MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPosArabic, YPos, fmt)
            YPos = YPos + SautLigne * 1.5F
            '------------------------------------------ok----------------------------------------------
            ChaineImpr = "العنوان الحالي : " & Me.TXTActuelAdresse.Text
            MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPosArabic, YPos, fmt)
            YPos = YPos + SautLigne * 1.5F
            '----------------------------------------information manquante---------------------------------------------
            ChaineImpr = "الحساب الجاري : " & Me.TXTRIB.Text & "  //  " & "المؤسسة المالية : " & Me.TXTBanque.Text & "  /  " & "الفرع : " & Me.TXTAgence.Text
            'MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, e.MarginBounds.Left, YPos)
            MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPosArabic, YPos, fmt)
            YPos = YPos + SautLigne * 1.5F
    '----------------------------------------information manquante---------------------------------------------
            ChaineImpr = "تاريخ الإنتداب : " & Me.TXTDateRecrutement.Text & " -- " & "تاريخ الترسيم : " & Me.TXTDateTitularisation.Text & " -- " & "تاريخ التقاعد : " & Me.TXTDateRetraite.Text
            MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPosArabic, YPos, fmt)
            YPos = YPos + SautLigne * 1.5F
            '-----------------------------------------------------------ok----------------------------
            ChaineImpr = "الإدارة : " & Me.TXTDirections.Text
            MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPosArabic, YPos, fmt)
            YPos = YPos + SautLigne * 1.5F
    '----------------------------------------------------------------------------------------
    
        End Sub
    Les données s'impriment convenablement grâce à " fmt.Alignment = StringAlignment.Near " mais à un décalage de 7 cm de la marge droite et cela fait que certaines lignes ne s'impriment pas complètement.
    - Comment réduire la marge blanche à droite de 7 cm à 1.5 ou 2 cm.
    - Comment imprimer la photo du Personnel dans un cadre en haut et à gauche tout en adaptant la taille de l'image à ce cadre quelque soit sa taille.
    comme la propriété StrechImage.

    Merci

  8. #8
    Membre très actif
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2013
    Messages : 121
    Par défaut
    mon problème de photo est résolu mais ça reste la grande marge blanche à droite. je cherche comment la réduire.

Discussions similaires

  1. Clic droit/gauche souris
    Par Mouse! dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 30/05/2013, 20h34
  2. [Débutant] Impression de droite a gauche
    Par zoubazouba40 dans le forum VB.NET
    Réponses: 2
    Dernier message: 30/05/2013, 13h14
  3. [VB.NET 2005] Recherche de droite à gauche d'un carractere
    Par lezard777 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 15/04/2006, 16h02
  4. Vba excel agrandir la zone d'impression a droite
    Par mb95 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/12/2005, 07h42
  5. [StringTokenizer] Découpage de droite à gauche ?
    Par july dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 03/06/2005, 12h02

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