question

SushilAgarwal-8271 avatar image
0 Votes"
SushilAgarwal-8271 asked SushilAgarwal-8271 answered

How can i Print .jpg file by adding text at bottom

hello experts
datagridview having columns for picture file path and picture related to a number called as bill_key also shown in column
i want to merge at either top or bottom of image bill_key so after print user knows that printed picture belongs to which bill_key

i tried following , but cant see the bill_key any where
can somebody help to get this done.

Thanks in advance.

  foreach (DataGridViewRow dgvrPdiTc in dgvPdiTc.SelectedRows)
             {
                 if (dgvrPdiTc.Cells["report"].Value.ToString().Trim().Equals("tc"))
                 {
                     //print image from file
    
                     string billnumber = dgvrPdiTc.Cells["bill_key"].Value.ToString();
                     //string testName = "Microsoft C# Deveoper Practice Test";
                     //string testDate = "Thursday, November 10, 2016";
                     //string score = "Score 33 / 33";
                     Bitmap bitmap = (Bitmap)Image.FromFile(dgvrPdiTc.Cells["tc_path"].Value.ToString());
                     //const int dotsPerInch = 75; // define the quality in DPI
                     //http://stackoverflow.com/questions/11699219/save-an-image-as-a-bitmap-without-losing-quality
                     //bitmap.SetResolution(dotsPerInch, dotsPerInch);
                     using (Graphics graphics = Graphics.FromImage(bitmap))
                     {
                         //graphics.SmoothingMode = SmoothingMode.AntiAlias; //line A
                         //graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; //line B
                         //graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; //line C
                         graphics.DrawString(billnumber, new Font("Times-Roman", 0.1f, FontStyle.Regular, GraphicsUnit.Inch), Brushes.Black, 350f, 350f);
                         //graphics.DrawString(testName, new Font("Times-Roman", 0.06f, FontStyle.Regular, GraphicsUnit.Inch), Brushes.Black, 180f, 420f);
                         //graphics.DrawString(testDate, new Font("Times-Roman", 0.05f, FontStyle.Regular, GraphicsUnit.Inch), Brushes.Black, 350f, 490f);
                         //graphics.DrawString(score, new Font("Times-Roman", 0.06f, FontStyle.Regular, GraphicsUnit.Inch), Brushes.Black, 350f, 550f);
    
                         //string fileName = "result3600.PNG";
                         //bitmap.Save(imageBaseFilePath + fileName);
                         using (var pd = new PrintDocument())
                         {
                             pd.PrintPage += (_, e1) =>
                             {
                                 e1.Graphics.DrawImage(bitmap, e1.PageBounds);
                             };
                             pd.Print();
                         }
    
                     }
                     //string file = dgvrPdiTc.Cells["tc_path"].Value.ToString();
                     //using (var pd = new PrintDocument())
                     //{
                     //    pd.PrintPage += (_, e) =>
                     //    {
                     //        var img = Image.FromFile(file);
                     //        e.Graphics.DrawImage(img, e.PageBounds);
                     //    };
                     //    pd.Print();
                     //}
                     //Process p = new Process();
                     //p.StartInfo.FileName = dgvrPdiTc.Cells["tc_path"].Value.ToString();
                     //p.StartInfo.Verb = "Print";
                     //p.Start();
                 }
             }
windows-forms
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

cooldadtx avatar image
0 Votes"
cooldadtx answered

Create a helper method to do the watermarking. This will make it easier to see what is going on.

private static Image WatermarkImage ( Image image, string watermark, Font font, Brush brush, Point position )
{
var newImage = image.Clone() as Image;
using (var gfx = Graphics.FromImage(newImage))
{
gfx.DrawString(watermark, font, brush, position);

     return newImage;
 };

}

//Usage
var newImage = WatermarkImage(oldImage, "Test", font, brush, position)

Note that I believe the issue you're currently seeing might be related to your position value. You're setting it to 350, 350 which may be too large for the image. Try starting at 0,0. It could also be the font family (Times Romans has no dash). If you want to place the watermark at the bottom of the image then you'll need to calculate the "bottom" by getting the size of the image and then stepping back based upon the size of the watermark text (which means you need to use the measure of the graphics).

5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

SushilAgarwal-8271 avatar image
0 Votes"
SushilAgarwal-8271 answered

Thanks cooldadtx

Your suggetion helped me to do work neatly with little modification.

 private static Image WatermarkImage(Image image, string watermark, Font font, Brush brush, Point position)
         {
             var newImage = image.Clone() as Image;
             using (var gfx = Graphics.FromImage(newImage))
             {
                 gfx.DrawString(watermark, font, brush, position);
    
                 return newImage;
             };
         }
         private void btnPrintPdi_Tc_Click(object sender, EventArgs e)
         {
             foreach (DataGridViewRow dgvrPdiTc in dgvPdiTc.SelectedRows)
             {
                 if (dgvrPdiTc.Cells["report"].Value.ToString().Trim().Equals("tc"))
                 {
                     //print image from file
    
                     string billnumber = dgvrPdiTc.Cells["bill_key"].Value.ToString();
                     Image img = Image.FromFile(dgvrPdiTc.Cells["tc_path"].Value.ToString());
    
                     //
                     // Create font and brush.
                     Font drawFont = new Font("Arial", 32);
                     SolidBrush drawBrush = new SolidBrush(Color.Black);
    
                     // Create point for upper-left corner of drawing.
                     Point wmloc = new Point(10, 10);
    
                     // Set format of string.
                     StringFormat drawFormat = new StringFormat();
                     drawFormat.FormatFlags = StringFormatFlags.DirectionVertical;
    
                     img = WatermarkImage(img, billnumber, drawFont, drawBrush, wmloc);
                     using (var pd = new PrintDocument())
                         {
                             pd.PrintPage += (_, e1) =>
                             {
                                 e1.Graphics.DrawImage(img, e1.PageBounds);
                             };
                             pd.Print();
                         }
                     //Process p = new Process();
                     //p.StartInfo.FileName = dgvrPdiTc.Cells["tc_path"].Value.ToString();
                     //p.StartInfo.Verb = "Print";
                     //p.Start();
                 }
             }
         }
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.