Problème d'impression de formulaire

Signaler
Messages postés
103
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
10 septembre 2007
-
Messages postés
36
Date d'inscription
lundi 3 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2006
-
Bonjour,



Je dois imprimer 2 formulaires. Appelons les Form A et Form B. Mais je rencontre 3 problèmes :



1. Ma Form A comprend essentiellement des labels. Pour ces labels,
j'utilise la police Arial (rien de bizarre donc), mais quand j'imprime,
les caractères ne sont pas nets et je vois pas d'ou ca peut venir
compte tenu que tout est normal à l'écran.



2. Comment faire pour que mon impression prenne toute la page (format A4 ?)



3. Quand l'impression de la Form A est finie, je dois lancer
l'impression de Form B automatiquement. Il faudrait donc que je trouve
un évènement qui m'indique quand ma Form B est complètement dessinée,
mais je n'ai pas trouvé :/



Pour info, pour imprimer j'utilise cette méthode :



PrintDocument pd = new PrintDocument();

Bitmap bmp;



private void capture()

{

pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

this.Bimpression.Visible = false;

bmp = new Bitmap(this.Width, this.Height);

Graphics bmpGraphics = Graphics.FromImage(bmp);

IntPtr bmpHdc = bmpGraphics.GetHdc();



Message msg = new Message();

msg.Msg = WM_PRINT;

msg.HWnd = this.Handle;

msg.WParam = bmpHdc;

msg.LParam = new IntPtr(PRF_NONCLIENT | PRF_CLIENT | PRF_ERASEBKGND | PRF_CHILDREN | PRF_OWNED);

this.WndProc(ref msg);



bmpGraphics.ReleaseHdc(bmpHdc);

bmpGraphics.Dispose();

pd.Print();

pd.Dispose();

}



private void pd_PrintPage(object sender, PrintPageEventArgs e)


{


e.Graphics.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);


}



Merci d'avance

2 réponses

Messages postés
36
Date d'inscription
lundi 3 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2006

Salut,
Tu n'utilise pas la bonne méthode pour imprimer :
" 1) mais quand j'imprime, les caractères ne sont pas nets et je vois pas d'ou ca peut venir..."
c'est normal car tu utilise l'impression d'une capture c'est à dire qu'il ne timprime pas le texte mais une image qui résulte d'un printscreen : d'ailleurs si tu ouvre avec adobe acrobat tu vera que le texte est bien en fait une image car tu ne peux pas le sélectionner.

"2. Comment faire pour que mon impression prenne toute la page (format A4 ?)" .. je comprend pas trop tu veux zoomer??

"3. Quand l'impression de la Form A est finie, je dois lancer l'impression de Form B automatiquement."
Avec l'autre méthode d'impression tu saura quand ce sera fini.

--->

alors voici un exemple :

tu crées une nouvelle classe.. moi j'utilise une windows form (je suis un flemard et c'est plus facile pour
faire glisser les printDocument de la boite à outils)

// le printDocument
public System.Drawing.Printing.PrintDocument monDocument;
// la boite de dialogue pour imprimer
public System.Windows.Forms.PrintDialog printDialog;

public
Form_impressionDesLabels(ArrayList list, UserControl_ZoneAuto u)
{
// sa les la liste des label à imprimer
this
.listeDeLabel = list;
I
nitializeComponent();
}

//ensuite on implémente l'événement printPage
private void monDocument_PrintPage(object
sender, System.Drawing.Printing.PrintPageEventArgs e)
{
SolidBrush brush;
StringFormat stringFormat = new StringFormat();
int locationX = 0;
// Maintenant on imprimer vraiment les labels :
foreach (LabelTexte l in this
.listeDeLabelTexte)
{
brush = new
SolidBrush(l.ForeColor);
// on repère l'alignement du label stringFormat.Alignment ((l.TextAlign ContentAlignment.TopRight) ||
(l.TextAlign == ContentAlignment.BottomRight)||
(l.TextAlign == ContentAlignment.MiddleRight)) ? StringAlignment.Far : StringAlignment.Near;
// on définit l'emplacement locationX stringFormat.Alignment StringAlignment.Far ? l.Location.X + l.Width : l.Location.X;
// ET LA ON LE DESSINE
e.Graphics.DrawString(l.Text,l.Font,brush,locationX,l.Location.Y,stringFormat);
}
}

Voila c'est pas plus compliqué que cela et en plus tu as vraiment imprimer le texte c'est pas une image salle,
tu verras en impriment avec acrobat tu pourras sélectionner le texte.

...pour ta troisième question tu as aussi un evenement EndPrint :

private void monDocument_EndPrint(object
sender, System.Drawing.Printing.PrintEventArgs e)
{
// Tu peux passer à autre chose !!
}


A+
Seb.
Messages postés
36
Date d'inscription
lundi 3 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2006

oups c'est pas très jolie comme c'est écris.. mais désolé j'ai pas trop de temps... :-(