private void TestDrawing_Paint(object sender, PaintEventArgs e)
        {
            UnloadEntity entity = new UnloadEntity();

            entity.Unload = true;
            entity.Name   = "MS.R3.5 QCR19248 - Electronic Signature Control";
            for (int i = 0; i < 3; i++)
            {
                UnloadItem item = new UnloadItem();
                item.ElementName = i.ToString();
                item.Query       = "activity=\"Item Verification Failed\" and notif.for.company=\"DEFAULT\" and language=\"en\" and module.identifier=\"SM\"";
                entity.Items.Add(item);
            }
            Image image = CreateUnloadImage(entity);

            image.Save("test.jpg");
            e.Graphics.DrawImage(image, 0, 0);
        }
        private Image CreateUnloadImage(UnloadEntity entity)
        {
            int width  = 1000;
            int height = 80 + 20 * (entity.Items.Count + 1);

            System.Drawing.Font textFont = new System.Drawing.Font("Helvetica", 10, FontStyle.Regular, GraphicsUnit.Pixel);
            System.Drawing.Font imgFont  = new System.Drawing.Font("Helvetica", 16, FontStyle.Bold, GraphicsUnit.Pixel);

            Image    image    = new Bitmap(width, height, PixelFormat.Format32bppRgb);
            Graphics graphics = Graphics.FromImage(image);

            graphics.CompositingQuality = CompositingQuality.AssumeLinear;
            graphics.SmoothingMode      = SmoothingMode.HighQuality;
            graphics.TextRenderingHint  = System.Drawing.Text.TextRenderingHint.AntiAlias;
            graphics.InterpolationMode  = InterpolationMode.HighQualityBicubic;
            graphics.PixelOffsetMode    = PixelOffsetMode.HighQuality;
            graphics.FillRectangle(new SolidBrush(Color.White), 0, 0, width, height);

            Pen linePen = new Pen(Color.Black, 1);

            graphics.DrawRectangle(linePen, 0, 0, width - 2, height - 2);

            int        nameLabelX      = 40;
            int        nameLabelY      = 20;
            SolidBrush textBrush       = new SolidBrush(Color.Black);
            SolidBrush backgroundBrush = new SolidBrush(Color.SandyBrown);

            graphics.DrawString("Unload Script:", textFont, textBrush, nameLabelX, nameLabelY, new StringFormat());
            graphics.DrawString("Unload Script:", textFont, textBrush, nameLabelX, nameLabelY, new StringFormat());
            int nameTextX      = 150;
            int nameTextY      = nameLabelY - 4;
            int nameTextWidth  = 400;
            int nameTextHeight = 20;

            graphics.DrawRectangle(linePen, nameTextX, nameTextY, nameTextWidth, nameTextHeight);

            graphics.DrawString(entity.Name, textFont, textBrush, nameTextX + 5, nameLabelY, new StringFormat());

            string chooseStr = "√";

            int unloadCheckboxX     = 40;
            int unloadCheckboxY     = 50;
            int unloadCheckboxWidth = 15;

            graphics.DrawRectangle(linePen, unloadCheckboxX, unloadCheckboxY, unloadCheckboxWidth, unloadCheckboxWidth);

            if (entity.Unload)
            {
                graphics.DrawString(chooseStr, imgFont, textBrush, unloadCheckboxX, unloadCheckboxY);
                graphics.DrawString(chooseStr, imgFont, textBrush, unloadCheckboxX, unloadCheckboxY);
            }

            int unloadTextX = 60;
            int unloadTextY = 50;

            graphics.DrawString("Unload?", textFont, textBrush, unloadTextX, unloadTextY);

            int purgeCheckboxX = 150;
            int purgeCheckboxY = 50;

            graphics.DrawRectangle(linePen, purgeCheckboxX, purgeCheckboxY, unloadCheckboxWidth, unloadCheckboxWidth);

            if (entity.Purge)
            {
                graphics.DrawString(chooseStr, imgFont, textBrush, purgeCheckboxX, purgeCheckboxY);
                graphics.DrawString(chooseStr, imgFont, textBrush, purgeCheckboxX, purgeCheckboxY);
            }
            int purgeTextX = 180;
            int purgeTextY = 50;

            graphics.DrawString("Purge?", textFont, textBrush, purgeTextX, purgeTextY);


            //Draw the Table;
            int firstColumnWidth  = (int)((width - 2) * 0.25);
            int secondColumnWidth = (int)((width - 2) * 0.6);
            int thirdColumnWidth  = (int)((width - 2) * 0.15);

            int rowHeight = 20;


            int firstCellX = 2;
            int firstCellY = 80;

            int secondCellX = firstCellX + firstColumnWidth;
            int secondCellY = firstCellY;

            int thirdCellX = secondCellX + secondColumnWidth;
            int thirdCellY = firstCellY;

            //Draw header
            graphics.DrawRectangle(linePen, firstCellX, firstCellY, firstColumnWidth, rowHeight);
            graphics.FillRectangle(backgroundBrush, firstCellX, firstCellY, firstColumnWidth, rowHeight);
            graphics.DrawString("FileName", textFont, textBrush, firstCellX + 4, firstCellY + 4);

            graphics.DrawRectangle(linePen, secondCellX, secondCellY, secondColumnWidth, rowHeight);
            graphics.FillRectangle(backgroundBrush, secondCellX, secondCellY, secondColumnWidth, rowHeight);
            graphics.DrawString("Query", textFont, textBrush, secondCellX + 4, secondCellY + 4);

            graphics.DrawRectangle(linePen, thirdCellX, thirdCellY, thirdColumnWidth, rowHeight);
            graphics.FillRectangle(backgroundBrush, thirdCellX, thirdCellY, thirdColumnWidth, rowHeight);
            graphics.DrawString("Datamap", textFont, textBrush, thirdCellX + 4, thirdCellY + 4);

            for (int i = 0; i < entity.Items.Count; i++)
            {
                UnloadItem currentItem = entity.Items[i];

                firstCellX = 2;
                firstCellY = 80 + rowHeight * (i + 1);

                secondCellX = firstCellX + firstColumnWidth;
                secondCellY = firstCellY;

                thirdCellX = secondCellX + secondColumnWidth;
                thirdCellY = firstCellY;

                graphics.DrawRectangle(linePen, firstCellX, firstCellY, firstColumnWidth, rowHeight);
                graphics.DrawString(currentItem.ElementName, textFont, textBrush, firstCellX + 4, firstCellY + 4);

                graphics.DrawRectangle(linePen, secondCellX, secondCellY, secondColumnWidth, rowHeight);
                graphics.DrawString(currentItem.Query, textFont, textBrush, secondCellX + 4, secondCellY + 4);

                graphics.DrawRectangle(linePen, thirdCellX, thirdCellY, thirdColumnWidth, rowHeight);
            }

            graphics.Flush();
            graphics.Dispose();
            return(image);
        }