TagParagraphs.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' Copyright (c) GrapeCity inc. All rights reserved.
'' 
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Pdf.Structure
Imports GrapeCity.Documents.Pdf.MarkedContent

'' このサンプルは、タグ付き(構造化)PDFを作成する方法を示しています。
'' タグを表示/閲覧するには、Adobe Acrobat Pro でドキュメントを開き、
'' [表示]-[ナビゲーションパネル]-[タグ]に移動します。
Public Class TagParagraphs
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Dim rnd = Util.NewRandom()
        Dim pageCount = rnd.Next(3, 7)

        '' Part 要素を作成します。これには P(段落)要素が含まれます。
        Dim sePart = New StructElement("Part")
        doc.StructTreeRoot.Children.Add(sePart)

        '' いくつかのページを追加し、各ページに段落を追加してタグ付けします。
        For pageIndex = 0 To pageCount - 1
            '' ページを追加します。
            Dim page = doc.Pages.Add()
            Dim g = page.Graphics
            Const margin = 36.0F
            Const dy = 18.0F
            '' いくつかの段落を追加します。
            Dim paraCount = rnd.Next(1, 5)
            Dim y = margin
            For i = 0 To paraCount - 1
                '' 段落要素を作成します。
                Dim seParagraph = New StructElement("P") With {.DefaultPage = page}
                '' Part 要素に追加します。
                sePart.Children.Add(seParagraph)
                '' 段落を作成します。
                Dim tl = g.CreateTextLayout()
                tl.DefaultFormat.Font = StandardFonts.Helvetica
                tl.DefaultFormat.FontSize = 12
                tl.Append(Util.getString_ja(1, 0, 1, 5, 10))
                tl.MaxWidth = page.Size.Width
                tl.MarginLeft = margin
                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))
            Next
        Next
        '' ドキュメントをタグ付きとしてマークします。
        doc.MarkInfo.Marked = True
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class