[SerializableAttribute()]public enum PDFCoordinateType
| Value | Member | Description |
|---|---|---|
| 0 | The point or rectangle is in PDF coordinates (1/72 of an inch) | |
| 1 | Pixel | The point or rectangle is in pixels. The resolution of the document (PDFDocument.Resolution will be used to convert the value |
| 2 | Inch | The point or rectangle is in inches |
The PDFCoordinateType enumeration is used as the sourceType and destinationType parameters passed to the PDFDocumentPage.ConvertPoint and PDFDocumentPage.ConvertRect methods.
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";}