Info sobre o produto
RecomendaçõesFirst 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 |
VintaSoftBarcode.NET SDK - FAQQuestões gerais:
Redistribuição:
Programação:
Para que propósitos posso usar o VintaSoftBarcode.NET Library?A biblioteca permite ler e escrever 1D, postais e 2D barcodes de imagens digitais e arquivos PDF.
De que partes consiste a biblioteca?A biblioteca contém:
Em que linguagem de programação posso usar o VintaSoftBarcode.NET Library?Com uma licença desenvolvedor ou licença para várias estações de trabalho você pode usar o componente em:
Com a licença servidor você pode usar o componente em:
Que restrições tem os usuários não registrados?A versão não registrada tem as seguintes restrições:
Estou com problemas. O que devo fazer?As respostas para a maior parte as questões pode se encontrada na documentação ou neste FAQ.
Que arquivos eu preciso incluir na instalação do meu programa?Você precisa incluir apenas um arquivo: Vintasoft.Barcode.dll. Este arquivo precisa estar localizado no mesmo diretório que o executável que referencia este. Verifique se a versão que você vai distribuir seja a mesma que você usou para compilar o programa.
Posso redistribuir o Vintasoft.Barcode.dll com minha aplicação sem precisar pagar royalties?Sim, este componente é livre de royalties. Você paga apenas pelo registro uma única vez. Apenas o Vintasoft.Barcode.dll pode ser distribuído junto com sua aplicação. A licença Individual de Desenvolvedor (Single Developer) tem limitação de distribuição. Por favor, leia o contrato de licença para mais informações.
Como posso maximizar a velocidade de leitura do código de barras?Aqui algumas dicas que permitem maximizar a velocidade de leitura do código de barras:
Como posso obter o mais estável sistema de escrita e reconhecimento de código de barras?Aqui está uma lista de passos que ajudam você a criar um sistema de leitura de código de barras estável:
Existe alguma recomendação para a criação de códigos de barras 1D ou posterior leitura?O Code 39 e Code 128 são os códigos de barras lineares mais estáveis para evitar danos e distorções.
Existe alguma recomendação para a criação de códigos de barras 2D ou posterior leitura?O Data Matrix é o código de barras 2D mais estável para evitar danos e distorções. Aztec é o mais compacto. Depois vem o DataMatrix, QR e PDF417.
A biblioteca suporta multithreading?Sim, o multi-threading é suportado desde a versão 5.0. O algoritmo principal pode ser escalado em N threads.
Como reconhecer um código de barras em uma imagem colorida com baixa qualidade?Existem dois jeitos:
[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.ThresholdIterations = iterationCount
reader.Settings.Threshold1D = minThreshold
reader.Settings.Threshold2D = 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.ThresholdIterations = iterationCount;
reader.Settings.Threshold1D = minThreshold;
reader.Settings.Threshold2D = 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);
}
Como posso ler código de barras em um arquivo multi-páginas TIFF?Aqui um exemplo simples:
[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();
}
Como posso ler código de barras em um documento PDF?Aqui um exemplo simples:
[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();
}
Como posso escrever código de barras em um document PDF no vector form?Aqui está um exemplo:
[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.Code128
' 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();
}
Como posso usar meu checksum em um leitor/gerador de código de barras?Você precisa usar as propriedades ReaderSettings.VerifyBarcodeMethod para validar (conferir o checksum) o código de barras.
[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);
}
Como posso desenhar um código de barras com tamanho e resolução específicas?
[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();
}
|