You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
342 lines
15 KiB
342 lines
15 KiB
Imports System.Windows.Forms
|
|
Imports Gnostice.Documents.Controls.WinForms
|
|
Imports Gnostice.Documents
|
|
|
|
Public Class frmScan
|
|
|
|
Dim licenseKey As String = "530B-ED36-D5D0-CB1D-DD48-B443-AE22-6E19-0264-3D59-FA7A-9FAD"
|
|
Dim barcode As SoftekBarcodeNet.BarcodeReader
|
|
Dim nBarCodes As Integer
|
|
|
|
Sub New()
|
|
|
|
' Dieser Aufruf ist für den Designer erforderlich.
|
|
InitializeComponent()
|
|
|
|
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
|
|
Try
|
|
Framework.ActivateLicense(licenseKey)
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message)
|
|
End Try
|
|
initBarcode()
|
|
End Sub
|
|
|
|
Private Sub frmScan_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|
Me.ListBox1.Items.Clear()
|
|
Dim di As New IO.DirectoryInfo("E:\Software-Projekte\EDOKA\__Barcode\DOcs")
|
|
Dim diar1 As IO.FileInfo() = di.GetFiles()
|
|
Dim dra As IO.FileInfo
|
|
|
|
'list the names of all files in the specified directory
|
|
For Each dra In diar1
|
|
If UCase(dra.Extension) = ".PDF" Then ListBox1.Items.Add(dra.Name)
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
|
|
Me.DocumentViewer1.LoadDocument("E:\Software-Projekte\EDOKA\__Barcode\DOcs\" + Me.ListBox1.SelectedItem)
|
|
End Sub
|
|
|
|
|
|
Private Sub TSBtnLast_Click(sender As Object, e As EventArgs) Handles TSBtnLast.Click
|
|
If DocumentViewer1.IsDocumentLoaded Then DocumentViewer1.LastPage()
|
|
End Sub
|
|
|
|
Private Sub TSBtnPrevious_Click(sender As Object, e As EventArgs) Handles TSBtnPrevious.Click
|
|
If DocumentViewer1.IsDocumentLoaded Then DocumentViewer1.PreviousPage()
|
|
End Sub
|
|
|
|
Private Sub TSBtnNext_Click(sender As Object, e As EventArgs) Handles TSBtnNext.Click
|
|
If DocumentViewer1.IsDocumentLoaded Then DocumentViewer1.NextPage()
|
|
End Sub
|
|
|
|
Private Sub TSBtnFirst_Click(sender As Object, e As EventArgs) Handles TSBtnFirst.Click
|
|
If DocumentViewer1.IsDocumentLoaded Then DocumentViewer1.FirstPage()
|
|
End Sub
|
|
|
|
Private Sub tsZoomOut_Click(sender As Object, e As EventArgs) Handles tsZoomOut.Click
|
|
If DocumentViewer1.IsDocumentLoaded Then
|
|
DocumentViewer1.ZoomOut()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub tsZoomIn_Click(sender As Object, e As EventArgs) Handles tsZoomIn.Click
|
|
If DocumentViewer1.IsDocumentLoaded Then
|
|
DocumentViewer1.ZoomIn()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub txtZoom_Click(sender As Object, e As EventArgs)
|
|
|
|
End Sub
|
|
|
|
Private Sub tsFitPage_Click(sender As Object, e As EventArgs) Handles tsFitPage.Click
|
|
If DocumentViewer1.IsDocumentLoaded Then
|
|
Me.DocumentViewer1.Zoom.ZoomMode = ZoomMode.FitPage
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub btnFirstPage_Click(sender As Object, e As EventArgs)
|
|
|
|
End Sub
|
|
|
|
Private Sub tsFitWidth_Click(sender As Object, e As EventArgs) Handles tsFitWidth.Click
|
|
If DocumentViewer1.IsDocumentLoaded Then
|
|
DocumentViewer1.Zoom.ZoomMode = ZoomMode.FitWidth
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
|
|
|
|
Results.Text = ""
|
|
'DocumentViewer1.CloseDocument()
|
|
nBarCodes = barcode.ScanBarCode("E:\Software-Projekte\EDOKA\__Barcode\DOcs\" + ListBox1.SelectedItem)
|
|
getResults()
|
|
End Sub
|
|
|
|
Private Sub getResults()
|
|
Dim i As Integer
|
|
Dim nDirection As Integer
|
|
Dim nPage As Integer
|
|
Dim rect As System.Drawing.Rectangle
|
|
|
|
If nBarCodes <= -6 Then
|
|
SetText("License key error: either an evaluation key has expired or the license key is not valid for processing pdf documents")
|
|
ElseIf nBarCodes < 0 Then
|
|
SetText("ScanBarCode returned error number " & nBarCodes)
|
|
SetText("Last Softek Error Number = " & barcode.GetLastError())
|
|
SetText("Last Windows Error Number = " & barcode.GetLastWinError())
|
|
End If
|
|
|
|
If nBarCodes = 0 Then
|
|
SetText("Sorry - no barcodes were found in this image")
|
|
End If
|
|
|
|
For i = 1 To nBarCodes
|
|
SetText("Barcode " & i & ":")
|
|
|
|
SetText("Value = " & barcode.GetBarString(i))
|
|
|
|
SetText("Type = " & barcode.GetBarStringType(i))
|
|
|
|
nDirection = barcode.GetBarStringDirection(i)
|
|
If nDirection = 1 Then
|
|
SetText("Direction = Left to Right")
|
|
Else
|
|
If nDirection = 2 Then
|
|
SetText("Direction = Top to Bottom")
|
|
Else
|
|
If nDirection = 4 Then
|
|
SetText("Direction = Right to Left")
|
|
Else
|
|
If nDirection = 8 Then
|
|
SetText("Direction = Bottom to Top")
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
nPage = barcode.GetBarStringPage(i)
|
|
rect = barcode.GetBarStringRect(i)
|
|
SetText("Page = " & nPage)
|
|
SetText("Top Left = (" & rect.X & "," & rect.Y & ")")
|
|
SetText("Bottom Right = (" & (rect.X + rect.Width) & "," & (rect.Y + rect.Height) & ")")
|
|
SetText("")
|
|
|
|
Next i
|
|
|
|
GC.Collect()
|
|
End Sub
|
|
|
|
Delegate Sub SetTextCallback(ByVal [text] As String)
|
|
|
|
Private Sub SetText(ByVal [text] As String)
|
|
|
|
' InvokeRequired required compares the thread ID of the
|
|
' calling thread to the thread ID of the creating thread.
|
|
' If these threads are different, it returns true.
|
|
If Me.Results.InvokeRequired Then
|
|
Dim d As New SetTextCallback(AddressOf SetText)
|
|
Me.Invoke(d, New Object() {[text]})
|
|
Else
|
|
Me.Results.Text += [text] + vbNewLine
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub initBarcode()
|
|
' For the purposes of this demo we first give a path to the installation folder
|
|
' and the class adds either x86 or x64 to the end and tries to load the other dll files.
|
|
' If that fails (perhaps this project has been moved) then we give no path and the class
|
|
' assumes that the dll files will be somewhere on the PATH.
|
|
'
|
|
' In this project we give the path to the Softek DLL files when we create the BarcodeReader class
|
|
' Another way is to include the following files with your project:
|
|
' SoftekBarcodeDLL.dll
|
|
' SoftekBarcode64DLL.dll
|
|
' DebenuPDFLibraryDLLXXXX.dll
|
|
' DebenuPDFLibrary64DLLXXXX.dll
|
|
|
|
barcode = New SoftekBarcodeNet.BarcodeReader("E:\Software-Projekte\EDOKA\__Barcode\Barcode.com\bin")
|
|
|
|
' Enter your license key here
|
|
' You can get a trial license key from sales@bardecode.com
|
|
' Example:
|
|
' barcode.LicenseKey = "MY LICENSE KEY"
|
|
|
|
' Turn on the barcode types you want to read.
|
|
' Turn off the barcode types you don't want to read (this will increase the speed of your application)
|
|
barcode.ReadCode128 = True
|
|
barcode.ReadCode39 = True
|
|
barcode.ReadCode25 = True
|
|
barcode.ReadEAN13 = True
|
|
barcode.ReadEAN8 = True
|
|
barcode.ReadUPCA = True
|
|
barcode.ReadUPCE = True
|
|
barcode.ReadCodabar = True
|
|
barcode.ReadPDF417 = True
|
|
barcode.ReadDataMatrix = True
|
|
barcode.ReadDatabar = True
|
|
barcode.ReadMicroPDF417 = False
|
|
barcode.ReadQRCode = True
|
|
|
|
' Databar Options is a mask that controls which type of databar barcodes will be read and whether or not
|
|
' the software will look for a quiet zone around the barcode.
|
|
' 1 = 2D-Linkage flag (handle micro-PDf417 barcodes as supplementary data - requires ReadMicroPDF417 to be true).
|
|
' 2 = Read RSS14
|
|
' 4 = Read RSS14 Stacked
|
|
' 8 = Read Limited
|
|
' 16 = Read Expanded
|
|
' 32 = Read Expanded Stacked
|
|
' 64 = Require quiet zone
|
|
barcode.DatabarOptions = 255
|
|
|
|
' If you want to read more than one barcode then set Multiple Read to 1
|
|
' Setting MutlipleRead to False will make the recognition faster
|
|
barcode.MultipleRead = True
|
|
|
|
' If you know the max number of barcodes for a single page then increase speed by setting MaxBarcodesPerPage
|
|
barcode.MaxBarcodesPerPage = 0
|
|
|
|
' In certain conditions (MultipleRead = false or MaxBarcodesPerPage = 1) the SDK can make fast scan of an image before performing the normal scan. This is useful if only 1 bar code is expected per page.
|
|
barcode.UseFastScan = True
|
|
|
|
' If MultipleRead = false or MaxBarcodesPerPage = 1 and the bar code is always closer to the top of a page then set BarcodesAtTopOfPage to True to increase speed.
|
|
barcode.BarcodesAtTopOfPage = False
|
|
|
|
|
|
' Noise reduction takes longer but can make it possible to read some difficult barcodes
|
|
' When using noise reduction a typical value is 10 - the smaller the value the more effect it has.
|
|
' A zero value turns off noise reduction.
|
|
' barcode.NoiseReduction = 0
|
|
|
|
' You may need to set a small quiet zone if your barcodes are close to text and pictures in the image.
|
|
' A value of zero uses the default.
|
|
barcode.QuietZoneSize = 0
|
|
|
|
' LineJump controls the frequency at which scan lines in an image are sampled.
|
|
' The default is 1.
|
|
barcode.LineJump = 1
|
|
|
|
' You can restrict your search to a particular area of the image if you wish.
|
|
' This example limits the search to the upper half of the page
|
|
' Dim scanArea As System.Drawing.Rectangle
|
|
' scanArea = New System.Drawing.Rectangle(0, 0, 100, 50)
|
|
' barcode.SetScanRect(scanArea, 1)
|
|
|
|
' Set the direction that the barcode reader should scan for barcodes
|
|
' The value is a mask where 1 = Left to Right, 2 = Top to Bottom, 4 = Right To Left, 8 = Bottom to Top
|
|
barcode.ScanDirection = 15
|
|
|
|
' Set the page number to read from in a multi-page TIF file. The default is 0, which will make the
|
|
' toolkit check every page.
|
|
' barcode.PageNo = 1
|
|
|
|
' SkewTolerance controls the angle of skew that the barcode toolkit will tolerate and ranges from 0 to 5 (45 degrees)
|
|
' Note that from version 7.6.1 the SDK is able to read some skewed barcodes with this setting. See below.
|
|
barcode.SkewTolerance = 0
|
|
|
|
' Read most skewed linear barcodes without the need to set SkewTolerance. Currently applies to Codabar, Code 25, Code 39 and Code 128 barcodes only.
|
|
barcode.SkewedLinear = True
|
|
|
|
' Read most skewed datamatrix barcodes without the need to set SkewTolerance
|
|
barcode.SkewedDatamatrix = True
|
|
|
|
|
|
' ColorProcessingLevel controls how much time the toolkit will searching a color image for a barcode.
|
|
' The default value is 2 and the range of values is 0 to 5. If ColorThreshold is non-zero then
|
|
' ColorProcessingLevel is effectively set to 0.
|
|
barcode.ColorProcessingLevel = 2
|
|
|
|
' MaxLength and MinLength can be used to specify the number of characters you expect to
|
|
' find in a barcode. This can be useful to increase accuracy or if you wish to ignore some
|
|
' barcodes in an image.
|
|
barcode.MinLength = 4
|
|
barcode.MaxLength = 999
|
|
|
|
' When the toolkit scans an image it records the number of hits it gets for each barcode that
|
|
' MIGHT be in the image. If the hits recorded for any of the barcodes are >= PrefOccurrence
|
|
' then only these barcodes are returned. Otherwise, any barcode whose hits are >= MinOccurrence
|
|
' are reported. If you have a very poor quality image then try setting MinOccurrence to 1, but you
|
|
' may find that some false positive results are returned.
|
|
' barcode.MinOccurrence = 2
|
|
' barcode.PrefOccurrence = 4
|
|
|
|
' Read Code 39 barcodes in extended mode
|
|
' barcode.ExtendedCode39 = True
|
|
|
|
' Barcode string is numeric
|
|
' barcode.ReadNumeric = True
|
|
|
|
' Set a regular expression for the barcode
|
|
' barcode.Pattern = "^[A-Z]{2}[0-9]{5}$"
|
|
|
|
' If you are scanning at a high resolution and the spaces between bars are
|
|
' larger than 1 pixel then set MinSpaceBarWidth to 2 and increase your read rate.
|
|
' barcode.MinSpaceBarWidth = 2
|
|
|
|
' MedianFilter is a useful way to clean up higher resolution images where the black bars contain white dots
|
|
' and the spaces contain black dots. It does not work if the space between bars is only 1 pixel wide.
|
|
barcode.MedianFilter = False
|
|
|
|
' ReportUnreadBarcodes can be used to warn of the presence of a barcode on a page that the SDK has not been able to decode.
|
|
' It currently has the following important limitations:
|
|
' 1. An unread linear barcode will only be reported if no other barcode was found in the same page.
|
|
' 2. The height of the area for an unread linear barcode will only cover a portion of the barcode.
|
|
' 3. Only 2-D barcodes that fail to error correct will be reported.
|
|
' 4. The barcode type and value will both be set to UNREAD for all unread barcodes.
|
|
' 5. The reporting of unread linear barcodes takes no account of settings for individual barcode types. For example, if ReadCode39 is True and
|
|
' an image contains a single Code 39 barcode then this will be reported as an unread barcode.
|
|
' 6. 2-D barcodes are only reported as unread if the correct barcode types have been enabled.
|
|
' 7. Not all unread barcodes will be detected.
|
|
'
|
|
' The value is a mask with the following values: 1 = linear barcodes, 2 = Datamatrix, 4 = QR-Code, 8 = PDF-417
|
|
barcode.ReportUnreadBarcodes = 0
|
|
|
|
' Time out for reading a barcode from a page in ms. Note that this does not include the time to load the page.
|
|
' 0 means no time out.
|
|
barcode.TimeOut = 5000
|
|
|
|
|
|
|
|
' Flags for handling PDF files
|
|
' PdfImageOnly defaults to true and indicates that the PDF documents are simple images.
|
|
barcode.PdfImageOnly = True
|
|
|
|
' PdfImageExtractOptions is no longer required in version 8 of the SDK but is retained for future possible use.
|
|
' barcode.PdfImageExtractOptions = 0
|
|
|
|
' The PdfImageRasterOptions mask controls how images are rasterized when PdfImageOnly is false or when image extraction fails
|
|
' 0 = Use Debenu to render image
|
|
' 4 = Use VeryPDF to render image (x86 only)
|
|
barcode.PdfImageRasterOptions = 0
|
|
|
|
' PdfDpi and PdfBpp control what sort of image the PDF document is rasterized into
|
|
barcode.PdfDpi = 300
|
|
barcode.PdfBpp = 8
|
|
|
|
' Or you can load the settings from a xml format file
|
|
' See the manual for more details.
|
|
' barcode.LoadXMLSettings("settings.xml")
|
|
End Sub
|
|
End Class |