''
'' This code is part of Document Solutions for PDF .NET demos.
'' Copyright (c) MESCIUS inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports System.Linq
Imports System.Collections.Generic
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Pdf.Annotations
Imports GrapeCity.Documents.Pdf.TextMap
Imports GrapeCity.Documents.Pdf.AcroForms
Imports GrapeCity.Documents.Pdf.Actions
Imports GrapeCity.Documents.Common
'' This sample shows how to find and remove all links to a certain URL from a PDF.
'' The code first finds all link annotations with ActionURI pointing to the URL
'' that needs to be removed, then uses redact to erase all content within the found link areas.
'' Red overlay is used by the redacts to visualize the erased areas.
''
'' The PDF used by this sample, but with links intact, can be seen in the FindAndHighlight sample.
Public Class RedactLinks
Public Function CreatePDF(ByVal stream As Stream) As Integer
'' Load the PDF with links that need to be removed:
Dim doc = New GcPdfDocument()
Using fs = File.OpenRead(Path.Combine("Resources", "PDFs", "fendo-13-1005722.pdf"))
doc.Load(fs)
'' Remove all links containing this string:
Const targetUrl = "frontiersin.org"
'' Find all relevant link annotations:
Dim linkAnnotations = New HashSet(Of LinkAnnotation)()
For Each page In doc.Pages
For Each a In page.Annotations
If TypeOf a Is LinkAnnotation Then
Dim la = DirectCast(a, LinkAnnotation)
If TypeOf la.Action Is ActionURI Then
Dim actUri = DirectCast(la.Action, ActionURI)
If Not String.IsNullOrEmpty(actUri.URI) AndAlso actUri.URI.Contains(targetUrl) Then
linkAnnotations.Add(la)
End If
End If
End If
Next
Next
'' Loop through the found links, add redact annotations for each:
For Each la In linkAnnotations
For Each page In la.Pages
' We must make a copy of page.Annotations to be able to add redact annotations in a foreach loop:
Dim annots = page.Annotations.Where(Function(a_) a_ Is la).ToList()
For Each a In annots
page.Annotations.Add(New RedactAnnotation() With {
.Rect = la.Rect,
.OverlayFillColor = Color.Red
})
Next
Next
Next
'' Apply the redacts:
doc.Redact()
'' Done:
doc.Save(stream)
Return doc.Pages.Count
End Using
End Function
End Class