'' 完毕:
Imports System.IO
Imports System.Drawing
Imports System.Text.RegularExpressions
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Pdf.Annotations
Imports GrapeCity.Documents.Pdf.AcroForms
'' 该示例展示了如何使用文本映射来查找特定内容
'' 并将其标记为密文。
'' Checkout ApplyRedact 示例来查看编辑注释是如何进行的
'' 该示例添加的内容可用于实际擦除数据。
'' 另请查看 GcDocs.PdfViewer 部分中的示例以了解如何
'' 编辑注释(如本示例所示以编程方式添加,
'' 或通过查看器的 UI)可以有选择地应用或一起应用。
'' 本示例中使用的 PDF 是由 TimeSheet 创建的。
Public Class FindAndRedact
Public Function CreatePDF(ByVal stream As Stream) As Integer
Dim doc = New GcPdfDocument()
Using fs As New FileStream(Path.Combine("Resources", "PDFs", "TimeSheet.pdf"), FileMode.Open, FileAccess.Read)
doc.Load(fs)
'' 注意:Acrobat 不允许您在数字签名的文件中应用密文
'' 文件,所以首先我们找到并删除任何现有的签名:
RemoveSignatureFields(doc.AcroForm.Fields)
'' 循环浏览页面,删除任何看起来像短日期的内容:
For Each page In doc.Pages
Dim tmap = page.GetTextMap()
For Each tline In tmap
If (Regex.Match(tline.Text.Trim(), "\d+[/-]\w+[/-]\d").Success) Then
Dim redact = New RedactAnnotation() With
{
.Rect = tline.GetCoords().ToRect(),
.Color = Color.Red,
.Page = page,
.MarkBorderColor = Color.Red,
.MarkFillColor = Color.Yellow
}
'' 如果我们还没有设置 redact.Page = page,我们可以这样做:
'' page.Annotations.Add(redact);
End If
Next
Next
'' 完毕:
doc.Save(stream)
Return doc.Pages.Count
End Using
End Function
'' 此代码来自RemoveSignatureFields示例:
Sub RemoveSignatureFields(ByVal fields As FieldCollection)
For i = fields.Count - 1 To 0 Step -1
RemoveSignatureFields(fields(i).Children)
If TypeOf fields(i) Is SignatureField Then
fields.RemoveAt(i)
End If
Next
End Sub
End Class