C#印刷機能の実現


実際の開発では、あるレポートを印刷する場合によく遭遇し、C#でレポートを印刷する機能を実現します.第一に、レポートのサイズが適切であるか、紙のサイズがレポートを置くのに十分である場合は、直接スクリーンショットを選択し、スクリーンショットした画像を印刷することができます.第二に、レポートと用紙のサイズが一致しない場合は、プログラム内で一定のフォーマットに基づいて適切なサイズのレポートをつづる必要がある場合があります.

スクリーンショットによる印刷レポートの実装

        private void button3_Click(object sender, EventArgs e)
        {

            //  
            
            Form form = this;
            if (form != null)
            {
                Graphics mygraphics = form.CreateGraphics();
                memoryImage = new Bitmap(form.Width, form.Height, mygraphics);
                Graphics memoryGraphics = Graphics.FromImage(memoryImage);
                memoryGraphics.CopyFromScreen(form.Location.X, form.Location.Y, 0, 0, form.Size);
            }
            
            //  ( Adobe PDF Microsoft Office Document Image Writer , )
            this.printDocument1.DocumentName = this.label27.Text;

            this.printDocument1.Print();
        }
        
        // printDocument1 PrintPage 
        private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
        {
            e.Graphics.Clear(Color.White);
            e.Graphics.DrawImage(memoryImage, 0, 0);
        }

        // 
        private Bitmap memoryImage = null;
button 3は印刷ボタンです.印刷ボタンのリスニングイベントの構成は自分で完了してください(VSのbutton 3の「プロパティ」ページで直接設定できます).printDocument 1はPrintDocumentスペースです.自分で追加してください.PrintPageイベントのリスニング構成は、自分で完了してください.

特定のフォーマットのレポート印刷

        private void button3_Click(object sender, EventArgs e)
        {
            this.printDocument1.DocumentName = this.label27.Text;

            this.printDocument1.Print();
        }

        private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
        {
            e.Graphics.Clear(Color.White);
            //  
            //  
            e.Graphics.DrawString(" ",
                  new Font(new FontFamily(" "), 22, FontStyle.Bold),
                  System.Drawing.Brushes.Black,
                  170, 10);
            e.Graphics.DrawString(" :" + this.comboBox1.Text,
                                    new Font(new FontFamily(" "), 14, FontStyle.Bold),
                                    System.Drawing.Brushes.Black,
                                    20, 50);
            e.Graphics.DrawString(" :" + this.textBox9.Text,
                                    new Font(new FontFamily(" "), 14, FontStyle.Bold),
                                    System.Drawing.Brushes.Black,
                                    350, 50);
            e.Graphics.DrawString(" :" + this.textBox11.Text,
                                    new Font(new FontFamily(" "), 14, FontStyle.Bold),
                                    System.Drawing.Brushes.Black,
                                    20, 80);
            //  
            e.Graphics.DrawLine(Pens.Black, 20, 110, 800, 110);
            //  
            e.Graphics.DrawString(" ",
                                    new Font(new FontFamily(" "), 14, FontStyle.Bold),
                                    System.Drawing.Brushes.Black,
                                    20, 120, 
                                    new StringFormat(StringFormatFlags.DirectionVertical));
        }