PaginatedText.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;
namespace DsPdfWeb.Demos.Basics
{
// このサンプルは、複数のページにわたる長いテキストを描画する方法を示します。
public class PaginatedText
{
public int CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
// TextLayout を使用してテキストを描画します。
var tl = new TextLayout(72);
// 個々の実行において書式を指定しない場合は、フォントとフォントサイズを
// TextLayout.DefaultFormat に指定する必要があります。
tl.DefaultFormat.FontName = "Yu Gothic";
tl.DefaultFormat.FontSize = 12;
// 最初の行のオフセットを 1/2 インチにします。
tl.FirstLineIndent = 72 / 2;
//
// 他のすべての書式設定プロパティはデフォルト値のままです。
// とくに、TextLayoutのデフォルト解像度は72 dpiです。
// これは DsPdf と同じで、WordWrap は true です。
//
// TextLayout の領域をページ全体に設定します。
tl.MaxWidth = doc.PageSize.Width;
tl.MaxHeight = doc.PageSize.Height;
// ...そして、ページマージンを管理します(外周に 1 インチ)。
tl.MarginAll = tl.Resolution;
//
// テキストを追加します(単一のページに収まらないように 20 段落)
// TextLayout は段落区切り文字として "\r\n" を解釈することに注意してください)。
tl.Append(Common.Util.getString_ja(0, 0, 20, 20));
//
// すべてのテキストが追加されたら、テキストの描画に必要なグリフを計算し、レイアウトを実行する必要があります。
// これは、PerformLayout を一回呼び出すことで行うことができ、最初にグリフを再計算するために true を渡します
// (テキストは指定された最大サイズに収まるわけではありませんが、PerformLayout を一度呼び出す必要があります)。
tl.PerformLayout(true);
// 分割オプションを使用して、widow/orphan の制御を提供します。
var to = new TextSplitOptions(tl);
to.MinLinesInFirstParagraph = 2;
to.MinLinesInLastParagraph = 2;
// ループ内で、テキストを分割して描画します。
while (true)
{
// 'rest' は、収まりきらなかったテキストを受け入れます。
var splitResult = tl.Split(to, out TextLayout rest);
doc.Pages.Add().Graphics.DrawTextLayout(tl, PointF.Empty);
if (splitResult != SplitResult.Split)
break;
tl = rest;
}
// PDF ドキュメントを保存します。
doc.Save(stream);
return doc.Pages.Count;
}
}
}