FindTransformed.vb
'' 完毕:
Imports System.IO
Imports System.Drawing
Imports System.Text
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Common
Imports GrapeCity.Documents.Drawing

'' 此示例​​加载由Transforms示例创建的PDF文件,
'' 查找加载文档中所有出现的字符串,
'' 并强调这些事件。该样本有两点值得关注:
'' - 原始文档中的文本经过图形转换,
''   但是 FindText 方法提供的四边形可以让您轻松
''   即使在这种情况下也要突出显示发现。
'' - 该示例在页面的索引 0 处插入新的内容流,
''   这可确保突出显示在原始内容下绘制。
''   (可以使用相同的方法向现有文件添加水印等。)
Public Class FindTransformed
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        '' 在处理加载的 PDF 时,原始文件流必须保持打开状态,
        '' 详情请参阅@{LoadPDF}:
        Using fs = New FileStream(Path.Combine("Resources", "PDFs", "Transforms.pdf"), FileMode.Open, FileAccess.Read)
            doc.Load(fs)
            '' 使用区分大小写的搜索查找所有“文本绘制于”:
            Dim finds = doc.FindText(
                New FindTextParams("Text drawn at", False, True),
                OutputRange.All)

            '' 突出显示所有找到的内容:首先,查找找到该文本的所有页面
            Dim pgIndices = finds.Select(Function(f_) f_.PageIndex).Distinct()
            '' 循环页面,在每个页面上在索引 0 处插入一个新的内容流,
            '' 这样我们的亮点就在原始内容之下:
            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
                        '' 注意用于填充多边形的纯色:
                        g.FillPolygon(ql, Color.CadetBlue)
                        g.DrawPolygon(ql, Color.Blue)
                    Next
                Next
            Next
            ''
            '' 完毕:
            doc.Save(stream)
        End Using
        Return doc.Pages.Count
    End Function
End Class