Testimonios


First of all, let me compliment you on your Barcode.NET Library. We evaluated a number of products to use in our application, and yours was our favorite.

Dan Konigsberg
CampMinder, LLC





VintaSoftBarcode.NET SDK - FAQ

Cuestiones generales:

 

Redistribución:

 

Ventas:

 

Programación:

 

Imágenes:

 

 

¿Para qué fines puedo utilizar la biblioteca VintaSoftBarcode.NET?

Esta SDK permite leer y escribir códigos de barras 1D, postales y 2D para imágenes digitales y recursos de imágenes de archivos PDF.

 

 

¿Qué incluye esta biblioteca?

La biblioteca incluye:

  • File Vintasoft.Barcode.dll/Vintasoft.Wpf.Barcode.dll – es una biblioteca de clases controlada para .NET
  • Documentación en formato MS Help Workshop (file Documentation\Vintasoft.Barcode.chm)
  • Aplicación de presentación (file Bin\vX.X\BarcodeDemo.exe)
  • Ejemplos para MS VB.NET, C#, ASP.NET (files en catálogo /Examples)
  • Ejemplos de imágenes con códigos de barras (files en catálogo /Images)

 

 

¿En qué lenguajes de programación puedo utilizar esta biblioteca VintaSoftBarcode.NET?

La licencia del desarrollador y la licencia de la compañía(sitio) permiten utilizar este componente en:

  • Microsoft Visual Studio .NET : Visual Basic, Visual C#, Visual C++, Visual J#
  • Borland Delphi 8.0, Borland C# Builder, Borland C++ BuilderX
  • en todos lenguajes de programación y anexos compatibles con .NET tecnología.

La licencia del servidor permite utilizar este componente en:

  • aplicaciones de Internet / Intranet en el servidor (ASP.NET o PHP)

 

 

¿Qué límites tiene la versión no registrada de la biblioteca?

Versión de biblioteca no registrada tiene las siguientes limitaciones:

  • En Bin/X.X/Vintasoft.Barcode.dll o Vintasoft.Wpf.Barcode.dll cada vez se muestra nagware antes de empezar el proceso de lectura de los códigos de barras.
  • La significación del código de barras encontrado se sustituye a la línea "*DEMO*" para códigos de barras encontrados de tipos QR, GS1 Databar y IntelligentMail.
  • En Bin/X.X/NoNagScreen/Vintasoft.Barcode.dll o Vintasoft.Wpf.Barcode.dll una parte de símbolos del código de barras encontrado se sustituye al símbolo '*'.
  • Сódigos de barras puede ser de sólo lectura desde la primera página del documento PDF.
  • Línea "Demo" se añade al código de barras generado en modo aleatorio.

 

 

No he encontrado la respuesta a mi pregunta. ¿Qué debo hacer?

Puede encontrar la información sobre la mayoria de las preguntas en la documentación o en este FAQ. Si no ha encontrado la respuesta a su pregunta, escriba al Servicio de apoyo técnico.

 

 

¿Qué ficheros debo incluir en distribución de mi programa?

Tiene que incluir solo un fichero: Vintasoft.Barcode.dll/Vintasoft.Wpf.Barcode.dll. A la instalación de su programa hay que insertar este fichero en el catálogo que tiene la referencia aparecida durante la compilación del programa.

 

 

¿Puedo distribuir componente Vintasoft.Barcode.dll o Vintasoft.Wpf.Barcode.dll junto con mi aplicación sin algun pago complementario?

Si, puede distribuir componente (Vintasoft.Barcode.dll/Vintasoft.Wpf.Barcode.dll) junto con su anexo. Paga solamente por el registro inicial. La licencia de la compañía no tiene límites en la distribucion. La licencia del desarrollador tiene ciertos límites en la distribución. La redistribución de la licencia para servidor no es libre de derechos. Por favor, vea el contrato de licencia.

 

 

¿Qué hacer si la redistribución de mi aplicación que está creado sobre la base de la licencia del desarrollador puede ser superior 100 copias en el año en curso?

Si posee la licencia del desarrollador y redistribución de su aplicación puede ser superior 100 copias en el año en curso, Ud. debe contactar Ventas "VintaSoft". Ud. proveerá de oportunidad actualizar su licencia del desarrollador a la licencia de la compañía con 30% descuento o comprar la segunda licencia del desarrollador.

 

 

¿Qué diferencias son entre la licencia del desarrollador y la licencia de la compañía (sitio)?

  • La licencia del desarrollador debe ser utilizado en desarrollo de software por sólo un desarrollador, que nombre es indicado en los datos de licencia.
  • La licencia de la compañía debe ser utilizado en desarrollo de software por cualquier desarrollador de la compañía, que nombre es indicado en los datos de licencia.
  • La licencia del desarrollador puede ser utilizado en desarrollo de software en cualquier computador ubicado en cualquier dirección física.
  • La licencia de la compañía puede ser utilizado en desarrollo de software en cualquier computador ubicado en una sola dirección física (en sólo una oficina).
  • La licencia del desarrollador permite la redistribución de aplicación que integra los ensamblados SDK redistribuibles no más de 100 copias en el año.
  • La licencia de la compañía permite la redistribución de aplicación ilimitada, que integra los ensamblados SDK redistribuibles.

 

 

¿Puedo actualizar la licencia "Standard edition" de la licencia "Standard + WPF edition" equivalente?

Sí, por favor contacte Ventas y Ud. proveerá de oportunidad comprar la licencia "Standard + WPF edition" equivalente con 70% descuento.

 

 

¿Hay la diferencia en utilizando mi aplicación en Desktop PC o en Server?

Si, hay. Por favor lea la sección "Deploying" en documentación de este producto para que comprender la diferencia.

Los terminos: Desktop PC – SO Windows XP, Vista, 7 está instalado. Server – SO Windows Server 2000, 2003, 2008 está instalado.

 

 

¿Cómo puedo maximizar la velocidad de lectura del codigo de barras?

Aqui algunos consejos que le permitirán maximizar la velocidad de lectura del código de barras:

  • Reconozca solamente los tipos de códigos de barras (ver Settings.ScanBarcodeTypes). Esto puede aumentar la velocidad de lectura de códigos de barras por 2 veces.
  • Reconocimiento de códigos de barras solamente en la dirección necesaria (ver Settings.ScanDirection). Eso puede aumentar la lectura de códigos de barras hasta en un 20%.
  • Encuentra un "buen" umbral para tus imágenes a color y usalos (ver Settings.Threshold), no use el modo de umbrales automáticos (ver Settings.ThresholdMode) si es posible. Esto puede aumentar la velocidad de lectura de los códigos de barras en un 10%.
  • Ajuste los parametros ExpectedBarcodes Property si el numero de códigos de barras es conocido.
  • Use imágenes en blanco y negro con códigos de barras. Esto puede aumentar la velocidad de lectura de los códigos de barras en hasta un 20%.
  • Desactive los parametros Settings.RemovePeas, si la imagen con los códigos de barras tienen buena calidad. Esto puede aumentar la velocidad de lectura del código de barras en un 5%.
  • No utilice la dirección ScanDirection.Angle45and135, si no tiene códigos de barras bajos y anchos rotados a 30 – 60 grados. Esto puede aumentar la velocidad de lectura de códigos de barras en hasta un 30%.
  • Desactive los parametros Settings.SearchDistortedDataMatrixBarcodes si su códigos de barras de tipo DataMatrix no tienen distorsión dimensional. Esto puede aumentar la velocidad de lectura de los códigos de barras DataMatrix en hasta un 50%.

 

 

¿Cómo puedo recibir el sistema más estable de el reconocimiento de los códigos de barras?

Para la regulación del sistema utilice IBarcodeInfo.ReadingQuality.

  • Ejecute una serie de los experimentos con los valores diferentes de Threshold (o parámetros del brillo del escaner) y una parte de los códigos de barras (desde 10).
  • Elije parámetros con los cuales el valor medio de ReadingQuality será el máximo.
  • El valor medio recomendado de ReadingQuality es 0.75. Tal valor de este parámetro permite recibir el sistema de trabajo de la estabilidad máxima.
Primeramente se recomienda reconocer los códigos de barras de los imágenes, despues corregir los imágenes y hacer su elaboración.

 

 

¿Hay algunas recomendaciones sobre el proceso de la creación de los códigos de barras 1D?

Código 39 y código 128 son los códigos más estables lineales.
Código 128 es un código más compacto (para los datos numerales y simbólicos).

Recomendaciones para la creación de los códigos de barras y su reconocimiento:

  • Cree el código de barras 1D, tamaño de la célula del cual será por lo menos de 2 pixels.
  • Que más la altura del código de barras, más la calidad de su reconocimiento.
  • Para los códigos de barras se recomienda el espacio de no menos de 4 tamaños de células.
  • Utilice la suma opcional de control para los códigos de barras sin la suma obligatoria de control (Code 39, Interleaved 2of5, Standard 2of5). Eso les ayudará evitar los errores en el reconocimiento de los códigos de barras en los imágenes de mal calidad.

 

 

¿Нay algunas recomendaciones para la creación de los códigos de barras 2D?

Data Matrix es el código de barras 2D más estable para las deterioraciones. Aztec y DataMatrix son los códigos de barras más compacto, despues de los siguen QR y PDF417.
Todos los códigos de barras 2D pueden contener texto y datos binarios y tienen el algoritmo de corrección de errores Reed-Solomon, que permite reparar hasta 30 % de los datos dañados.

Recomendaciones para la creación de los códigos de barras y su reconocimiento:

  • Cree los códigos de barras Aztec, Data Matrix y QR Code, tamaño de la célula de los cuales será por lo menos de 3 pixels.
  • Cree el código de barras PDF417, tamaño de la célula del cual será por lo menos de 2 pixels.
  • Para los códigos de barras PDF417 and Data Matrix se recomienda el espacio de no menos de 2 tamaños de células.
  • Para el código de barras QR Code se recomienda el espacio de no menos de 4 tamaños de células.

 

 

¿Biblioteca apoya el modo de multicorrientes?

Sí. Empezando de la versión 5.0, el algorítmo principal se divide a N flujos.

 


 

¿Cómo se puede identificar los codigos de barass de mal calidad en imagen colorada?

Hay dos variantes:

  • Utilizar el reconocimiento automático (ver ReaderSettings.AutomaticRecognition).
  • Utilizar el proceso iterativo de lectura de los códigos de barras (ver ThresholdMode.Iterations). Aquí hay un ejemplo simple que muestra como reconocer los códigos de barras en la imagen de colores, threshold (umbral cromático) de la cual dificil de determinar:

[VB.NET]
Private Shared Sub ScanWithIterations(ByVal fileName As String, _
                                      ByVal barcodes As BarcodeType, _
                                      ByVal expectedBarcodes As Integer, _
                                      ByVal iterationCount As Integer, _
                                      ByVal minThreshold As Integer, _
                                      ByVal maxThreshold As Integer)
    Dim barcodeImage As Image = Image.FromFile(fileName)
    Dim reader As New BarcodeReader()
    reader.Settings.ScanBarcodeTypes = barcodes
    reader.Settings.ExpectedBarcodes = expectedBarcodes
    reader.Settings.ThresholdMode = ThresholdMode.Iterations
    reader.Settings.ThresholdIterations = iterationCount
    reader.Settings.ThresholdMin = minThreshold
    reader.Settings.ThresholdMax = maxThreshold
    ' read barcodes
    Dim barcodesInfo As IBarcodeInfo() = reader.readBarcodes(barcodeImage)
    If barcodesInfo.Length = 0 Then
        Console.WriteLine("No barcodes found.")
    Else
        For i As Integer = 0 To barcodesInfo.Length - 1
            Dim inf As IBarcodeInfo = barcodesInfo(i)
            Console.WriteLine(String.Format("[{0}] {1} (Threshold: {2})", inf.BarcodeType, _
                                                                inf.Value, inf.Threshold))
        Next
    End If
    barcodeImage.Dispose()
End Sub

Private Shared Sub TestScanWithIterationsCode128orDataMatrix(ByVal fileName As String)
    ' find one Code 128 or DataMatrix barcode from 400 to 600 _
                                                           threshold (10 iterations)
    ScanWithIterations(fileName, BarcodeType.Code128 Or BarcodeType.DataMatrix, _
                                                               1, 10, 400, 600)
End Sub

[C#]
static void ScanWithIterations(string fileName, BarcodeType barcodes, int expectedBarcodes, 
    int iterationCount, int minThreshold, int maxThreshold)
{
    Image barcodeImage = Image.FromFile(fileName);
    BarcodeReader reader = new BarcodeReader();
    reader.Settings.ScanBarcodeTypes = barcodes;
    reader.Settings.ExpectedBarcodes = expectedBarcodes;
    reader.Settings.ThresholdMode = ThresholdMode.Iterations;
    reader.Settings.ThresholdIterations = iterationCount;
    reader.Settings.ThresholdMin = minThreshold;
    reader.Settings.ThresholdMax = maxThreshold;
    // read barcodes
    IBarcodeInfo[] barcodesInfo = reader.ReadBarcodes(barcodeImage);
    if (barcodesInfo.Length == 0)
    {
        Console.WriteLine("No barcodes found.");
    }
    else
    {
        for (int i = 0; i < barcodesInfo.Length; i++)
        {
            IBarcodeInfo inf = barcodesInfo[i];
            Console.WriteLine(string.Format("[{0}] {1} (Threshold: {2})", 
                                                        inf.BarcodeType, 
                                                        inf.Value, inf.Threshold));
        }
    }
    barcodeImage.Dispose();
}

static void TestScanWithIterationsCode128orDataMatrix(string fileName)
{
    // find one Code 128 or DataMatrix barcode from 400 to 600 
                                                          threshold (10 iterations)
    ScanWithIterations(fileName, BarcodeType.Code128 | BarcodeType.DataMatrix, 
                                                             1, 10, 400, 600);
}
    

 

 

¿Puedo decodoficar el código de barras del fichero TIFF multipágina?

Si, esto es el ejemplo:

[VB.NET]
Private Shared Sub ReadBarcodesFromMiltipageTiffFile(ByVal fileName As String, _
                                                     ByVal barcodes As BarcodeType)
    ' open tiff image
    Dim tiffImage As Image = Image.FromFile(fileName)
    Dim index As Guid = tiffImage.FrameDimensionsList(0)
    Dim dimension As New FrameDimension(index)
    Dim pageCount As Integer = tiffImage.GetFrameCount(dimension)
    ' create reader
    Dim reader As New BarcodeReader()
    reader.Settings.ScanBarcodeTypes = barcodes
    ' read barcodes from all pages
    For i As Integer = 0 To pageCount - 1
        ' selects a page
        tiffImage.SelectActiveFrame(dimension, i)
        ' read barcodes from page i
        Dim barcodesInfo As IBarcodeInfo() = reader.readBarcodes(tiffImage)
        ' write information
        Console.WriteLine(String.Format("Page {0}: ", i))
        If barcodesInfo.Length = 0 Then
            Console.WriteLine("No barcodes found.")
        Else
            For j As Integer = 0 To barcodesInfo.Length - 1
                Console.WriteLine(String.Format("[{0}] {1}", _
                                  barcodesInfo(j).BarcodeType, barcodesInfo(j).Value))
            Next
        End If
    Next
    ' free resources
    tiffImage.Dispose()
End Sub

[C#]
static void ReadBarcodesFromMiltipageTiffFile(string fileName, BarcodeType barcodes)
{
    // open tiff image
    Image tiffImage = Image.FromFile(fileName);
    Guid index = tiffImage.FrameDimensionsList[0];
    FrameDimension dimension = new FrameDimension(index);
    int pageCount = tiffImage.GetFrameCount(dimension);
    // create reader
    BarcodeReader reader = new BarcodeReader();
    reader.Settings.ScanBarcodeTypes = barcodes;
    // read barcodes from all pages
    for (int i = 0; i < pageCount; i++)
    {
        // selects a page
        tiffImage.SelectActiveFrame(dimension, i);
        // read barcodes from page i
        IBarcodeInfo[] barcodesInfo = reader.ReadBarcodes(tiffImage);
        // write information
        Console.WriteLine(string.Format("Page {0}: ", i));
        if (barcodesInfo.Length == 0)
        {
            Console.WriteLine("No barcodes found.");
        }
        else
        {
            for (int j = 0; j < barcodesInfo.Length; j++)
                Console.WriteLine(string.Format("[{0}] {1}", 
                                  barcodesInfo[j].BarcodeType, 
                                  barcodesInfo[j].Value));
        }
    }
    // free resources
    tiffImage.Dispose();
}

 

 

¿Puedo decodoficar el código de barras del documento PDF?

Esto es el ejemplo:

[VB.NET]
Private Shared Sub ReadBarcodesFromPdfDocument(ByVal fileName As String, _
                                               ByVal barcodes As BarcodeType)
    ' open PDF document
    Dim pdfImageViewer As New PdfImageViewer(fileName)
    ' create reader
    Dim reader As New BarcodeReader()
    reader.Settings.ScanBarcodeTypes = barcodes
    ' read barcodes from all pages
    For i As Integer = 0 To pdfImageViewer.PageCount - 1
        ' get all images names from page i
        Dim imageNames As String() = pdfImageViewer.GetImageNames(i)
        ' foreach images in page i
        For k As Integer = 0 To imageNames.Length - 1
            Console.WriteLine(String.Format("Page {0}, image {1}: ", i, _
                                                        imageNames(k)))
            Dim barcodeImage As Image
            ' get image with name imageNames[k]
            Try
                barcodeImage = pdfImageViewer.GetImage(i, imageNames(k))
            Catch e As Exception
                ' not supported image format
                Console.WriteLine(e.Message)
                Continue For
            End Try
            ' read barcodes 
            Dim barcodesInfo As IBarcodeInfo() = reader.readBarcodes(barcodeImage)
            ' write information
            If barcodesInfo.Length = 0 Then
                Console.WriteLine("No barcodes found.")
            Else
                For j As Integer = 0 To barcodesInfo.Length - 1
                    Console.WriteLine(String.Format("[{0}] {1}", _
                                      barcodesInfo(j).BarcodeType, _
                                      barcodesInfo(j).Value))
                Next
            End If
        Next
    Next
    ' free resources
    pdfImageViewer.Dispose()
End Sub

[C#]
static void ReadBarcodesFromPdfDocument(string fileName, BarcodeType barcodes)
{
    // open PDF document
    PdfImageViewer pdfImageViewer = new PdfImageViewer(fileName);
    // create reader
    BarcodeReader reader = new BarcodeReader();
    reader.Settings.ScanBarcodeTypes = barcodes;
    // read barcodes from all pages
    for (int i = 0; i < pdfImageViewer.PageCount; i++)
    {
        // get all images names from page i
        string[] imageNames = pdfImageViewer.GetImageNames(i);
        // foreach images in page i
        for (int k = 0; k < imageNames.Length; k++)
        {
            Console.WriteLine(string.Format("Page {0}, image {1}: ", i, 
                                                       imageNames[k]));
            Image barcodeImage;
            // get image with name imageNames[k]
            try
            {
                barcodeImage = pdfImageViewer.GetImage(i, imageNames[k]);
            }
            catch(Exception e)
            {
                // not supported image format
                Console.WriteLine(e.Message);
                continue;
            }
            // read barcodes 
            IBarcodeInfo[] barcodesInfo = reader.ReadBarcodes(barcodeImage);
            // write information
            if (barcodesInfo.Length == 0)
            {
                Console.WriteLine("No barcodes found.");
            }
            else
            {
                for (int j = 0; j < barcodesInfo.Length; j++)
                    Console.WriteLine(string.Format("[{0}] {1}", 
                                      barcodesInfo[j].BarcodeType, 
                                      barcodesInfo[j].Value));
            }
        }
    }
    // free resources
    pdfImageViewer.Dispose();
}

 

 

¿Puedo decodoficar el código de barras en forma vectorial del documento PDF?

Esto es el ejemplo:

[C#]
// Important: You need Vintasoft.Barcode.dll, 
//                     Vintasoft.Imaging.dll, 
//                     Vintasoft.Pdf.dll assemblies 
//                     to run this code.
static void ReadBarcodesFromVectorPDFDocument(string pdfFilename)
{
    ImageCollection pdfPages = new ImageCollection();
    pdfPages.Add(pdfFilename);
    // set RenderingSettings if needed
    pdfPages.SetRenderingSettings(new RenderingSettings(new Resolution(200, 200)));
    // foreach pages
    foreach (VintasoftImage image in pdfPages)
    {
        // get page Image
        Image pageImage = image.GetAsBitmap();
        // read barcodes
        ReadBarcodesFromImage(pageImage);
        // free resources
        pageImage.Dispose();
    }
    // free resources
    pdfPages.ClearAndDisposeItems();
}

static void ReadBarcodesFromImage(Image barcodeImage)
{
    // create barcode reader
    BarcodeReader reader = new BarcodeReader();

    // Code 39, Code128 and DatMatrix barcodes are extracted
    reader.Settings.ScanBarcodeTypes =
        BarcodeType.Code39 |
        BarcodeType.Code128 |
        BarcodeType.DataMatrix;

    // only horizontal barcodes are extracted
    reader.Settings.ScanDirection = ScanDirection.LeftToRight | 
                                    ScanDirection.RightToLeft;

    // read barcodes from image
    IBarcodeInfo[] infos = reader.ReadBarcodes(barcodeImage);

    Console.WriteLine(string.Format("Recognition time {0} ms.",
                      reader.RecognizeTime.TotalMilliseconds));

    if (infos.Length == 0)
    {
        Console.WriteLine("No barcodes found.");
    }
    else
    {
        Console.WriteLine(string.Format("{0} barcodes found:", infos.Length));
        Console.WriteLine();
        for (int i = 0; i < infos.Length; i++)
        {
            IBarcodeInfo info = infos[i];
            Console.WriteLine(string.Format("[{0}:{1}]", i, info.BarcodeType));
            Console.WriteLine(string.Format("Value:      {0}", info.Value));
            Console.WriteLine(string.Format("Confidence: {0}%", 
                                             Math.Round(info.Confidence)));
            Console.WriteLine(string.Format("Threshold:  {0}", info.Threshold));
            Console.WriteLine(string.Format("Region:     {0}", info.Region));
            Console.WriteLine();
        }
    }
} 

 

 

¿Cómo puedo poner el código de barras a documento PDF en forma vectorial?

Aqui está un ejemplo:

[VB.NET]
' Important: You need Vintasoft.Barcode.dll, 
'                     Vintasoft.Imaging.dll, 
'                     Vintasoft.Pdf.dll assemblies 
'                     to run this code.
Private Shared Sub MarkPDF(ByVal pdfFilename As String)
    ' create barcodeWriter
    Dim barcodeWriter As New BarcodeWriter()
    ' using DataMatrix 2D barcode
    barcodeWriter.Settings.Barcode = BarcodeType.DataMatrix
    ' barcode padding
    Dim padding As Single = 5

    ' open PDF document
    Dim document As New PdfDocument(pdfFilename)
    ' foreach pages
    For i As Integer = 0 To document.Pages.Count - 1
        Dim page As PdfPage = document.Pages(i)
        ' barcode value - page number
        barcodeWriter.Settings.Value = (i + 1).ToString()
        ' write barcode graphics path
        Dim barcodePath As GraphicsPath = barcodeWriter.GetBarcodeAsGraphicsPath()
        ' translate barcode to right-bottom page corner
        Using m As New Matrix()
            Dim barcodeWidth As Single = barcodePath.GetBounds().Width
            m.Translate(page.MediaBox.Right - barcodeWidth - padding, padding)
            barcodePath.Transform(m)
        End Using
        ' fill barcode path
        Using g As PdfGraphics = page.GetGraphics()
            Dim brush As New PdfBrush(Color.Black)
            g.FillPath(brush, barcodePath)
        End Using
        barcodePath.Dispose()
    Next

    ' saving document
    Dim resultFileName As String = Path.GetFileNameWithoutExtension(pdfFilename) & _
                                                                     "_marked.pdf"
    document.Save(Path.Combine(Path.GetDirectoryName(pdfFilename), resultFileName))
    ' free resources
    document.Dispose()
End Sub

[C#]
// Important: You need Vintasoft.Barcode.dll, 
//                     Vintasoft.Imaging.dll, 
//                     Vintasoft.Pdf.dll assemblies 
//                     to run this code.
static void MarkPDF(string pdfFilename)
{
    // create barcodeWriter
    BarcodeWriter barcodeWriter = new BarcodeWriter();
    // using DataMatrix 2D barcode
    barcodeWriter.Settings.Barcode = BarcodeType.DataMatrix;
    // barcode padding
    float padding = 5;

    // open PDF document
    PdfDocument document = new PdfDocument(pdfFilename);
    // foreach pages
    for (int i = 0; i < document.Pages.Count; i++)
    {
        PdfPage page = document.Pages[i];
        // barcode value - page number
        barcodeWriter.Settings.Value = (i + 1).ToString();
        // write barcode graphics path
        GraphicsPath barcodePath = barcodeWriter.GetBarcodeAsGraphicsPath();
        // translate barcode to right-bottom page corner
        using (Matrix m = new Matrix())
        {
            float barcodeWidth = barcodePath.GetBounds().Width;
            m.Translate(page.MediaBox.Right - barcodeWidth - padding, padding);
            barcodePath.Transform(m);
        }
        // fill barcode path
        using (PdfGraphics g = page.GetGraphics())
        {
            PdfBrush brush = new PdfBrush(Color.Black);
            g.FillPath(brush, barcodePath);
        }
        barcodePath.Dispose();
    }

    // saving document
    string resultFileName = Path.GetFileNameWithoutExtension(pdfFilename) + 
                                                             "_marked.pdf";
    document.Save(Path.Combine(Path.GetDirectoryName(pdfFilename), resultFileName));
    // free resources
    document.Dispose();
}

 

 

¿Cómo puedo crear mi propia suma de control en el código de barras y leer tal código de barras?

Debe utilizar ReaderSettings.VerifyBarcodeMethod para comprobar la corrección del código de barras (su suma de control). Aquí está un ejemplo que muestra como crear y reconocer Code 39 de código de barras con la suma de control por el módulo 1000:

[VB.NET]
' Generate checksum at base 1000.
Private Shared Function GenerateChecksum(ByVal value As String) As String
    Dim checkSum As Integer = 0
    For i As Integer = 0 To value.Length - 1
        checkSum += CByte(AscW(value(i))) * i
        checkSum = checkSum Mod 1000
    Next
    'result - [000..999]
    Return checkSum.ToString().PadLeft(3, "0"c)
End Function

' Testing Checksum in barcode value.
Private Shared Function TestChecksum(ByVal barcodeValue As String) As Boolean
    Dim value As String = barcodeValue.Substring(0, barcodeValue.Length - 3)
    Dim readChecksum As String = barcodeValue.Substring(barcodeValue.Length - 3)
    Return readChecksum = GenerateChecksum(value)
End Function

' Verify barcode method.
Private Shared Sub VerifyBarcodeMethod(ByVal reader As BarcodeReader, _
                                       ByVal barcodeInfo As IBarcodeInfo)
    If TestChecksum(barcodeInfo.Value) Then
        barcodeInfo.Confidence = 100
    Else
        barcodeInfo.Confidence = 0
    End If
End Sub

Private Shared Sub TestCode39Barcode(ByVal value As String)
    ' create writer
    Dim writer As New BarcodeWriter()
    writer.Settings.Barcode = BarcodeType.Code39

    ' create reader
    Dim reader As New BarcodeReader()
    reader.Settings.ScanBarcodeTypes = BarcodeType.Code39
    reader.Settings.MinConfidence = 100
    reader.Settings.AutomaticRecognition = True
    reader.Settings.ExpectedBarcodes = 1

    ' write barcode without checksum
    writer.Settings.Value = value
    Dim barcodeNoChecksumImage As Image = writer.GetBarcodeAsBitmap()

    ' write barcode with checksum
    writer.Settings.Value = value & GenerateChecksum(value)
    Dim barcodeWithMyChecksumImage As Image = writer.GetBarcodeAsBitmap()

    'set VerifyBarcodeMethod
    reader.Settings.VerifyBarcodeMethod = AddressOf VerifyBarcodeMethod

    Dim infos As IBarcodeInfo()

    'read barcodes from barcode image without checksum
    'no barcodes found
    infos = reader.readBarcodes(barcodeNoChecksumImage)
    Console.WriteLine("Scan (NoChecksum):")
    For i As Integer = 0 To infos.Length - 1
        Console.WriteLine(infos(i).Value)
    Next

    'read barcodes from barcode image with checksum
    'found one barcode
    infos = reader.readBarcodes(barcodeWithMyChecksumImage)
    Console.WriteLine("Scan (MyChecksum):")
    For i As Integer = 0 To infos.Length - 1
        Console.WriteLine(infos(i).Value)
    Next
End Sub

[C#]
// Generate checksum at base 1000.
static string GenerateChecksum(string value)
{
    int checkSum = 0;
    for (int i = 0; i < value.Length; i++)
    {
        checkSum += ((byte)value[i]) * i;
        checkSum %= 1000;
    }
    //result - [000..999]
    return checkSum.ToString().PadLeft(3, '0');
}

// Testing Checksum in barcode value.
static bool TestChecksum(string barcodeValue)
{
    string value = barcodeValue.Substring(0, barcodeValue.Length - 3);
    string readChecksum = barcodeValue.Substring(barcodeValue.Length - 3);
    return readChecksum == GenerateChecksum(value);
}

// Verify barcode method.
static void VerifyBarcodeMethod(BarcodeReader reader, IBarcodeInfo barcodeInfo)
{
    if (TestChecksum(barcodeInfo.Value))
        barcodeInfo.Confidence = 100;
    else
        barcodeInfo.Confidence = 0;
}

static void TestCode39Barcode(string value)
{
    // create writer
    BarcodeWriter writer = new BarcodeWriter();
    writer.Settings.Barcode = BarcodeType.Code39;

    // create reader
    BarcodeReader reader = new BarcodeReader();
    reader.Settings.ScanBarcodeTypes = BarcodeType.Code39;
    reader.Settings.MinConfidence = 100;
    reader.Settings.AutomaticRecognition = true;
    reader.Settings.ExpectedBarcodes = 1;

    // write barcode without checksum
    writer.Settings.Value = value;
    Image barcodeNoChecksumImage = writer.GetBarcodeAsBitmap();

    // write barcode with checksum
    writer.Settings.Value = value + GenerateChecksum(value);
    Image barcodeWithMyChecksumImage = writer.GetBarcodeAsBitmap();

    //set VerifyBarcodeMethod
    reader.Settings.VerifyBarcodeMethod = VerifyBarcodeMethod;

    IBarcodeInfo[] infos;

    //read barcodes from barcode image without checksum
    //no barcodes found
    infos = reader.ReadBarcodes(barcodeNoChecksumImage);
    Console.WriteLine("Scan (NoChecksum):");
    for (int i = 0; i < infos.Length; i++)
        Console.WriteLine(infos[i].Value);

    //read barcodes from barcode image with checksum
    //found one barcode
    infos = reader.ReadBarcodes(barcodeWithMyChecksumImage);
    Console.WriteLine("Scan (MyChecksum):");
    for (int i = 0; i < infos.Length; i++)
        Console.WriteLine(infos[i].Value);
}

 

 

¿Cómo puedo dibujar el código de barras de parámetros dados en la resolución necesaria (DPI)?

[VB.NET]
Private Shared Function DrawBarcode(ByVal barcode As BarcodeType, _
                                    ByVal value As String, _
                                    ByVal resolution As Single, _ 
ByVal width As Single, ByVal height As Single, ByVal units As UnitOfMeasure) As Image
    Dim writer As New BarcodeWriter()
    writer.Settings.Barcode = barcode
    writer.Settings.Value = value
    writer.Settings.Resolution = resolution
    writer.Settings.SetWidth(width, units)
    writer.Settings.SetHeight(height, units)
    Return writer.GetBarcodeAsBitmap()
End Function

Private Shared Sub TestDrawBarcode(ByVal fileName As String)
    ' Draw barcode 6x2 cm in 600 DPI
    Dim barcodeImage As Image = DrawBarcode(BarcodeType.Code128, "TESTBARCODE", _
                                          600, 6, 2, UnitOfMeasure.Centimeters)
    barcodeImage.Save(fileName)
    barcodeImage.Dispose()
End Sub

[C#]
static Image DrawBarcode(BarcodeType barcode, string value, float resolution, 
                                                            float width, 
                                                            float height, 
                                                            UnitOfMeasure units)
{
    BarcodeWriter writer = new BarcodeWriter();            
    writer.Settings.Barcode = barcode;
    writer.Settings.Value = value;
    writer.Settings.Resolution = resolution;
    writer.Settings.SetWidth(width, units);
    writer.Settings.SetHeight(height, units);
    return writer.GetBarcodeAsBitmap();
}

static void TestDrawBarcode(string fileName)
{
    // Draw barcode 6x2 cm in 600 DPI
    Image barcodeImage = DrawBarcode(BarcodeType.Code128, "TESTBARCODE", 
                                  600, 6, 2, UnitOfMeasure.Centimeters);
    barcodeImage.Save(fileName);
    barcodeImage.Dispose();
}

 

 

¿Qué compresiones y espacios de color de los recursos de imagen PDF son compatibles con este .NET lector de código de barras?

Tipos de compresión apoyados:

  • ZIP
  • JPEG (DeviceGray, DeviceRGB)
  • CCITT3
  • CCITT4
  • LZW
  • Run Length

Espacios de color apoyados:

  • DeviceGray
  • DeviceRGB
  • DeviceCMYK
  • Indexed