FindAndRedact.cs
// 完毕:
using System.IO;
using System.Drawing;
using System.Text.RegularExpressions;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Pdf.Annotations;
using GrapeCity.Documents.Pdf.TextMap;
using GrapeCity.Documents.Pdf.AcroForms;
namespace DsPdfWeb.Demos
{
// 该示例展示了如何使用文本映射来查找特定内容
// 并将其标记为密文。
// Checkout ApplyRedact 示例来查看编辑注释是如何进行的
// 该示例添加的内容可用于实际擦除数据。
// 另请查看 GcDocs.PdfViewer 部分中的示例以了解如何
// 编辑注释(如本示例所示以编程方式添加,
// 或通过查看器的 UI)可以有选择地应用或一起应用。
// 本示例中使用的 PDF 是由 TimeSheet 创建的。
public class FindAndRedact
{
public int CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
using (var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "TimeSheet.pdf")))
{
doc.Load(fs);
// 注意:Acrobat 不允许您在数字签名的文件中应用密文
// 文件,所以首先我们找到并删除任何现有的签名:
removeSignatureFields(doc.AcroForm.Fields);
// 循环浏览页面,删除任何看起来像短日期的内容:
foreach (var page in doc.Pages)
{
var tmap = page.GetTextMap();
foreach (ITextLine tline in tmap)
{
if (Regex.Match(tline.Text.Trim(), @"\d+[/-]\w+[/-]\d").Success)
{
var redact = new RedactAnnotation()
{
Rect = tline.GetCoords().ToRect(),
MarkBorderColor = Color.Red,
MarkFillColor = Color.Yellow,
Page = page
};
// 如果我们还没有设置 redact.Page = page,我们可以这样做:
// page.Annotations.Add(redact);
}
}
}
// 完毕:
doc.Save(stream);
return doc.Pages.Count;
// 此代码来自RemoveSignatureFields示例:
void removeSignatureFields(FieldCollection fields)
{
for (int i = fields.Count - 1; i >= 0; --i)
{
removeSignatureFields(fields[i].Children);
if (fields[i] is SignatureField)
fields.RemoveAt(i);
}
}
}
}
// Viewer options for SupportApiDemo:
public static GcPdfViewerSupportApiDemo.Models.PdfViewerOptions PdfViewerOptions
{
get => new GcPdfViewerSupportApiDemo.Models.PdfViewerOptions(
GcPdfViewerSupportApiDemo.Models.PdfViewerOptions.Options.AnnotationEditorPanel |
GcPdfViewerSupportApiDemo.Models.PdfViewerOptions.Options.ActivateAnnotationEditor,
viewerTools: new string[] { "save", "edit-redact-apply", "$split", "text-selection", "pan", "$zoom", "$fullscreen", "print", "rotate", "download", "doc-properties", "about" },
annotationEditorTools: new string[] { "save", "edit-redact", "edit-redact-apply" });
}
}
}