SoftMask1.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.Graphics;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Drawing;
using GCTEXT = GrapeCity.Documents.Text;
using GCDRAW = GrapeCity.Documents.Drawing;
namespace DsPdfWeb.Demos
{
// このサンプルは、GcPdfGraphics.SoftMask を使用して
// 半透明を描画しクリッピングを指定する方法を示します。
public class SoftMask1
{
public int CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
var page = doc.NewPage();
var g = page.Graphics;
var rc = Common.Util.AddNote(
"GcPdfGraphics でマスクを使用した描画が可能です。" +
"FormXObject でマスクを作成し、サポートされている任意の描画方法(半透明描画を含む)を使用して" +
"対象オブジェクトの Graphics を描画します。" +
"その結果をページに描画する際、ページのSoftMask プロパティに設定するとマスクとして使用できます。" +
"マスクからのアルファチャンネルが適用され、塗りつぶされた領域はマスクされず、" +
"透明領域がマスクされます。半透明領域は指定したアルファ値に応じたマスクになります。",
page);
var rMask = new RectangleF(0, 0, 72 * 5, 72 * 2);
var rDoc = new RectangleF(rc.Left, rc.Bottom + 36, rMask.Width, rMask.Height);
var softMask = SoftMask.Create(doc, rDoc);
var smGraphics = softMask.FormXObject.Graphics;
smGraphics.FillEllipse(rMask, Color.FromArgb(128, Color.Black));
smGraphics.DrawString("半透明テキスト",
new TextFormat() { Font = StandardFonts.HelveticaBold, FontSize = 36, ForeColor = Color.Black },
new RectangleF(rMask.X, rMask.Y, rMask.Width, rMask.Height),
TextAlignment.Center, ParagraphAlignment.Center, false);
var rt = rMask;
rt.Inflate(-8, -8);
// マスクにはアルファチャンネルのみが重要で、色は関係ありません。
smGraphics.DrawEllipse(rt, Color.Red);
g.SoftMask = softMask;
g.DrawImage(GCDRAW.Image.FromFile(Path.Combine("Resources", "Images", "reds.jpg")), rDoc, null, ImageAlign.StretchImage);
// メモ:一部の PDF ビューワ(ブラウザ内蔵のビューワなど)では、
// 新しいマスクを割り当てる前にマスクをリセットしないと、
// マスクの変更が正しく処理されない場合があります。
g.SoftMask = SoftMaskBase.None;
rDoc.Offset(0, rDoc.Height + 12);
rDoc.Width = rc.Width;
rDoc.Height = 36;
rMask.Height = rDoc.Height;
for (int alpha = 16; alpha <= 255; alpha += 32)
{
softMask = SoftMask.Create(doc, rDoc);
smGraphics = softMask.FormXObject.Graphics;
smGraphics.DrawString($"■テキストの透明度(アルファ値) = {alpha}",
new TextFormat() { Font = StandardFonts.HelveticaBold, FontSize = 20, ForeColor = Color.FromArgb(alpha, Color.Black) },
new RectangleF(rMask.X, rMask.Y, rMask.Width, rMask.Height),
TextAlignment.Leading, ParagraphAlignment.Center, false);
g.SoftMask = softMask;
g.DrawImage(GCDRAW.Image.FromFile(Path.Combine("Resources", "Images", "reds.jpg")), rDoc, null, ImageAlign.StretchImage);
g.SoftMask = SoftMaskBase.None;
rDoc.Offset(0, rDoc.Height);
}
// PDF ドキュメントを保存します。
doc.Save(stream);
return doc.Pages.Count;
}
}
}