'' 完毕:
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