// This code is part of GrapeCity Documents for PDF samples.
// Copyright (c) GrapeCity, Inc. All rights reserved.
// This sample shows how to use the Page.AdjustCoordinates() method
// to convert visual coordinates (measured from the top left corner
// of the page according to GcPdf rules) to correct coordinates in a PDF
// that was loaded into GcPdfDocument and may have arbitrary unknown
// transformations applied to its pages. The adjusted coordinates can be
// used to position annotations (redact in this case) etc.
// The PDF used in this sample has one page containing the scan of a sample invoice
// that was rotated 90 degrees clockwise. The PDF page is rotated 270 degrees to
// compensate (so that visually the page has correct portrait orientation).
public class AdjustCoords
public int CreatePDF(Stream stream)
var doc = new GcPdfDocument();
using (var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "invoice-scan-rot270.pdf")))
if (doc.Pages.Count != 1)
throw new Exception("Unexpected: sample invoice should have exactly one page.");
var page = doc.Pages;
// The bounding rectangle of the area to redact,
// measured from the top left corner of the PDF page.
// If this rectangle is used as is, it will miss the target content:
var rectToRedact = new RectangleF(20, 170, 200, 40);
// The adjusted bounding rectangle, taking into consideration
// any possible page transformations (rotation in this case):
var adjusted = page.AdjustCoordinates(rectToRedact);
// Note: if 'rectToRedact' is used instead of 'adjusted',
// the redact will miss the target (customer name/address):
var redact = new RedactAnnotation()
Rect = adjusted,
OverlayFillColor = Color.Orange,
OverlayText = "Redacted",
Page = page
// Apply the redact: