Hi… I am looking for an updated example of how to retrieve the rectangle of the selected text, so I can redaction it. I am looking to do this in C# winforms.
Every example I have found in this group is a few years old and not workable.
Ok… I got it to work using the rectangle select tool, but if I use that tool to select more than one line, it only redacts the first line and keeps the other lines highlighted.
The following code will redact all text currently selected in the document.
You put this code into something like SetSmoothImages function in PDFViewForm.cs in the PDFViewTest sample project. Then you can highlight text, and then in the toolbar pick the Options->Smooth Images option to redact.
ArrayList rarr = new ArrayList();
Current_View.DocLockRead();
int itr = Current_View.GetSelectionBeginPage();
int end = Current_View.GetSelectionEndPage();
for (; itr <= end; ++itr)
{
PDFViewWPF.Selection selection = Current_View.GetSelection(itr);
double[] quads = selection.GetQuads();
int sz = quads.Length / 8; //each quad has eight numbers (x0, y0), ... (x3, y3)
if (sz == 0) continue;
for(int i = 0; i < sz; ++i)
{
int offset = 8 * i;
// we just want an axis aligned bounding box.
double[] x_axis = { quads[offset], quads[offset + 2], quads[offset + 4], quads[offset + 6] };
double[] y_axis = { quads[offset + 1], quads[offset + 3], quads[offset + 5], quads[offset + 7] };
double x1 = x_axis.Min();
double y1 = y_axis.Min();
double x2 = x_axis.Max();
double y2 = y_axis.Max();
rarr.Add(new Redactor.Redaction(itr, new pdftron.PDF.Rect(x1, y1, x2, y2), false, ""));
}
}
Current_View.DocUnlockRead();
Redactor.Appearance app = new Redactor.Appearance();
app.PositiveOverlayColor = System.Drawing.Color.Red;
app.NegativeOverlayColor = System.Drawing.Color.WhiteSmoke;
Current_View.DocLock(true);
Redactor.Redact(Current_View.GetDoc(), rarr, app);
Current_View.DocUnlock();
Note, the two types of document locking that occurs. A write lock causes rendering to stop, so we delay until we are ready to redact.