AdjustCoords.cs
//
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Pdf.Annotations;
namespace DsPdfWeb.Demos
{
// このサンプルでは、Page.AdjustCoordinates()メソッドを使用して、
// GcPdfDocumentに読み込まれ、かつそのページに不明な任意の変換が適用された
// 可能性があるPDFの、視覚座標(DsPdf の規則に従ってページの左上隅から
// 測定された座標)を正しい座標に変換する方法を示しています。調整された
// 座標は、注釈の配置(この場合は墨消し)などに使用することができます。
//
// このサンプルで使用された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("予期せぬエラー:請求書のサンプルは1ページちょうどでなければなりません。");
var page = doc.Pages[0];
// PDFページの左上隅から計測された、墨消しする領域の境界の矩形です。
// この矩形をそのまま使用すると、対象となるコンテンツを見失います。
var rectToRedact = new RectangleF(20, 170, 200, 40);
// ページ変換(この場合は回転)の可能性を考慮に入れて調整された
// 境界の矩形です。
var adjusted = page.AdjustCoordinates(rectToRedact);
// 注意: 'adjusted'の代わりに'rectToRedact'を使用すると、
// 墨消しの対象(顧客名/住所)を見失います。
var redact = new RedactAnnotation()
{
Rect = adjusted,
OverlayFillColor = Color.Orange,
OverlayText = "墨消しされています",
Page = page
};
// 墨消しを適用します。
doc.Redact(redact);
// PDF ドキュメントを保存します。
doc.Save(stream);
return doc.Pages.Count;
}
}
}
}