Extracting text and image elements

<< Click to Display Table of Contents >>

Navigation:  Gnostice Document Studio .NET > Going Deeper > Document Engines > Working with PDF > Processing >

Extracting text and image elements

In this section we present example code to extract text elements and images from a PDF document. Before proceeding further please make sure that the prerequisite steps as listed in the Document Engines parent topic are followed.

 

Given below is the sample code that shows how to extract text elements from a PDF document.

 

var inputPDF = @"input.pdf";
using (var pdfDoc = new PDF())
{
   pdfDoc.LoadDocument(inputPDF);
   var pageCount = pdfDoc.GetPageCount();
   for (var pageNumber = 1; pageNumber <= pageCount; pageNumber++)
   {
      var pageImages = pdfDoc.GetPageElements(pageNumber, elementTypes: PDFPageElementType.TEXT | PDFPageElementType.COMPOSITE);
      foreach (var pageElement in pageImages)
      {
         if (pageElement is PDFPageTextElement textElement)
         {
            // Display the text content
            var text = textElement.FormattedText;
            Console.WriteLine($"Page {pageNumber}: {text}");
         }
         else if (pageElement is PDFPageCompositeElement compositeElement)
         {
            ProcessCompositeElement(compositeElement, pageNumber);
         }
      }
   }
}
// Local function to process composite elements recursively
void ProcessCompositeElement(PDFPageCompositeElement compositeElement, int pageNumber)
{
   foreach (var element in compositeElement.Elements)
   {
      if (element is PDFPageTextElement textElement)
      {
         // Display the text content
         var text = textElement.FormattedText;
         Console.WriteLine($"Page {pageNumber}: {text}");
      }
      else if (element is PDFPageCompositeElement nestedCompositeElement)
      {
         // Recursively process nested composite elements
         ProcessCompositeElement(nestedCompositeElement, pageNumber);
      }
   }
}

 

Given below is the sample code that shows how to extract images from a PDF document.

 

var inputPDF = @"input.pdf";
using (var pdfDoc = new PDF())
{
   pdfDoc.LoadDocument(inputPDF);
   var pageCount = pdfDoc.GetPageCount();
   for (var pageNumber = 1; pageNumber <= pageCount; pageNumber++)
   {
      var pageImages = pdfDoc.GetPageElements(pageNumber, elementTypes: PDFPageElementType.IMAGE | PDFPageElementType.INLINE_IMAGE | PDFPageElementType.COMPOSITE);
      foreach (var pageElement in pageImages)
      {
         if (pageElement is PDFPageImageElement imageElement)
         {
            // Save the image as a PNG file
            var image = imageElement.GetImage();
            var fileName = $"image_{pageNumber}_{imageElement.ResourceName}.png";
            image.Save(fileName, new PNGEncoderSettings());
         }
         else if (pageElement is PDFPageCompositeElement compositeElement)
         {
            ProcessCompositeElement(compositeElement, pageNumber);
         }
      }
   }
}
// Local function to process composite elements recursively
void ProcessCompositeElement(PDFPageCompositeElement compositeElement, int pageNumber)
{
   foreach (var element in compositeElement.Elements)
   {
      if (element is PDFPageImageElement imageElement)
      {
         // Save the image as a PNG file
         var image = imageElement.GetImage();
         var fileName = $"image_{pageNumber}_{imageElement.ResourceName}.png";
         image.Save(fileName, new PNGEncoderSettings());
      }
      else if (element is PDFPageCompositeElement nestedCompositeElement)
      {
         // Recursively process nested composite elements
         ProcessCompositeElement(nestedCompositeElement, pageNumber);
      }
   }
}