TagParagraphs.cs
//
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Pdf.Structure;
using GrapeCity.Documents.Pdf.MarkedContent;
namespace DsPdfWeb.Demos.Basics
{
// このサンプルは、タグ付き(構造化)PDFを作成する方法を示しています。
// タグを表示/閲覧するには、Adobe Acrobat Pro でドキュメントを開き、
// [表示]-[ナビゲーションパネル]-[タグ]に移動します。
public class TagParagraphs
{
public int CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
var rnd = Common.Util.NewRandom();
int pageCount = rnd.Next(3, 7);
// Part 要素を作成します。これには P(段落)要素が含まれます。
var sePart = new StructElement("Part");
doc.StructTreeRoot.Children.Add(sePart);
// いくつかのページを追加し、各ページに段落を追加してタグ付けします。
for (int pageIndex = 0; pageIndex < pageCount; ++pageIndex)
{
// ページを追加します。
var page = doc.Pages.Add();
var g = page.Graphics;
const float margin = 36;
const float dy = 18;
// いくつかの段落を追加します。
int paraCount = rnd.Next(1, 5);
float y = margin;
for (int i = 0; i < paraCount; ++i)
{
// 段落要素を作成します。
var seParagraph = new StructElement("P") { DefaultPage = page };
// Part 要素に追加します。
sePart.Children.Add(seParagraph);
// 段落を作成します。
var tl = g.CreateTextLayout();
tl.DefaultFormat.Font = StandardFonts.Helvetica;
tl.DefaultFormat.FontSize = 12;
tl.Append(Common.Util.getString_ja(1, 0, 5, 5, 10));
tl.MaxWidth = page.Size.Width;
tl.MarginLeft = tl.MarginRight = margin;
tl.PerformLayout(true);
// タグ付きコンテンツ内に TextLayout を描画します。
g.BeginMarkedContent(new TagMcid("P", i));
g.DrawTextLayout(tl, new PointF(0, y));
g.EndMarkedContent();
y += tl.ContentHeight + dy;
// 段落の StructElement にコンテンツ項目を追加します。
seParagraph.ContentItems.Add(new McidContentItemLink(i));
}
}
// ドキュメントをタグ付きとしてマークします。
doc.MarkInfo.Marked = true;
// PDF ドキュメントを保存します。
doc.Save(stream);
return doc.Pages.Count;
}
}
}