VintaSoft Barcode .NET SDK 16.0: Руководство для .NET разработчика
В этом разделе
Добавление векторного штрих-кода в PDF документ
В этом разделе
Вот пример C#/VB кода, который показывает, как добавить векторные штрих-коды на страницы PDF документа.
/// <summary>
/// Adds a vector barcode to a PDF document.
/// </summary>
/// <param name="pdfFilename">A path to a PDF document.</param>
public static void AddVectorBarcodeToPdfDocument(string pdfFilename)
{
    // create the barcode writer
    using (Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter())
    {
        // specify that DataMatrix barcode must be created
        barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.DataMatrix;
        // padding size
        float padding = 5;

        // open PDF document
        using (Vintasoft.Imaging.Pdf.PdfDocument document = new Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename))
        {
            // for each PDF page
            for (int i = 0; i < document.Pages.Count; i++)
            {
                // get reference to PDF page
                Vintasoft.Imaging.Pdf.Tree.PdfPage page = document.Pages[i];
                // use page number as the barcode value
                barcodeWriter.Settings.Value = (i + 1).ToString();
                // get barcode as graphic path
                using (Vintasoft.Imaging.Drawing.IGraphicsPath barcodePath =
                    Convert(barcodeWriter.GetBarcodeAsBarcodePath()))
                {
                    // translate graphic path for drawing of barcode on the right-bottom corner of page
                    float barcodeWidth = barcodePath.GetBounds().Width;
                    Vintasoft.Imaging.AffineMatrix m = 
                        Vintasoft.Imaging.AffineMatrix.CreateTranslation(
                            page.MediaBox.Right - barcodeWidth - padding, padding);
                    barcodePath.Transform(m);

                    // get Graphics object for drawing on PDF page
                    using (Vintasoft.Imaging.Pdf.Drawing.PdfGraphics g = page.GetGraphics())
                    {
                        Vintasoft.Imaging.Pdf.Drawing.PdfBrush brush =
                            new Vintasoft.Imaging.Pdf.Drawing.PdfBrush(System.Drawing.Color.Black);
                        // fill barcode path on Graphics object
                        g.FillPath(brush, barcodePath);
                    }
                }
            }

            // save PDF document
            string resultFileName = System.IO.Path.GetFileNameWithoutExtension(pdfFilename) + "_marked.pdf";
            document.Save(System.IO.Path.Combine(System.IO.Path.GetDirectoryName(pdfFilename), resultFileName));
        }
    }            
}

/// <summary>
/// Converts <see cref="Vintasoft.Barcode.BarcodePathData"/> to <see cref="Vintasoft.Imaging.Drawing.IGraphicsPath"/>.
/// </summary>
/// <param name="barcodePathData">The barcode path data.</param>
private static Vintasoft.Imaging.Drawing.IGraphicsPath Convert(Vintasoft.Barcode.BarcodePathData barcodePathData)
{
    System.Drawing.PointF[] points = Vintasoft.Barcode.GdiConverter.Convert(barcodePathData.Points);
    byte[] pointTypes = barcodePathData.GetPointTypesAsByteArray();
    return Vintasoft.Imaging.Drawing.DrawingFactory.Default.CreateGraphicsPath(
        new Vintasoft.Imaging.Drawing.GraphicsPathData(points, pointTypes));
}
''' <summary>
''' Adds a vector barcode to a PDF document.
''' </summary>
''' <param name="pdfFilename">A path to a PDF document.</param>
Public Shared Sub AddVectorBarcodeToPdfDocument(pdfFilename As String)
    ' create the barcode writer
    Using barcodeWriter As New Vintasoft.Barcode.BarcodeWriter()
        ' specify that DataMatrix barcode must be created
        barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.DataMatrix
        ' padding size
        Dim padding As Single = 5

        ' open PDF document
        Using document As New Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename)
            ' for each PDF page
            For i As Integer = 0 To document.Pages.Count - 1
                ' get reference to PDF page
                Dim page As Vintasoft.Imaging.Pdf.Tree.PdfPage = document.Pages(i)
                ' use page number as the barcode value
                barcodeWriter.Settings.Value = (i + 1).ToString()
                ' get barcode as graphic path
                Using barcodePath As Vintasoft.Imaging.Drawing.IGraphicsPath = _
                    Convert(barcodeWriter.GetBarcodeAsBarcodePath())

                    ' translate graphic path for drawing of barcode on the right-bottom corner of page
                    Dim barcodeWidth As Single = barcodePath.GetBounds().Width
                    Dim m As Vintasoft.Imaging.AffineMatrix = _
                        Vintasoft.Imaging.AffineMatrix.CreateTranslation( _
                            page.MediaBox.Right - barcodeWidth - padding, padding)
                    barcodePath.Transform(m)

                    ' get Graphics object for drawing on PDF page
                    Using g As Vintasoft.Imaging.Pdf.Drawing.PdfGraphics = page.GetGraphics()
                        Dim brush As New Vintasoft.Imaging.Pdf.Drawing.PdfBrush(System.Drawing.Color.Black)
                        ' fill barcode path on Graphics object
                        g.FillPath(brush, barcodePath)
                    End Using
                End Using
            Next

            ' save PDF document
            Dim resultFileName As String = System.IO.Path.GetFileNameWithoutExtension(pdfFilename) & "_marked.pdf"
            document.Save(System.IO.Path.Combine(System.IO.Path.GetDirectoryName(pdfFilename), resultFileName))
        End Using
    End Using
End Sub

''' <summary>
''' Converts <see cref="Vintasoft.Barcode.BarcodePathData"/> to <see cref="Vintasoft.Imaging.Drawing.IGraphicsPath"/>.
''' </summary>
''' <param name="barcodePathData">The barcode path data.</param>
Private Shared Function Convert(barcodePathData As Vintasoft.Barcode.BarcodePathData) _
    As Vintasoft.Imaging.Drawing.IGraphicsPath

    Dim points As System.Drawing.PointF() = Vintasoft.Barcode.GdiConverter.Convert(barcodePathData.Points)
    Dim pointTypes As Byte() = barcodePathData.GetPointTypesAsByteArray()
    Return Vintasoft.Imaging.Drawing.DrawingFactory.[Default].CreateGraphicsPath( _
        New Vintasoft.Imaging.Drawing.GraphicsPathData(points, pointTypes))
End Function