Free Trial
Web API version
Licensing
Request A Quote
HAVE QUESTIONS OR NEED HELP? SUBMIT THE SUPPORT REQUEST FORM or write email to SUPPORT@BYTESCOUT.COM
Read Barcodes From Subfolder | Delphi
Project1.dpr:
//******************************************************************* // ByteScout Barcode Reader SDK // // Copyright © 2020 ByteScout - http://www.bytescout.com // ALL RIGHTS RESERVED // //******************************************************************* { IMPORTANT NOTICE for DELPHI 2007, Delphi 2006 or earlier versions: ----------------------------------------------------------------------- Usual approach with type library import (so called "early binding") will crash with "stackoverflow" or "floating point error" due to issues in this versions of Delphi. SOLUTION: Please use so called "late binding" that requires NO type library import and works by creating objects at the runtime like this: // ----------------- program Project1; uses SysUtils, ComObj, ActiveX; var extractor: Variant; begin CoInitialize(nil); // Create and initialize extractor := CreateOleObject('Bytescout.PDFExtractor.CSVExtractor') ; // as usual extractor.LoadDocumentFromFile ('../../sample3.pdf'); // … // destroy the object by setting to varEmpty extractor := varEmpty; end. // ----------------- } program Project1; {$APPTYPE CONSOLE} { Sample that shows reading of barcodes from images in /Images/ subfolder } uses SysUtils, ComObj, ActiveX; var reader: Variant; SR: TSearchRec; arrayOutput: Variant; varItem: Variant; i: integer; pathWithImages, imageType: string; begin CoInitialize(nil); // Disable floating point exception to conform to .NET floating point operations behavior. System.Set8087CW($133f); // Create and initialize Bytescout.BarCodeReader.Reader object reader := CreateOleObject('Bytescout.BarCodeReader.Reader'); reader.RegistrationName := 'demo'; reader.RegistrationKey := 'demo'; // Enable Code 39 decoding, you may also enable other types (dozens of types supported) // see .BarCodeTypesToFind for more values. reader.BarcodeTypesToFind.Code39 := true; // For example to enable Code128 uncomment line below // reader.BarcodeTypesToFind.Code128 := true; // For example to enable QR Code uncomment line below // reader.BarcodeTypesToFind.QRCode := true; // Setup possible barcode orientations ( ato support rotated images) // see BarCode Reader SDK - OrientationType enum for more variations // uncomment to support more orientations like right to left { reader.Orientation := 1 or //OrientationType.HorizontalFromLeftToRight 16 or // OrientationType.HorizontalFromRightToLeft 32768 or // OrientationType.VerticalFromBottomToTop 2; // OrientationType.VerticalFromTopToBottom; } // uncomment to enable processing of negative barcodes (white bars on dark background) // reader.SearchNegative := true; // uncomment to Enable Heuristic Mode (try different image processing modes if the default failed). // Helps on photos with poor lighting conditions. //reader.HeuristicMode := true; // define subfolder where we have images pathWithImages := '.\Images\'; imageType := '*.jpg'; // can also be *.png, *.tiff, *.bmp, *.PDF // now search for files with images and processing them one by one if FindFirst(pathWithImages + imageType, faAnyFile, SR) = 0 then begin repeat if (SR.Attr <> faDirectory) then begin writeLn(SR.Name); writeLn('------------------'); // processing the file reader.ReadFromFile(pathWithImages + SR.Name); for i := 0 to reader.FoundCount - 1 do begin writeLn( '#' + IntToStr(i) + ' barcode with value ' + reader.GetFoundBarcodeValue(i)+ ' at ' + FloatToStr(reader.GetFoundBarCodeLeft(i)) + ',' + FloatToStr(reader.GetFoundBarCodeTop(i)) ); end; writeLn('------------------'); end; until FindNext(SR) <> 0; FindClose(SR); end; WriteLn('Press any key to exit...'); ReadLn; reader := varEmpty; end.