SupportedBarcodes.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
'' 
Imports System.IO
Imports System.Drawing
Imports System.Collections.Generic
Imports GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Barcode

'' ライブラリで出力可能なすべてのバーコードシンボルのサンプルを描画します。
Public Class SupportedBarcodes
    Function CreatePDF(ByVal stream As Stream) As Integer
        '' レイアウトパラメーター
        Const margin = 72.0F / 2
        Const pad = 4.0F
        Const gap = 10.0F

        Dim doc = New GcPdfDocument()
        Dim page As Page = Nothing
        Dim g As GcGraphics = Nothing
        Dim ip As PointF
        '' 新しいページの追加、挿入ポイントの初期位置を設定
        Dim newPage As Action =
            Sub()
                page = doc.NewPage()
                g = page.Graphics
                ip = New PointF(margin, margin)
            End Sub
        newPage()
        '' バーコードの名前と値を表示するためのTextFormat
        Dim tfCaption = New TextFormat() With {
                .Font = StandardFonts.Times,
                .FontSize = 12
            }
        Dim tfBarcode = New TextFormat() With {
            .Font = StandardFonts.Helvetica,
            .FontSize = 9
        }
        '' バーコードインスタンス
        '' 変更されないプロパティを設定
        Dim barcode = New GcBarcode() With {
            .TextFormat = tfBarcode,
            .ScaleFactor = 1.5F
        }
        barcode.Options.CaptionPosition = BarCodeCaptionPosition.Below
        barcode.Options.SizeOptions.NarrowWideRatio = 0
        '' 指定バーコードタイプとオプションのCC-Aを使用してバーコードを描画
        Dim drawBarcode As Action(Of CodeType, String, String) =
            Sub(symboloty, value, cca)
                Dim caption = $"{symboloty}:{vbCrLf}{value}"
                If String.IsNullOrEmpty(cca) Then
                    barcode.Options.GS1Composite.Type = GS1CompositeType.None
                Else
                    '' 複合コンポーネント A (CC-A) の指定
                    caption += $"{vbCrLf}Dependent CCA: {cca}"
                    barcode.Options.GS1Composite.Type = GS1CompositeType.CCA
                    barcode.Options.GS1Composite.Value = cca
                End If
                '' すべてのバーコードがチェックサムをサポートしているわけではありません
                barcode.Options.CheckSumEnabled = symboloty <> CodeType.Code25intlv AndAlso symboloty <> CodeType.Code_2_of_5 AndAlso symboloty <> CodeType.Matrix_2_of_5
                Dim csize = g.MeasureString(caption, tfCaption)
                barcode.CodeType = symboloty
                barcode.Text = value
                Dim size = g.MeasureBarcode(barcode)
                size.Height = Math.Max(size.Height, csize.Height)
                Dim border = New RectangleF(ip, New SizeF(page.Size.Width - margin * 2, size.Height + pad * 2))
                '' 必要に応じて新しいページを追加
                If ip.Y + border.Height > page.Size.Height - margin Then
                    newPage()
                    border = New RectangleF(ip, border.Size)
                End If
                '' バーコードを描画
                g.DrawRectangle(border, Color.Gray)
                g.DrawString(caption, tfCaption, New PointF(border.Left + pad, border.Top + pad))
                g.DrawBarcode(barcode, New RectangleF(border.Right - size.Width - pad, border.Top + pad, size.Width, size.Height))
                ip.Y = border.Bottom + gap
            End Sub
        '' サポートされているすべてのバーコードシンボルを描画
        drawBarcode(CodeType.Ansi39, "*DIODOCS*", Nothing)
        drawBarcode(CodeType.Ansi39x, "*DioDocs*", Nothing)
        drawBarcode(CodeType.Codabar, "A12041961D", Nothing)
        drawBarcode(CodeType.Code25intlv, "1234567890", Nothing) '' Interleaved 2 of 5 (ITF)
        drawBarcode(CodeType.Code39, "*GCBARCODE*", Nothing)
        drawBarcode(CodeType.Code39x, "*DioDocs*", Nothing)
        drawBarcode(CodeType.Code49, "MESCIUS+DioDocs", Nothing)
        drawBarcode(CodeType.Code93x, "MESCIUS+DioDocs", Nothing)
        drawBarcode(CodeType.Code_93, "GCBARCODE", Nothing)
        drawBarcode(CodeType.Code_128_A, "DSPDF-2023", Nothing)
        drawBarcode(CodeType.Code_128_B, "DSPdf-2023", Nothing)
        drawBarcode(CodeType.Code_128_C, "1234567890", Nothing)
        drawBarcode(CodeType.Code_128auto, "DsPdf-2023", Nothing)
        drawBarcode(CodeType.Code_2_of_5, "1234567890", Nothing)
        drawBarcode(CodeType.DataMatrix, "MESCIUS+DioDocs", Nothing)
        drawBarcode(CodeType.QRCode, "メシウス DioDocs for PDF", Nothing)
        drawBarcode(CodeType.EAN_8, "1234567", Nothing)
        drawBarcode(CodeType.EAN_13, "469" + "87654" + "3210", Nothing)
        drawBarcode(CodeType.EAN128FNC1, "MESCIUS\nDioDocs", Nothing)
        drawBarcode(CodeType.IntelligentMail, "00300999999000000001", Nothing)
        drawBarcode(CodeType.JapanesePostal, "9813205", Nothing)
        drawBarcode(CodeType.PostNet, "152063949", Nothing)
        drawBarcode(CodeType.RM4SCC, "SE17PB9Z", Nothing)
        drawBarcode(CodeType.Matrix_2_of_5, "1234567890", Nothing)
        drawBarcode(CodeType.MSI, "1234567890", Nothing)
        drawBarcode(CodeType.MicroPDF417, "DioDocs", Nothing)
        drawBarcode(CodeType.Pdf417, "DioDocs", Nothing)
        drawBarcode(CodeType.RSS14, "1234567890", Nothing)
        drawBarcode(CodeType.RSS14Stacked, "1234567890", Nothing)
        drawBarcode(CodeType.RSS14Stacked, "1234567890", "12345")
        drawBarcode(CodeType.RSS14StackedOmnidirectional, "1234567890", Nothing)
        drawBarcode(CodeType.RSS14Truncated, "1234567890", Nothing)
        drawBarcode(CodeType.RSSExpanded, "12345678901234", Nothing)
        drawBarcode(CodeType.RSSExpandedStacked, "12345678901234", Nothing)
        drawBarcode(CodeType.RSSLimited, "1234567890", Nothing)
        drawBarcode(CodeType.RSSLimited, "1234567890", "12345")
        drawBarcode(CodeType.UCCEAN128, "MESCIUS+DioDocs", Nothing)
        drawBarcode(CodeType.UPC_A, "123456789012", Nothing)
        drawBarcode(CodeType.UPC_E0, "123456789012", Nothing)
        drawBarcode(CodeType.UPC_E1, "123456789012", Nothing)
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class