AdjustCoords.cs
// 完毕:
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Pdf.Annotations;
namespace DsPdfWeb.Demos
{
// 此示例演示如何使用 Page.AdjustCooperatives() 方法
// 转换视觉坐标(从左上角开始测量)
// 根据 GcDocs.Pdf 规则)纠正 PDF 中的坐标
// 已加载到 GcPdfDocument 中,并且可能具有任意未知数
// 应用于其页面的转换。调整后的坐标可以是
// 用于定位注释(在本例中为编辑)等。
//
// 此示例中使用的 PDF 有一页包含示例发票的扫描件
// 顺时针旋转了 90 度。 PDF 页面旋转 270 度
// 补偿(以便页面在视觉上具有正确的纵向方向)。
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")))
{
doc.Load(fs);
if (doc.Pages.Count != 1)
throw new Exception("Unexpected: sample invoice should have exactly one page.");
var page = doc.Pages[0];
// 要编辑的区域的边界矩形,
// 从 PDF 页面的左上角开始测量。
// 如果按原样使用这个矩形,它将错过目标内容:
var rectToRedact = new RectangleF(20, 170, 200, 40);
// 调整后的边界矩形,考虑到
// 任何可能的页面转换(在本例中为旋转):
var adjusted = page.AdjustCoordinates(rectToRedact);
// 注意:如果使用“rectToRedact”而不是“调整”,
// 编辑将错过目标(客户名称/地址):
var redact = new RedactAnnotation()
{
Rect = adjusted,
OverlayFillColor = Color.Orange,
OverlayText = "已标记为密文",
Page = page
};
// 应用编辑:
doc.Redact(redact);
// 完毕:
doc.Save(stream);
return doc.Pages.Count;
}
}
}
}