Печать формы windows дает пустую страницу
Всем привет,
Я пытаюсь добавить печать квитанций в POS-проект, над которым работаю
Я создал форму выигрыша с изображением и списком
Я добавил приведенный ниже код для печати, но он дает мне только пустую страницу
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Drawing.Printing; namespace CrepeCity { public partial class printPreview : Form { public printPreview() { InitializeComponent(); } private void printPreview_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { CaptureScreen(); printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage); printDocument1.Print(); } Bitmap memoryImage; private void CaptureScreen() { Graphics myGraphics = this.CreateGraphics(); Size s = this.Size; memoryImage = new Bitmap(s.Width, s.Height, myGraphics); Graphics memoryGraphics = Graphics.FromImage(memoryImage); memoryGraphics.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, s); } private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { } private void printDocument1_PrintPage_1(object sender, PrintPageEventArgs e) { e.Graphics.DrawImage(memoryImage, 0, 0); } } }
Что я уже пробовал:
Also I've tried this code to print a specific panel and it also gives me an empty page <pre lang="c#"> [System.Runtime.InteropServices.DllImport("gdi32.dll")] public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop); private Bitmap memoryImage; private void CaptureScreen() { Graphics mygraphics = this.CreateGraphics(); Size s = this.Size; memoryImage = new Bitmap(s.Width, s.Height, mygraphics); Graphics memoryGraphics = Graphics.FromImage(memoryImage); IntPtr dc1 = mygraphics.GetHdc(); IntPtr dc2 = memoryGraphics.GetHdc(); BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376); mygraphics.ReleaseHdc(dc1); memoryGraphics.ReleaseHdc(dc2); } private void printDocument1_PrintPage(System.Object sender, System.Drawing.Printing.PrintPageEventArgs e) { e.Graphics.DrawImage(memoryImage, 0, 0); } private void button102_Click_1(object sender, EventArgs e) { CaptureScreen(); printDocument1.Print(); }
[no name]
Вероятно, потому, что вы захватываете экран, а затем ничего не делаете с результатом.
Joey Arnanzo
не могли бы вы подсказать мне код, чтобы распечатать результат?
Dave Kreskowiak
Вы также не избавились от своего графического объекта после того, как закончили с ним. Ваш код утекает ресурсы и в конечном итоге приведет к сбою вашего приложения и Windows.