L'impression de l'image avec PrintDocument. comment ajuster l'image pour l'adapter à la taille du papier
En C#, je suis en train d'imprimer une image à l'aide de PrintDocument de classe avec le code ci-dessous. L'image est de taille 1200 px de large et 1 800 px de hauteur. Je suis en train d'imprimer cette image dans un 4*6 papier à l'aide d'un petit zeebra de l'imprimante. Mais le programme est en cours d'impression, seuls 4*6 sont de la plus grande image. cela signifie qu'il n'est pas ajuster l'image à la taille du papier !
PrintDocument pd = new PrintDocument();
pd.PrintPage += (sender, args) =>
{
Image i = Image.FromFile("C://tesimage.PNG");
Point p = new Point(100, 100);
args.Graphics.DrawImage(i, 10, 10, i.Width, i.Height);
};
pd.Print();
Quand j'ai imprimer la même image à l'aide de la Fenêtre d'Impression (clic droit et sélectionnez "imprimer", il est automatiquement mise à l'échelle à la taille du papier et de l'impression correctement. cela signifie que tout s'est mis en 4*6 papier.) Comment puis-je faire la même chose dans mon programme C#?
- Si vous voulez une réponse, il faut l'accepter. Il donne du crédit à la personne qui a répondu à vous et à l'aide d'autres personnes qui recherche de la réponse à trouver le bon un plus rapide
Vous devez vous connecter pour publier un commentaire.
Les paramètres que vous êtes de passage dans la méthode DrawImage devrait être la taille de l'image sur le papier plutôt que la taille de l'image elle-même, DrawImage de commande se charge ensuite de la mise à l'échelle pour vous. Probablement la façon la plus simple est d'utiliser la substitution suivante de la DrawImage commande.
Remarque: ne pas fausser l'image si les proportions de l'image ne sont pas les mêmes que le rectangle. Quelques calculs simples sur la taille de l'image et taille du papier vous permettra de créer un nouveau rectangle qui s'inscrit dans les limites de la feuille, sans inclinaison de l'image.
De ne pas piétiner sur BBoy est déjà décent réponse, mais j'ai fait le code qui maintient l'aspect ratio. J'ai pris sa suggestion, de sorte qu'il devrait obtenir un crédit partiel ici!
De la solution fournie par BBoy fonctionne très bien. Mais dans mon cas, j'ai dû utiliser
Cela permettra d'imprimer uniquement la forme. Lorsque j'utilise MarginBounds il imprime la totalité de l'écran, même si la forme est plus petit que l'écran du moniteur. PageBounds résolu ce problème. Grâce à BBoy!
Vous pouvez utiliser mon code ici
e.Graphics.DrawImage(img, m);
est résolu mon problème.. +1Réponse:
D'accord avec TonyM et BBoy - c'est la bonne réponse originale 4*6 impression de l'étiquette. (args.PageBounds). Cela a fonctionné pour moi pour l'impression Endicia API service des Étiquettes d'expédition.
PageBounds
a fonctionné pour moi oùMarginBounds
l'impression de trop petite. Merci!