FindTransformed.vb
- ''
- '' This code is part of Document Solutions for PDF demos.
- '' Copyright (c) MESCIUS inc. All rights reserved.
- ''
- Imports System.IO
- Imports System.Drawing
- Imports System.Text
- Imports GrapeCity.Documents.Pdf
- Imports GrapeCity.Documents.Common
- Imports GrapeCity.Documents.Drawing
-
- '' This sample loads the PDF file created by the Transforms sample,
- '' finds all occurrences of a string in the loaded document,
- '' and highlights these occurrences. Two points of interest about this sample:
- '' - The texts in the original document are graphically transformed,
- '' but the quadrilaterals supplied by the FindText method allows you to easily
- '' highlight the finds even in that case.
- '' - The sample inserts a new content stream at index 0 of the page,
- '' this ensures that the highlighting is drawn UNDER the original content.
- '' (The same approach may be used to add watermarks etc. to existing files.)
- Public Class FindTransformed
- Function CreatePDF(ByVal stream As Stream) As Integer
- Dim doc = New GcPdfDocument()
- '' The original file stream must be kept open while working with the loaded PDF, see LoadPDF for details:
- Using fs = New FileStream(Path.Combine("Resources", "PDFs", "Transforms.pdf"), FileMode.Open, FileAccess.Read)
- doc.Load(fs)
- '' Find all 'Text drawn at', using case-sensitive search:
- Dim finds = doc.FindText(
- New FindTextParams("Text drawn at", False, True),
- OutputRange.All)
-
- '' Highlight all finds: first, find all pages where the text was found
- Dim pgIndices = finds.Select(Function(f_) f_.PageIndex).Distinct()
- '' Loop through pages, on each page insert a new content stream at index 0,
- '' so that our highlights go UNDER the original content:
- For Each pgIdx In pgIndices
- Dim page = doc.Pages(pgIdx)
- Dim pcs = page.ContentStreams.Insert(0)
- Dim g = pcs.GetGraphics(page)
- For Each find In finds.Where(Function(f_) f_.PageIndex = pgIdx)
- For Each ql In find.Bounds
- '' Note the solid color used to fill the polygon:
- g.FillPolygon(ql, Color.CadetBlue)
- g.DrawPolygon(ql, Color.Blue)
- Next
- Next
- Next
- ''
- '' Done:
- doc.Save(stream)
- End Using
- Return doc.Pages.Count
- End Function
- End Class
-