Solved

Create proportional font space in  System.Drawing.Graphics

Posted on 2008-06-22
2
1,090 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:charlesbaldo
2 Comments
 
LVL 9

Accepted Solution

by:
Pacman earned 500 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:charlesbaldo
ID: 31469628
Perfect, thanks a ton
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

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

Suggested Solutions

Title # Comments Views Activity
C# LINQ ForEach() question 6 54
SSRS Deployment problem 5 66
linq, c# 8 24
Where does legacy ASP.NET initialize language? 2 26
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!
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that undeā€¦

829 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