StampImage.cs
//
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Drawing;
using GrapeCity.Documents.Pdf.Annotations;
using GrapeCity.Documents.Pdf.Graphics;
using System.Numerics;
using GCTEXT = GrapeCity.Documents.Text;
using GCDRAW = GrapeCity.Documents.Drawing;
namespace DsPdfWeb.Demos.Basics
{
// このサンプルは、FormXObject を使用してカスタム外観ストリームを注釈に追加する方法を
// 示します。
// サンプルでは、既存の PDF が読み込まれ、ドキュメントのページがループされます。
// 各ページで、StampAnnotation が作成され、注釈の通常のデフォルト外観ストリームに
// 割り当てられた FormXObject が作成されます。
// 半透明のPNG画像は、通常の GcGraphics の機能(Transform および DrawImage)を使用して
// FormXObject のグラフィックスに描画されます。
public class StampImage
{
public int CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
// スタンプ注釈を追加する既存の PDF を読み込みます。
// (ドキュメントの読み込みの詳細については、LoadPDF を参照してください)
var jsFile = Path.Combine("Resources", "PDFs", "diodocs_flyer.pdf");
using var fs = File.OpenRead(jsFile);
doc.Load(fs);
var rect = new RectangleF(PointF.Empty, doc.Pages[0].Size);
// スタンプの外観として使用される FormXObject を作成します。
var fxo = new FormXObject(doc, rect);
// リソースからイメージを取得し、FormXObject のグラフィックスに描画します。
// (GcGraphics.Transform の使用方法の詳細については、Transformations を参照してください)
using var image = GCDRAW.Image.FromFile(Path.Combine("Resources", "ImagesBis", "circular-450x144.png"));
var center = new Vector2(fxo.Bounds.Width / 2, fxo.Bounds.Height / 2);
fxo.Graphics.Transform =
Matrix3x2.CreateRotation((float)(-35 * Math.PI) / 180f, center) *
Matrix3x2.CreateScale(3, center);
fxo.Graphics.DrawImage(image, fxo.Bounds, null, ImageAlign.CenterImage);
// ページをループし、各ページにスタンプを追加します。
foreach (var page in doc.Pages)
{
// ページ全体に StampAnnotation を作成します。
var stamp = new StampAnnotation()
{
Icon = StampAnnotationIcon.Draft.ToString(),
Name = "回覧用",
Page = page,
Rect = rect,
UserName = "ユーザーA"
};
// すべてのページで同じ FormXObject を再利用します。
stamp.AppearanceStreams.Normal.Default = fxo;
}
// PDF ドキュメントを保存します。
doc.Save(stream);
return doc.Pages.Count;
}
}
}