public double FontHeight { get; set; }
A System.Double that represents the font height in PDF units (1/72 of an inch and bottom left). The default value is 0.
This value contains the height of this PDF text object in PDF units (1/72 of an inch and bottom left). You can use the PDFDocumentPage.ConvertPoint method to convert the value to a pixels or inches and then to points if required. Here is an example:
// Get the font height in PDF units, which 1/72 of an inch, i.e. in pointsdouble fontHeightPoints = pdfObject.TextProperties.FontHeight;// Convert to inches:double fontHeightInches1 = fontHeightPoints / 72.0;// Or use PDFDocumentPage.ConvertPoint to convert to inches:PDFPoint pt = new PDFPoint(0, fontHeightPoints);double fontHeightInches2 = pdfDocumentPage.ConvertPoint(PDFCoordinateType.Pdf, PDFCoordinateType.Inch, pt).Y;// And pixels:double fontHeightPixels = pdfDocumentPage.ConvertPoint(PDFCoordinateType.Pdf, PDFCoordinateType.Pixel, pt).Y;
This value contains the external and internal leading of the text item, to get the bounds of the box that exactly surrounds the text object, use PDFObject.Bounds.
For more information, refer to PDF Coordinate System.
using Leadtools;using Leadtools.Codecs;using Leadtools.Pdf;using Leadtools.WinForms;using Leadtools.Drawing;public void PDFObjectExample(){string pdfFileName = Path.Combine(LEAD_VARS.ImagesDir, @"Leadtools.pdf");string pngFileName = Path.Combine(LEAD_VARS.ImagesDir, @"LEAD_png.png");// Create a PDF document for file at 200 DPIusing (PDFDocument document = new PDFDocument(pdfFileName)){document.Resolution = 200;// Parse the objects of the first pagedocument.ParseDocumentStructure(PDFParseDocumentStructureOptions.Fonts);document.ParsePages(PDFParsePagesOptions.Fonts | PDFParsePagesOptions.Objects, 1, 1);// Get the pagePDFDocumentPage page = document.Pages[0];// Get the image of the page so we can use it to get the source image objectsusing (RasterImage pageImage = document.GetPageImage(null, page.PageNumber)){// Create the bitmap to draw the objects tousing (Bitmap btmp = new Bitmap(page.WidthPixels, page.HeightPixels)){btmp.SetResolution(document.Resolution, document.Resolution);using (Graphics g = Graphics.FromImage(btmp)){g.Clear(Color.White);// Render the objects// Text is line at a timeLeadRect textRect = LeadRect.Empty;double textFontHeight = 0;StringBuilder textLine = new StringBuilder();foreach (PDFObject obj in page.Objects){switch (obj.ObjectType){case PDFObjectType.Image:RenderImage(g, pageImage, page, obj);break;case PDFObjectType.Text:// Add the text code and rects togethertextLine.Append(obj.Code);PDFRect rc = page.ConvertRect(PDFCoordinateType.Pdf, PDFCoordinateType.Pixel, obj.Bounds);LeadRect objRect = LeadRect.FromLTRB((int)rc.Left, (int)rc.Top, (int)rc.Right, (int)rc.Bottom);if (textRect.IsEmpty){textRect = objRect;}else{textRect = LeadRect.Union(textRect, objRect);}textFontHeight = Math.Max(textFontHeight, obj.TextProperties.FontHeight);// If this is the last object in a line, render itif (obj.TextProperties.IsEndOfLine){RenderText(g, document, page, textLine.ToString(), textRect, obj.TextProperties, textFontHeight);textLine = new StringBuilder();textRect = LeadRect.Empty;}break;}}}btmp.Save(pngFileName, System.Drawing.Imaging.ImageFormat.Png);}}}}private static void RenderImage(Graphics g, RasterImage pageImage, PDFDocumentPage page, PDFObject obj){LeadRect destRect = new LeadRect(0, 0, page.WidthPixels, page.HeightPixels);// Get the object coordinates in pixelsPDFRect rc = page.ConvertRect(PDFCoordinateType.Pdf, PDFCoordinateType.Pixel, obj.Bounds);LeadRect destClipRect = LeadRect.FromLTRB((int)rc.Left, (int)rc.Top, (int)rc.Right, (int)rc.Bottom);// Draw from the page image to the destination graphicsRasterPaintProperties props = RasterPaintProperties.Default;props.PaintEngine = RasterPaintEngine.GdiPlus;RasterImagePainter.Paint(pageImage,g,LeadRect.Empty,LeadRect.Empty,destRect,destClipRect,props);}private static void RenderText(Graphics g, PDFDocument document, PDFDocumentPage page, string text, LeadRect textRect, PDFTextProperties textProperties, double textFontHeight){// Create the font// Find it in the fonts collectionstring faceName = null;if (document.Fonts != null && textProperties.FontIndex < document.Fonts.Count){PDFFont font = document.Fonts[textProperties.FontIndex];faceName = font.FaceName;}if (string.IsNullOrEmpty(faceName)){// Could be an embedded font, use ArialfaceName = "Arial";}using (Font f = new Font(faceName, (float)textFontHeight * 72 / g.DpiY)){using (Brush brush = new SolidBrush(RasterColorConverter.ToColor(textProperties.Color))){Rectangle rect = new Rectangle(textRect.X, textRect.Y, textRect.Width, textRect.Height);using (StringFormat sf = new StringFormat()){sf.Alignment = StringAlignment.Center;sf.LineAlignment = StringAlignment.Center;sf.FormatFlags |= StringFormatFlags.NoClip | StringFormatFlags.NoWrap;g.DrawString(text, f, brush, rect, sf);}}}}static class LEAD_VARS{public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images";}