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

  1. #1
    Membre régulier
    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
    Points : 77
    Points
    77
    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 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    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.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Membre régulier
    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
    Points : 77
    Points
    77
    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 sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    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 régulier
    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
    Points : 77
    Points
    77
    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
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    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 régulier
    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
    Points : 77
    Points
    77
    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 régulier
    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
    Points : 77
    Points
    77
    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.

  9. #9
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    re
    j'ai defini les custommarrgin par rapport au format de page en cours....

    Mais on peut les definir par rapport à l'imprimant dans:
    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
     
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            PrintDocument1.OriginAtMargins = False
            Dim customMargin As Printing.Margins = New Printing.Margins
            customMargin.Left = 1.5
            customMargin.Top = 1.5
            customMargin.Right = customMargin.Left
            customMargin.Bottom = customMargin.Top
     
      'ici tester si customMargin  est supporte  
            'If customMargin.Left < PrintDocument1.DefaultPageSettings.HardMarginX And customMargin.Top < PrintDocument1.DefaultPageSettings.HardMarginY Then
            '    avant d' affecter à PrintDocument1.DefaultPageSettings.Margins
            'End If
     
     
            PrintDocument1.DefaultPageSettings.Margins = customMargin
     
            '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
    Les marges imprimantes ont priorite sur celle du format de page par defaut en cours...
    Evidement il faut verifier si ces valeurs ne sont pas infereures à celle supporte par le hard imprimante les fameuses "hardmargin"...
    bon code...

  10. #10
    Membre régulier
    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
    Points : 77
    Points
    77
    Par défaut
    Je te remercie pour tes efforts mais toujours la grande marge blanche à droite

    voila mon 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
    Private Sub BtnImprimer_Click(sender As Object, e As EventArgs) Handles BtnImprimer.Click
     
            Dim MonDoc As New Printing.PrintDocument
            Dim customMargin As Printing.Margins = New Printing.Margins
     
             MonDoc.OriginAtMargins = False
     
            customMargin.Left = 1.5
            customMargin.Top = 1.5
            customMargin.Right = customMargin.Left
            customMargin.Bottom = customMargin.Top
     
            MonDoc.DefaultPageSettings.Margins = customMargin
     
            AddHandler MonDoc.PrintPage, AddressOf MonDoc_PrintPage
            MonDoc.Print()
     
          End Sub
    MonDoc c'est PrintDocument1

    je vous donne les types de mes imprimantes que j'utilise:

    à la maison: HP LaserJet 1300, HP LaserJet Couleur 1600, HP DeskJet 6000
    au Bureau: Samsung 3051, Epson EPL6200, Kyocera FS-6025MFP KX (PhotoCopie 4 en 1 - Imprimante Local et Réseau /PhotCopie/Scanner/Fax)

    Pour le moment je test mon application sur HP 1300 et je dois la fonctionner sur tous ces imprimante et même sur d'autres types qui vont arrivées.

    Merci beaucoup pour tous qui s'intéressent.

  11. #11
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    re
    mmm.....
    J'ai revu le code et l'ennui provient de Graphics.MeasureString qui dispose d'une surcharge de cette methode ou l'on doit preciser la meme unite de mesure que celle indiquee dans Graphics.Unit:

    code deja communique avec la ligne incrimine à modifier:

    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
     
    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 
            e.Graphics.PageUnit = GraphicsUnit.Display
     
            'definit  marges
            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.Near
     
            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
     
            'ICI MODIFICATION A FAIRE
            Dim XPosArabic As Single = XPos - MyGraphics.MeasureString(ChaineImpr, PoliceGras, GraphicsUnit.Display).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
            Dim customMargin As Printing.Margins = New Printing.Margins
            customMargin.Left = 1.5
            customMargin.Top = 1.5
            customMargin.Right = customMargin.Left
            customMargin.Bottom = customMargin.Top
            PrintDocument1.DefaultPageSettings.Margins = customMargin
     
            'ici tester si customMargin  est supporte  
            'If customMargin.Left < PrintDocument1.DefaultPageSettings.HardMarginX And customMargin.Top < PrintDocument1.DefaultPageSettings.HardMarginY Then
            '    avant d' affecter à PrintDocument1.DefaultPageSettings.Margins
            'End If
     
            'texte arabic
            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
    bon code...

Discussions similaires

  1. Clic droit/gauche souris
    Par Mouse! dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 30/05/2013, 21h34
  2. [Débutant] Impression de droite a gauche
    Par zoubazouba40 dans le forum VB.NET
    Réponses: 2
    Dernier message: 30/05/2013, 14h14
  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, 17h02
  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, 08h42
  5. [StringTokenizer] Découpage de droite à gauche ?
    Par july dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 03/06/2005, 13h02

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