Meinungen


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

Allgemeine Fragen:

 

Distribution:

 

Vertrieb:

 

Programmierung:

 

Bilder:

 

 

Für welche Zwecke kann ich die VintaSoftBarcode.NET SDK benutzen?

Diese Bibliothek erlaubt das Lesen und Schreiben von 1D-, Post- und 2D-Barcodes in digitale Bilder und PDF-Dateien Bild Ressourcen.

 

 

Was beinhaltet die Bibliothek?

Die Bibliothek beinhaltet:

  • VintaSoft.Barcode Komponente - eine 100% .NET-komponente (Vintasoft.Barcode.dll/Vintasoft.Wpf.Barcode.dll Datei)
  • Dokumentation in CHM-Format (Documentation\Vintasoft.Barcode.chm Datei)
  • Demo Programmen (.exe Dateien in Bin\vX.X\ Mappe)
  • Kode-Beispiele für MS Visual Basic .NET, MS Visual C#, ASP.NET (Dateien in /Examples Mappe)
  • Test-Bilder mit Barkodes (Dateien in /Images Mappe)

 

 

In welchen Programmiersprachen kann ich die VintaSoftBarcode.NET SDK benutzen?

Mit der Entwickler-Lizenz oder der Site-Lizenz können sie die Komponente nutzen in:

  • Microsoft Visual Studio .NET : Visual Basic, Visual C#, Visual C++, Visual J#
  • Borland Delphi 8.0, Borland C# Builder, Borland C++ BuilderX
  • anderen Sprachen, die sind .Net Framework kompatibel.

Mit der Server-Lizenz können sie die Komponente nutzen in:

  • Intranet / internet Programmen auf Server-Seite (ASP.NET oder PHP)

 

 

Welche Beschränkungen hat die unregistrierte Version der Komponente?

Die Testversion hat folgende Beschränkungen:

  • NAG Bildschirm ist am Anfang von jeder Barcode-Lesung Prozess in Bin/X.X/Vintasoft.Barcode.dll oder Vintasoft.Wpf.Barcode.dll gezeigt.
  • Barkode-Wert ist durch den "*DEMO*" Zeile für QR Code, GS1 Databar und Intelligent Mail Barkode Types ersetzt.
  • Einige Symbole aus den gelesenen Barcode werden von '*' in Bin/X.X/NoNagScreen/Vintasoft.Barcode.dll oder Vintasoft.Wpf.Barcode.dll ersetzt.
  • Barcodes können nur aus der erste Seite der PDF-Dokument gelesen werden.
  • Wasserzeichen wird zu alle erzeugten Barkodes hinzugefügt.

 

 

Ich habe eine Frage oder Problem. Was kann ich tun?

Die Antworten auf die meisten Fragen stehen bestimmt in der Dokumentation zur Komponente oder in den FAQ. Wenn Sie können nicht antwort zu Ihre Frage finden, dann schreiben Sie bitte an den technischen Support.

 

 

Welche Dateien muss ich in das Distributionpaket meines Programms einbinden?

Sie sollen das Distributionpaket Ihres Programm nur mit Vintasoft.Barcode.dll/Vintasoft.Wpf.Barcode.dll Datei ergänzen.

 

 

Kann ich die Vintasoft.Barcode.dll oder Vintasoft.Wpf.Barcode.dll Datei zusammen mit meiner Anwendung ohne zusätzliche Lizenzzahlungen verbreiten?

Ja, Sie können die Vintasoft.Barcode.dll/Vintasoft.Wpf.Barcode.dll Datei zusammen mit ihrer Anwendung verbreiten. Sie zahlen nur für die primäre Registrierung. Die Site-Lizenz hat keine Beschränkungen zur Verbreitung. Die Entwickler-Lizenz hat Beschränkungen zur Verbreitung. Server-Lizenz Verbreitung ist nicht lizenzfrei. Bitte lesen Sie das Lizenzabkommen für ausführliche Informationen.

 

 

Was soll ich tun, wenn meine Programm-Verbreitung-Wert mit Entwickler-Lizenz kann 100 Exemplare in diesem Jahr überschreiten?

Wenn Sie die Entwickler-Lizenz besitzen und Ihre Programm-Verbreitung-Wert kann 100 Exemplare in diesem Jahr überschreiten, müssen Sie an unsere Verkaufsabteilung wenden. Sie werden die Möglichkeit bekommen, Ihre Entwickler-Lizenz durch die Site-Lizenz mit 30% Rabatt ersetzen oder zusätzliche Entwickler-Lizenz zu kaufen.

 

 

Was ist der Unterschied zwischen 1-Entwickler-Lizenz und Site-Lizenz?

  • 1-Entwickler-Lizenz muss von nur einem Programmierer in der Softwareentwicklung benutzt werden, dessen Name ist in die Lizenzdaten angegebenen.
  • Site-Lizenz muss in der Softwareentwicklung innerhalb eine Firma (bei beliebiger Programmierer) benutzt werden, dessen Benennung ist in die Lizenzdaten angegebenen.
  • 1-Entwickler-Lizenz kann auf jedem PC und auf jedem physikalischen Adresse in der Softwareentwicklung benutzt werden.
  • Site-Lizenz kann auf jedem PC nur auf einem physikalischen Adresse (innerhalb nur einem Büro) in der Softwareentwicklung benutzt werden.
  • 1-Entwickler-Lizenz erlaubt eine lizenzfreie Verteilung einer Programm, die SDK Redistributable Dateien integriert, bis zu 100 Kopien in einem Jahr.
  • Site-Lizenz erlaubt eine unbegrenzte lizenzfreie Verteilung einer Programm, die SDK Redistributable Dateien integriert.

 

 

Wie kann man die "Standard Edition"-Lizenz durch "Standard + WPF Edition"-Lizenz ersetzen?

Bitte an die Verkaufsabteilung wenden. Sie werden die Möglichkeit bekommen die äquivalent "Standard + WPF edition"-Lizenz mit 70% Rabatt zu kaufen.

 

 

Gibt es Unterschiede in der Nutzung meiner Anwendung auf Desktop PC oder auf einem Server?

Ja, es gibt Unterschiede. Um diese zu verstehen, bitte lesen Sie die Sektion "Deploying" in Dokumentation für dieses Produkt.

Begriffe: Desktop PC – Betriebssystem Windows XP, Vista, 7 installiert. Server – Betriebssystem Windows Server 2000, 2003, 2008 installiert.

 

 

Wie kann ich die Barkode-Lesegeschwindigkeit maximieren?

Hier sind einige Tipps, die können Ihnen helfen die Barkode-Lesegeschwindigkeit zu maximieren:

  • Erkennen Sie nur die notwendige Barkode-Typen (siehe Settings.ScanBarcodeTypes property). Das kann erhöhen die Barkode-Lesegeschwindigkeit bis zu 2 mal.
  • Erkennen Sie Barkodes nur im notwendige Richtungen (siehe Settings.ScanDirection property). Das kann erhöhen die Barkode-Lesegeschwindigkeit bis zu 20%.
  • Finden und verwenden Sie optimal Threshold-Wert für Ihre Farbbilder (siehe Settings.Threshold property), nutzen Sie keine automatische Threshold-Modus (siehe Settings.ThresholdMode property), sofern dies möglich ist. Das kann erhöhen die Barkode-Lesegeschwindigkeit bis zu 10%.
  • Setzen Sie ExpectedBarcodes Eigenschaft ein, wenn Number von Barkodes bekannt ist.
  • Verwenden Sie nur die Schwarz-Weiss-Bilder mit Barkodes (wenn es ist möglich). Das kann erhöhen die Barkode-Lesegeschwindigkeit bis zu 20%.
  • Deaktivieren Sie Settings.RemovePeas Funktion, wenn das Bild mit Barcodes hat annehmbare Qualität. Das kann erhöhen die Barkode-Lesegeschwindigkeit bis zu 5%.
  • Verwenden Sie ScanDirection.Angle45and135 Richtung nicht, wenn Sie nicht nutzen niedrige und breite Barcodes die auf 30-60 Grad gedreht sind. Das kann steigern Barcode-Lesegeschwindigkeit bis zu 30%.
  • Deaktivieren Settings.SearchDistortedDataMatrixBarcodes Funktion, wenn Ihre Data Matrix Barkodes haben keine dreidimensional Verzerrung. Dies kann steigern DataMatrix Barcode-Lesegeschwindigkeit bis zu 50%.

 

 

Wie kann ich bekommen das stabilste Barcode Erkennung System?

Hier ist die Liste von Schritte, die sollen Ihnen helfen eine stabile Barcode-Erkennung System zu schaffen:

  • Bilden Sie eine Sammlung von Test-Bilder mit Barcodes (mindestens 10 Bilder).
    Wenn Sie die Bilder von einem Scanner bekommen - stellen die Sammlung von Test-Bilder mit unterschiedlichen Helligkeit und Kontrast.
  • Lesen Sie die Barcodes aus Test-Bilder mit unterschiedlichen Threshold und berechnen Sie der minimale und durchschnittliche Wert von ReadingQuality Eigenschaft.
  • Wählen Sie Rahmen die geben Ihnen der maximale durchschnittliche Wert der ReadingQuality Eigenschaft
  • Empfohlene minimale durchschnittliche Wert von ReadingQuality property ist 0,75 - so Sie können das stabilste Barcode-Erkennung System bekommen.
Wir empfehlen nicht die Bildern mit Barcodes bearbeiten (deskew, despeckle, etc) vor der Barcode-Erkennung, da diese können erheblich Qualität der Erkennung zu reduzieren.

 

 

Haben Sie einige Empfehlungen für die Schaffung von 1D-Barcodes?

Code 39 und Code 128 sind die meisten stabilen linearen Barcodes für Schäden und Verzerrung.
Die meist kompakte Barcode ist Code 128 (beide Zahlen- und Symbol-Daten).

Empfehlungen für die 1D Barcode-Erstellung:

  • Erstellen 1D Barcodes mit Zellgröße (Einzel-weiten bar) mindestens 2 Pixel
  • Je mehr Barcode-Höhe, desto besser Erkennung-Qualität
  • Verwenden Sie "padding" für Barcodes mit der Größe nicht weniger als 4 Zellgröße
  • Verwenden Sie die optionale Prüfsumme für Barcodes die Standard-Prüfsumme fehlen (Code 39, Interleaved 2of5, Standard 2of5). Das wird Ihnen helfen die Fehler in Anerkennung von Barcodes aus Bildern mit niedriger Qualität zu vermeiden.

 

 

Haben Sie einige Empfehlungen für die Schaffung von 2D-Barcodes?

Data Matrix ist die meist stabile 2D-Barcode für Schäden und Verzerrung. Aztec ist das kompakteste, dann kommen DataMatrix, QR-Code und PDF417.
Alle 2D-Barcodes können enthalten Text- und Binär-Daten und können renovieren sein bis zu 30% der beschädigten Daten mit Reed-Solomon-Fehlerkorrektur-Algorithmus.

Empfehlungen für die 2D Barcode-Erstellung:

  • Erstellen Sie Aztec, DataMatrix und QR-Code Barkodes mit Zellgröße mindestens 3 Pixel
  • Erstellen Sie PDF417 Barkode mit Zellgröße mindestens 2 Pixel
  • Verwenden Sie "padding" für PDF417 und Data Matrix mit der Größe nicht weniger als 2 Zellgröße
  • Verwenden Sie "padding" für QR-Code mit der Größe nicht weniger als 4 Zellgröße

 

 

Hat die Bibliothek Mehrströmigkeit(Multithreading) unterstützung?

Ja, Mehrströmigkeit(Multithreading) ist seit Version 5.0 unterstützt. Main-Algorithmus kann zur N-Threads skaliert werden.

 


 

Wie kann ich erkennen Barkode in farbiges Bild mit geringer Qualität?

Es gibt zwei Möglichkeiten:

  • Sie sollen das "Automatic recognition" Regime benutzen (siehe ReaderSettings.AutomaticRecognition).
  • Sie sollen das "Iteration" Regime benutzen (siehe ThresholdMode.Iterations). Hier ist ein einfaches Beispiel, der zeigt wie kann man die Barkodes aus ein Farbbild erkennen, wessen Threshold ist schwierig zu lokalisieren:

[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);
}
    

 

 

Wie kann ich Barcodes aus mehrseitige TIFF Datei dekodieren?

Hier ist ein einfacher Code:

[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();
}

 

 

Wie kann ich Barcodes aus PDF Datei decodieren?

Hier ist ein einfacher Code:

[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();
}

 

 

Wie kann ich Vektor-Form-Barcode aus PDF Datei decodieren?

Hier ist ein einfacher Code:

[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();
        }
    }
} 

 

 

Wie kann ich Barkode zu PDF-Dokument in Vektor-Form schreiben?

Hier ist ein Beispiel:

[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();
}

 

 

Wie kann ich meine eigene Abstimmsumme in Barcode Leser/Schreiber benutzen?

Sie müssen ReaderSettings.VerifyBarcodeMethod Eigenschaft benutzen um Barkode-Richtigkeit(Abstimmsumme) zu prüfen. Hier ist ein einfacher Code, der illustriert wie kann man Erstellen und Lesen Code 39 Barkodes mit Abstimmsumme an der Basis 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);
}

 

 

Wie kann ich Barkode mit bestimmten Größe und Auflösung generieren?

[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();
}

 

 

Welche Kompressionen und Farbräumen von PDF Dokument Bild Ressourcen sind unterstützt in dieser .NET Barcode Leser?

Unterstützte Kompressionen:

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

Unterstützte Farbräume:

  • DeviceGray
  • DeviceRGB
  • DeviceCMYK
  • Indexed