LEADTOOLS PDF (Leadtools.Pdf assembly)

PDFObject Structure

Show in webframe
Example 





Members 
Contains information of a single PDF object.
Object Model
Syntax
[SerializableAttribute()]
public struct PDFObject : System.ValueType 
'Declaration
 
<SerializableAttribute()>
Public Structure PDFObject 
   Inherits System.ValueType
'Usage
 
Dim instance As PDFObject

            

            
[SerializableAttribute()]
public value class PDFObject : public System.ValueType 
Remarks

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.

Example
Copy Code  
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.Pdf
Imports Leadtools.WinForms
Imports Leadtools.Drawing

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
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Pdf;
using Leadtools.WinForms;
using Leadtools.Drawing;

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";
}
Requirements

Target Platforms

See Also

Reference

PDFObject Members
Leadtools.Pdf Namespace

 

 


Products | Support | Contact Us | Copyright Notices
© 2006-2014 All Rights Reserved. LEAD Technologies, Inc.