'''' This code is part of Document Solutions for PDF .NET demos.'' Copyright (c) MESCIUS inc. All rights reserved.''ImportsSystem.IOImportsSystem.DrawingImportsGrapeCity.Documents.PdfImportsGrapeCity.Documents.Text '' This sample renders a variety of interesting Unicode characters'' including surrogate pairs. It also implicitly uses the automatic'' font fallback (font substitution) feature built into DsPdf.'' Note that this sample may produce different results on different'' systems, as it relies on system-provided fallback fonts.'' For a platform- and system-independent version of this sample see SurrogatesPort.'' See also FontFallbacks.PublicClassSurrogatesFunctionCreatePDF(ByVal stream AsStream) AsIntegerDim doc = NewGcPdfDocument()Dim g = doc.NewPage().Graphics'' For most of the 'interesting' chars demoed in this sample, '' fallback fonts (see FontFallbacks) will be automatically used,'' so we can just use a standard font for the captions:Dim font = StandardFonts.HelveticaDim tf = NewTextFormat() With {.Font = font, .FontSize = 12}Dim tf1 = NewTextFormat(tf) With {.FontSize = 14} g.DrawString("Some Interesting Unicode Characters (relies on system fallbacks)",NewTextFormat(tf) With {.Underline = True, .FontSize = tf.FontSize + 2},NewRectangleF(0, 36, doc.PageSize.Width, Single.MaxValue),TextAlignment.Center) '' Set up text insertion point and its advance function:Dim ip = NewPointF(72, 54)Dim nextIp As Func(OfBoolean, PointF) =Function(caption_ AsBoolean) ip.Y += If(caption_, 30, 20)Return ipEndFunction '' Draw the strings: g.DrawString("Surrogate Pairs:", tf, nextIp(True)) g.DrawString($"{ChrW(&HD867)}{ChrW(&HDEDB)}{ChrW(&HD840)}{ChrW(&HDC0B)}{ChrW(&HD834)}{ChrW(&HDD1E)}{ChrW(&HD834)}{ChrW(&HDD61)}{ChrW(&HD83D)}{ChrW(&HDC04)}", tf1, nextIp(False)) g.DrawString("Currency Symbols:", tf, nextIp(True)) g.DrawString($"{ChrW(&H24)}{ChrW(&H20A0)}{ChrW(&H20A1)}{ChrW(&H20A2)}{ChrW(&H20A3)}{ChrW(&H20A4)}{ChrW(&H20AC)}{ChrW(&H20B9)}{ChrW(&H20BD)}", tf1, nextIp(False)) g.DrawString("Mathematical Operators:", tf, nextIp(True)) g.DrawString($"{ChrW(&H221A)}{ChrW(&H222B)}{ChrW(&H2211)}{ChrW(&H2210)}{ChrW(&H2264)}{ChrW(&H2265)}{ChrW(&H2202)}{ChrW(&H2208)}", tf1, nextIp(False)) g.DrawString("CJK Ideographs Extension A:", tf, nextIp(True)) g.DrawString($"{ChrW(&H3400)}{ChrW(&H3401)}{ChrW(&H3402)}{ChrW(&H3403)}{ChrW(&H3404)}{ChrW(&H3405)}{ChrW(&H3406)}{ChrW(&H3407)}", tf1, nextIp(False)) g.DrawString("Letterlike Symbols:", tf, nextIp(True)) g.DrawString($"{ChrW(&H2110)}{ChrW(&H2111)}{ChrW(&H2112)}{ChrW(&H2113)}{ChrW(&H2114)}{ChrW(&H2115)}{ChrW(&H211B)}{ChrW(&H211C)}", tf1, nextIp(False)) g.DrawString("Private Use Area:", tf, nextIp(True)) g.DrawString($"{ChrW(&HE000)}{ChrW(&HE001)}{ChrW(&HE010)}{ChrW(&HE011)}{ChrW(&HE012)}{ChrW(&HE013)}{ChrW(&HE014)}{ChrW(&HE015)}", tf1, nextIp(False)) g.DrawString("Arrows:", tf, nextIp(True)) g.DrawString($"{ChrW(&H2190)}{ChrW(&H2191)}{ChrW(&H2192)}{ChrW(&H2193)}{ChrW(&H21B0)}{ChrW(&H21E6)}{ChrW(&H21CB)}{ChrW(&H21A9)}", tf1, nextIp(False)) g.DrawString("Dingbats:", tf, nextIp(True)) g.DrawString($"{ChrW(&H2714)}{ChrW(&H2717)}{ChrW(&H275B)}{ChrW(&H275C)}{ChrW(&H2706)}{ChrW(&H2707)}{ChrW(&H2708)}{ChrW(&H2709)}", tf1, nextIp(False)) g.DrawString("Braille Patterns:", tf, nextIp(True)) g.DrawString($"{ChrW(&H2830)}{ChrW(&H2831)}{ChrW(&H2832)}{ChrW(&H2833)}{ChrW(&H2834)}{ChrW(&H2835)}{ChrW(&H2836)}{ChrW(&H2837)}", tf1, nextIp(False)) g.DrawString($"Geometric Shapes:", tf, nextIp(True)) g.DrawString($"{ChrW(&H25D0)}{ChrW(&H25D1)}{ChrW(&H25D2)}{ChrW(&H25D3)}{ChrW(&H25A4)}{ChrW(&H25F0)}{ChrW(&H25BC)}{ChrW(&H25CE)}", tf1, nextIp(False)) g.DrawString("Latin Extended A:", tf, nextIp(True)) g.DrawString($"{ChrW(&H100)}{ChrW(&H101)}{ChrW(&H102)}{ChrW(&H103)}{ChrW(&H104)}{ChrW(&H105)}{ChrW(&H106)}{ChrW(&H107)}", tf1, nextIp(False)) g.DrawString("Miscellaneous Symbols:", tf, nextIp(True)) g.DrawString($"{ChrW(&H2600)}{ChrW(&H2601)}{ChrW(&H2602)}{ChrW(&H2603)}{ChrW(&H2604)}{ChrW(&H2605)}{ChrW(&H2606)} " +$"{ChrW(&H2607)}{ChrW(&H2608)}{ChrW(&H2609)}{ChrW(&H2614)}{ChrW(&H2615)}{ChrW(&H26F0)}", tf1, nextIp(False))'''' Done: doc.Save(stream)Return doc.Pages.CountEndFunctionEndClass