StrikeoutParagraph.cs
//
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using System.Linq;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Pdf.TextMap;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Pdf.Annotations;
using System.Threading;
using System.Collections.Generic;
using GrapeCity.Documents.Common;
namespace DsPdfWeb.Demos
{
// このサンプルでは、テキストマークアップ注釈の取り消し線を使用して、
// 特定のフレーズ「Several species」で始まる段落を取り消し表示する方法を紹介しています。
public class StrikeoutParagraph
{
public int CreatePDF(Stream stream)
{
// PDF を読み込みます。
var doc = new GcPdfDocument();
using var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "Wetlands.pdf"));
doc.Load(fs);
// 「Several species」で始まる最初の段落を取り消し表示します。
ITextParagraph para = null;
foreach (var p in doc.Pages)
{
var paras = p.GetTextMap().Paragraphs;
para = paras.FirstOrDefault(p_ => p_.GetText().StartsWith("Several species"));
if (para != null)
break;
}
if (para == null)
return doc.Pages.Count; // 発生しないはず
// テキストマークアップ注釈の取り消し線を追加します。
var markup = new TextMarkupAnnotation()
{
Page = para.Page,
MarkupType = TextMarkupType.StrikeOut,
Color = Color.Red
};
// 段落内のすべてのテキストフラグメントの座標を取得し、
// 注釈領域に追加します。
List<Quadrilateral> area = new List<Quadrilateral>();
foreach (var run in para.Runs)
{
foreach (var frag in run)
{
// テキストフラグメントのインデックスを取得します。
int index = 0;
var line = frag.Line;
var frags = line.RunFragments;
for (int i = 0; i < frags.Count && frags[i] != frag; ++i)
index += frags[i].Count;
// フラグメントの座標(四角形)を注釈領域に追加します。
area.Add(frag.Line.GetCoords(index, frag.Count));
}
}
markup.Area = area;
// PDF ドキュメントを保存します。
doc.Save(stream);
return doc.Pages.Count;
}
}
}