2010-09-16 5 views
0

J'ai hérité d'un code pour imprimer le contenu d'un formulaire, mais l'image produite sur papier semble avoir une sorte d'ombre/flou comme si elle essayait de faire anti-alasing mais pas très bien fait et le les lettres sont pixellisées sur les bords.Impression Windows Form

Est-ce que quelqu'un connaît un moyen d'améliorer la qualité finale?

System.Drawing.Printing.PrintDocument Doc = new System.Drawing.Printing.PrintDocument(); 
      Doc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.Doc_PrintPage123); 
      Doc.DefaultPageSettings.Landscape = true; 
      Doc.DefaultPageSettings.PrinterSettings.DefaultPageSettings.Landscape = true; 
      Doc.DefaultPageSettings.PrinterSettings.Copies = 2; 
      Doc.PrinterSettings.Copies = 2; 
      Doc.Print(); 

private void Doc_PrintPage123(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
     { 
      Bitmap bitmap = new Bitmap(AForm.Width, AForm.Height); 
      AForm.DrawToBitmap(bitmap, new Rectangle(0, 0, bitmap.Width, bitmap.Height)); 
      e.Graphics.DrawImage(bitmap, 0, 0); 
     } 
+2

"ombre/flou"? C'est à peu près aussi vague que possible et ne nous dit rien de votre problème. – Joey

+0

@joey: est-ce que ma mise à jour vous aide – Jon

+0

Je n'en ai aucune idée de toute façon. La dernière fois que j'essayais d'imprimer un formulaire était en VB 6 avec la fonction 'PrintForm'. Mais je soupçonnais fortement que "l'ombre/flou" n'est pas le genre de détail qui aiderait les gens qui en sauraient plus à ce sujet. – Joey

Répondre

3

C'est normal. Une imprimante a une résolution qui est facilement 6 fois mieux qu'un moniteur. Avec le mappage par défaut (1 pixel = 0,01 pouce), vous obtiendrez un bitmap sur l'imprimante qui est à peu près de la même taille que sur l'écran. Avec 1 pixel sur l'écran devenant une goutte de 6 x 6 pixels sur l'imprimante. Oui, ça n'a pas l'air génial.

Vous obtiendrez une image nette si vous dessinez 6 fois plus petit. Un peu plus gros qu'un timbre-poste. Ne pas imprimer les formulaires. Profitez de la résolution de l'imprimante en dessinant sur e.Graphics. Beaucoup de travail bien sûr, les générateurs de rapports comme Crystal Reports sont populaires.

+0

Je suis d'accord mais je ne peux pas utiliser Crystal Reports dans ce scénario. – Jon

+0

Eh bien, dessinez avec e.Graphics. Il aura fière allure et vous pourrez présenter l'information dans un format beaucoup plus adapté au papier. Mode portrait et pas de taches inesthétiques de couleurs. –

0

Essayez ceci: e.Graphics.SmoothingMode = SmoothingMode.HighQuality;

+0

Pas de différence nototheureusement – Jon

+1

Notez que pour l'impression antialiasing est une mauvaise idée, généralement parce que vous obtenez des résultats plus mauvais en raison de tramage. – Joey

1

Le formulaire est rendu en tant que bitmap à la résolution à laquelle il est affiché. Le flou et la pixellisation sont dus à la résolution de l'image et à son redimensionnement lors de l'impression.

Il n'y a aucun moyen d'améliorer la qualité. Vous pouvez essayer de redimensionner l'image et appliquer une sorte de mode de lissage comme le suggère Mamta Dalal, mais cela n'aidera que sur la pixellisation.

Si vous avez réellement besoin d'une qualité supérieure, vous devez utiliser un autre mécanisme pour imprimer vos données. L'utilisation d'un concepteur de rapport est probablement le moyen le plus facile d'y aller.

+0

Ma résolution d'écran est 1920x1080 donc la résolution devrait être ok? L'utilisation de la classe Bitmap ne serait-elle pas meilleure? – Jon

+0

Comme l'a commenté Hans ci-dessus, votre résolution d'écran est beaucoup plus faible que la résolution de votre imprimante et c'est la raison de la faible qualité. –

+0

Si vous n'utilisez pas un bitmap, voulez-vous utiliser une image à la place? Il finira avec le même résultat. Si vous souhaitez améliorer la qualité, vous ne pouvez pas utiliser la méthode d'impression Formulaire que vous utilisez aujourd'hui. –

Questions connexes