StrikeoutParagraph.vb
C# VB
'''' This code is part of Document Solutions for PDF .NET demos.'' Copyright (c) MESCIUS inc. All rights reserved.''Imports System.IOImports System.DrawingImports System.LinqImports System.Collections.GenericImports GrapeCity.Documents.PdfImports GrapeCity.Documents.Pdf.TextMapImports GrapeCity.Documents.Pdf.AnnotationsImports GrapeCity.Documents.Common
Public Class StrikeoutParagraph Public Function CreatePDF(ByVal stream As Stream) As Integer ' Load the PDF: Dim doc = New GcPdfDocument() Using fs = File.OpenRead(Path.Combine("Resources", "PDFs", "Wetlands.pdf")) doc.Load(fs)
' Strikeout the first paragraph that starts with the words "Several species": Dim para As ITextParagraph = Nothing For Each p In doc.Pages Dim paras = p.GetTextMap().Paragraphs para = paras.FirstOrDefault(Function(p_) p_.GetText().StartsWith("Several species")) If para IsNot Nothing Then Exit For End If Next If para Is Nothing Then Return doc.Pages.Count ' Should not happen. End If
' Text markup strikeout annotation: Dim markup = New TextMarkupAnnotation() With { .Page = para.Page, .MarkupType = TextMarkupType.StrikeOut, .Color = Color.Red }
' Get the coordinates of all text run fragments in the paragraph, ' and add them to the annotation's area: Dim area As New List(Of Quadrilateral) For Each run In para.Runs For Each frag In run ' Note: in v6.0.3 a method ITextRunFragment.GetBounds() was added, ' so this code can be replaced with a single 'frag.GetBounds()' call. ' Find the text run fragment's index in the containing line: Dim index As Integer = 0 Dim line = frag.Line Dim frags = line.RunFragments For i = 0 To frags.Count - 1 If frags(i) Is frag Then Exit For index += frags(i).Count Next ' Add the fragment's bounds (quadrilateral) to the annotation area: area.Add(frag.Line.GetCoords(index, frag.Count)) Next Next markup.Area = area
' Done: doc.Save(stream) Return doc.Pages.Count End Using End FunctionEnd Class