PageLabels.vb
''
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing
'' このサンプルでは、ドキュメントにページラベルを追加する方法を示します。
'' ページラベルを使用すると、ドキュメントを論理的に関連するページ範囲のシーケンスに
'' 分割できます(例:序文、本文、ポストフェイス)。
'' 「チャプター」で構成されるこのサンプルでは、各章に個別のページラベル範囲を追加します。
'' このサンプルのコードは、Outlines サンプルに似ています。
Public Class PageLabels
Sub CreatePDF(ByVal stream As Stream)
Dim doc = New GcPdfDocument()
'' メインテキストのテキストレイアウト(デフォルトの DsPdf 解像度は 72 dpi です)。
Dim tl = New TextLayout(72)
tl.DefaultFormat.Font = Util.getFont()
tl.DefaultFormat.FontSize = 12
tl.FirstLineIndent = 72 / 2
tl.MaxWidth = doc.PageSize.Width
tl.MaxHeight = doc.PageSize.Height
tl.MarginAll = tl.Resolution
'' 章のヘッダーのテキストレイアウトです。
Dim tlCaption = New TextLayout(72)
tlCaption.DefaultFormat.Font = Util.getFont()
tlCaption.DefaultFormat.FontBold = True
tlCaption.DefaultFormat.FontSize = tl.DefaultFormat.FontSize + 4
tlCaption.DefaultFormat.Underline = True
tlCaption.MaxWidth = tl.MaxWidth
tlCaption.MarginAll = tlCaption.Resolution
'' ページ間のテキストの分割を制御する分割オプションです。
Dim tso = New TextSplitOptions(tl) With
{
.RestMarginTop = tl.Resolution,
.MinLinesInFirstParagraph = 2,
.MinLinesInLastParagraph = 2
}
'' いくつかの章を生成し、それぞれにアウトラインエントリーを提供します。
Const NChapters = 20
For i = 0 To NChapters - 1
'' 章タイトル - 章のヘッダーとして印刷し、アウトラインノードとして追加します。
Dim chapter = $"第 {i + 1} 章"
'' ページラベルを追加するのに必要なのは、範囲内の最初のページの
'' インデックスに関連付けられたページラベル範囲、範囲プレフィックス
'' および番号付けスタイルを追加することだけです。
doc.PageLabelingRanges.Add(doc.Pages.Count, New PageLabelingRange($"{chapter}, p. ", NumberingStyle.DecimalArabic, 1))
doc.Pages.Add()
tlCaption.Clear()
tlCaption.Append(chapter)
tlCaption.PerformLayout(True)
'' 章のアウトラインノードを追加します。
doc.Outlines.Add(New OutlineNode(chapter, New DestinationFitH(doc.Pages.Last, tlCaption.MarginTop)))
'' キャプションを出力します。
doc.Pages.Last.Graphics.DrawTextLayout(tlCaption, PointF.Empty)
'' 章のテキストです。
tl.Clear()
tl.FirstLineIsStartOfParagraph = True
tl.LastLineIsEndOfParagraph = True
tl.Append(Util.getString_ja(1, 0, 5))
'' メインテキストレイアウト内の章ヘッダーを考慮します。
tl.MarginTop = tlCaption.ContentRectangle.Bottom + 12
tl.PerformLayout(True)
'' 章を出力します。
While True
'' 'rest' は、収まりきらなかったテキストを受け入れます。
Dim rest As TextLayout = Nothing
Dim splitResult = tl.Split(tso, rest)
doc.Pages.Last.Graphics.DrawTextLayout(tl, PointF.Empty)
If splitResult <> SplitResult.Split Then
Exit While
End If
tl = rest
Dim p = doc.Pages.Add()
End While
Next
'' PDF ドキュメントを保存します。
doc.Save(stream)
End Sub
End Class