PaginatedText.vb
'' 完毕:
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing
'' 此示例演示如何呈现跨多个页面的长文本。
Public Class PaginatedText
Function CreatePDF(ByVal stream As Stream) As Integer
Dim doc = New GcPdfDocument()
''
'' 使用 TextLayout 渲染文本:
Dim tl = New TextLayout(72)
'' 如果没有指定单独运行的格式,我们必须提供
'' TextLayout.DefaultFormat 上的字体和字体大小:
tl.DefaultFormat.Font = StandardFonts.Times
tl.DefaultFormat.FontSize = 12
'' 第一行偏移 1/2":
tl.FirstLineIndent = 72 / 2
''
'' 所有其他格式设置属性均保留默认值。
'' 特别是,TextLayout 的默认分辨率是 72 dpi -
'' 与GcDocs.Pdf相同,WordWrap也是如此。
''
'' 将 TextLayout 的区域设置为整个页面:
tl.MaxWidth = doc.PageSize.Width
tl.MaxHeight = doc.PageSize.Height
'' ...并让它管理页边距(周围 1 英寸):
tl.MarginAll = tl.Resolution
''
'' 附加文本(20 段,这样一页就放不下)
'' (请注意,TextLayout 将“\r\n”解释为段落分隔符):
tl.Append(Util.LoremIpsum(20))
''
'' 添加所有文本后,我们必须计算渲染文本所需的字形,
'' 并进行布局。这可以通过一次调用 PerformLayout 来完成,将 true 传递给
'' 首先重新计算字形(即使文本不完全适合指定的最大大小,
'' 我们只需要调用 PerformLayout 一次):
tl.PerformLayout(True)
'' 使用分割选项来提供寡妇/孤儿控制:
Dim tso = New TextSplitOptions(tl)
tso.MinLinesInFirstParagraph = 2
tso.MinLinesInLastParagraph = 2
'' 在循环中,分割并渲染文本:
While (True)
'' 'rest' 将接受不适合的文本:
Dim rest As TextLayout = Nothing
Dim splitResult = tl.Split(tso, rest)
doc.Pages.Add().Graphics.DrawTextLayout(tl, PointF.Empty)
If splitResult <> SplitResult.Split Then
Exit While
End If
tl = rest
End While
''
'' 完毕:
doc.Save(stream)
Return doc.Pages.Count
End Function
End Class