Leadtools.Pdf Namespace : PDFObject Structure |
[SerializableAttribute()] public struct PDFObject : System.ValueType
'Declaration <SerializableAttribute()> Public Structure PDFObject Inherits System.ValueType
'Usage Dim instance As PDFObject
[SerializableAttribute()] public class PDFObject
JAVASCRIPT_NOSTRUCTS
[SerializableAttribute()] public value class PDFObject : public System.ValueType
The PDFObject structure contains information of a single PDF text item (character), rectangle or image. To read objects from a PDF file, you use the PDFDocument.ParsePages method. After this method returns and depending on the value of PDFParsePagesOptions parameter passed to the method, the PDFDocumentPage'sPDFDocumentPage.Fonts, PDFDocumentPage.Objects and PDFDocumentPage.Hyperlinks collections will be populated with the items of the PDF page.
Public Sub PDFObjectExample() Dim pdfFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "LEAD.pdf") Dim pngFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "LEAD_png.png") ' Create a PDF document for file at 200 DPI Using document As New PDFDocument(pdfFileName) document.Resolution = 200 ' Parse the objects of the first page document.ParsePages(PDFParsePagesOptions.Fonts Or PDFParsePagesOptions.Objects Or PDFParsePagesOptions.Fonts, 1, 1) ' Get the page Dim page As PDFDocumentPage = document.Pages(0) ' Get the image of the page so we can use it to get the source image objects Using pageImage As RasterImage = document.GetPageImage(Nothing, page.PageNumber) ' Create the bitmap to draw the objects to Using btmp As New Bitmap(page.WidthPixels, page.HeightPixels) btmp.SetResolution(document.Resolution, document.Resolution) Using g As Graphics = Graphics.FromImage(btmp) g.Clear(Color.White) ' Render the objects ' Text is line at a time Dim textRect As LeadRect = LeadRect.Empty Dim textFontHeight As Double = 0 Dim textLine As New StringBuilder() For Each obj As PDFObject In page.Objects Select Case obj.ObjectType Case PDFObjectType.Image RenderImage(g, pageImage, page, obj) Case PDFObjectType.Text ' Add the text code and rects together textLine.Append(obj.Code) Dim rc As PDFRect = page.ConvertRect(PDFCoordinateType.Pdf, PDFCoordinateType.Pixel, obj.Bounds) Dim objRect As LeadRect = LeadRect.FromLTRB(CType(rc.Left, Integer), CType(rc.Top, Integer), CType(rc.Right, Integer), CType(rc.Bottom, Integer)) If textRect.IsEmpty Then textRect = objRect Else textRect = LeadRect.Union(textRect, objRect) End If textFontHeight = Math.Max(textFontHeight, obj.TextProperties.FontHeight) ' If this is the last object in a line, render it If obj.TextProperties.IsEndOfLine Then RenderText(g, page, textLine.ToString(), textRect, obj.TextProperties, textFontHeight) textLine = New StringBuilder() textRect = LeadRect.Empty End If End Select Next End Using btmp.Save(pngFileName, System.Drawing.Imaging.ImageFormat.Png) End Using End Using End Using End Sub Private Shared Sub RenderImage(ByVal g As Graphics, ByVal pageImage As RasterImage, ByVal page As PDFDocumentPage, ByVal obj As PDFObject) Dim destRect As New LeadRect(0, 0, page.WidthPixels, page.HeightPixels) ' Get the object coordinates in pixels Dim rc As PDFRect = page.ConvertRect(PDFCoordinateType.Pdf, PDFCoordinateType.Pixel, obj.Bounds) Dim destClipRect As LeadRect = LeadRect.FromLTRB(CType(rc.Left, Integer), CType(rc.Top, Integer), CType(rc.Right, Integer), CType(rc.Bottom, Integer)) ' Draw from the page image to the destination graphics Dim props As RasterPaintProperties = RasterPaintProperties.Default props.PaintEngine = RasterPaintEngine.GdiPlus RasterImagePainter.Paint( _ pageImage, _ g, _ LeadRect.Empty, _ LeadRect.Empty, _ destRect, _ destClipRect, _ props) End Sub Private Shared Sub RenderText(ByVal g As Graphics, ByVal page As PDFDocumentPage, ByVal text As String, ByVal textRect As LeadRect, ByVal textProperties As PDFTextProperties, ByVal textFontHeight As Double) ' Create the font Dim font As PDFFont = page.Fonts(textProperties.FontIndex) Dim faceName As String = font.FaceName If String.IsNullOrEmpty(faceName) Then ' Could be an embedded font, use Arial faceName = "Arial" End If Dim fontStyle As FontStyle = fontStyle.Regular If (font.FontStyle And PDFFontStyle.Bold) = PDFFontStyle.Bold Then fontStyle = fontStyle Or fontStyle.Bold End If If (font.FontStyle And PDFFontStyle.Italic) = PDFFontStyle.Italic Then fontStyle = fontStyle Or fontStyle.Italic End If If (font.FontStyle And PDFFontStyle.Underline) = PDFFontStyle.Underline Then fontStyle = fontStyle Or fontStyle.Underline End If Using f As New Font(faceName, CType(textFontHeight * 72 / g.DpiY, Single), fontStyle) Using brush As New SolidBrush(RasterColorConverter.ToColor(textProperties.Color)) Dim rect As New Rectangle(textRect.X, textRect.Y, textRect.Width, textRect.Height) Using sf As New StringFormat() sf.Alignment = StringAlignment.Center sf.LineAlignment = StringAlignment.Center sf.FormatFlags = sf.FormatFlags Or StringFormatFlags.NoClip Or StringFormatFlags.NoWrap g.DrawString(text, f, brush, rect, sf) End Using End Using End Using End Sub Public NotInheritable Class LEAD_VARS Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images" End Class
public void PDFObjectExample() { string pdfFileName = Path.Combine(LEAD_VARS.ImagesDir, @"LEAD.pdf"); string pngFileName = Path.Combine(LEAD_VARS.ImagesDir, @"LEAD_png.png"); // Create a PDF document for file at 200 DPI using(PDFDocument document = new PDFDocument(pdfFileName)) { document.Resolution = 200; // Parse the objects of the first page document.ParsePages(PDFParsePagesOptions.Fonts | PDFParsePagesOptions.Objects | PDFParsePagesOptions.Fonts, 1, 1); // Get the page PDFDocumentPage page = document.Pages[0]; // Get the image of the page so we can use it to get the source image objects using(RasterImage pageImage = document.GetPageImage(null, page.PageNumber)) { // Create the bitmap to draw the objects to using(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 time LeadRect 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 together textLine.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 it if(obj.TextProperties.IsEndOfLine) { RenderText(g, 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 pixels PDFRect 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 graphics RasterPaintProperties props = RasterPaintProperties.Default; props.PaintEngine = RasterPaintEngine.GdiPlus; RasterImagePainter.Paint( pageImage, g, LeadRect.Empty, LeadRect.Empty, destRect, destClipRect, props); } private static void RenderText(Graphics g, PDFDocumentPage page, string text, LeadRect textRect, PDFTextProperties textProperties, double textFontHeight) { // Create the font PDFFont font = page.Fonts[textProperties.FontIndex]; string faceName = font.FaceName; if(string.IsNullOrEmpty(faceName)) { // Could be an embedded font, use Arial faceName = "Arial"; } FontStyle fontStyle = FontStyle.Regular; if((font.FontStyle & PDFFontStyle.Bold) == PDFFontStyle.Bold) { fontStyle |= FontStyle.Bold; } if((font.FontStyle & PDFFontStyle.Italic) == PDFFontStyle.Italic) { fontStyle |= FontStyle.Italic; } if((font.FontStyle & PDFFontStyle.Underline) == PDFFontStyle.Underline) { fontStyle |= FontStyle.Underline; } using(Font f = new Font(faceName, (float)textFontHeight * 72 / g.DpiY, fontStyle)) { 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:\Users\Public\Documents\LEADTOOLS Images"; }
Target Platforms: Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2