FindAndRedact.vb
''
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports System.Text.RegularExpressions
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Pdf.Annotations
Imports GrapeCity.Documents.Pdf.AcroForms
'' このサンプルでは、テキストマップを使用して PDF 内の特定のコンテンツを
'' 検索し、それを墨消しの対象としてマークする方法を示しています。
'' なお、 ApplyRedact サンプルでは、このサンプルで追加された墨消し注釈に
'' 実際にデータを消去するために墨消しを適用する方法を確認できます。
'' このサンプルで使用される 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
'' PDF ドキュメントを保存します。
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