Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Create proportional font space in  System.Drawing.Graphics

Posted on 2008-06-22
2
Medium Priority
?
1,099 Views
Last Modified: 2010-04-21
Hi

I am using C#, in a asp.net webform

I am trying to write a tiff file from text using using System.Drawing and System.Drawing.Imaging. The problem I am having is that the font is not propotional. So when I do a line break in the text,  "III 111" does not line up with "ABC 976" in the row above it. How can I get the data to line up proportionally?
string FontName = "Verdana";
        System.Drawing.Color FontColor = Color.Black;
        System.Drawing.Color BackColor = Color.White; 
        int FontSize = 14; 
        int Width = 200; 
        //fontsize times 1.5 is just high enough 
        //to encase the text without spacer above or below.         
        float h = (FontSize * 1.5f);
        int Height = 200; // int.Parse(h.ToString());         
        //file to save as 
        //fore color 
        System.Drawing.SolidBrush objBrushForeColor = new SolidBrush(FontColor);         
        //back color 
        System.Drawing.SolidBrush objBrushBackColor = new SolidBrush(BackColor);         
        //the point to start the text. I chose horizontal value of zero 
        //vertical starts at 2 pixels down. 
        System.Drawing.Point objPoint = new Point(0, 2); 
        //font object 
        System.Drawing.Font objFont = new Font(FontName, FontSize);
        //Drawing.Font(family, 32, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
 
        //bitmap object 
        System.Drawing.Bitmap objBitmap = new Bitmap(Height, Width); 
        //graphics object 
        System.Drawing.Graphics objGraphics = System.Drawing.Graphics.FromImage(objBitmap); 
        //the following line is not needed, but is shown 
        //in the vb example.. dont know why. 
        //Color objColor; 
        //draw a white rectangle 
        objGraphics.FillRectangle(objBrushBackColor, 0, 0, Width, Height);           // (FontSize*1.5f)); 
        //draw the text 
        objGraphics.DrawString("ABC 123\r\nCDE 345\r\nDEF 456\r\nIII 111", objFont, objBrushForeColor,objPoint,
        //save the bitmap. 
        objBitmap.Save(@"C:\CreateThumbnailImage\file.tiff", ImageFormat.Tiff);
        Response.Write("done");

Open in new window

0
Comment
Question by:Charles Baldo
2 Comments
 
LVL 9

Accepted Solution

by:
Pacman earned 2000 total points
ID: 21843912
The font you are using (Verdana) is a proportional font.
Take a fixed font (courier or courier new).

string FontName = "Courier New";

Open in new window

0
 

Author Closing Comment

by:Charles Baldo
ID: 31469628
Perfect, thanks a ton
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Many of us here at EE write code. Many of us write exceptional code; just as many of us write exception-prone code. As we all should know, exceptions are a mechanism for handling errors which are typically out of our control. From database errors, t…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Integration Management Part 2
Want to learn how to record your desktop screen without having to use an outside camera. Click on this video and learn how to use the cool google extension called "Screencastify"! Step 1: Open a new google tab Step 2: Go to the left hand upper corn…

916 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question