FAQ TBarCode .NET
Comment créer un code-barres linéaire en C/AL (Dynamics NAV) ?
Comment créer un code-barres linéaire en C/AL (Dynamics NAV) ?
Importez les assemblies dans dotnet.al :
dotnet
{
assembly(TECIT.TBarCode)
{
type(TECIT.TBarCode.Barcode; barcode) { }
type(TECIT.TBarCode.BarcodeType; barcodeType) { }
type(TECIT.TBarCode.CodePage; codePage) { }
type(TECIT.TBarCode.CheckdigitMethod; checkDigitMethod) { }
}
assembly(System.Drawing)
{
type(System.Drawing.Rectangle; barcodeRectangle) { }
type(System.Drawing.Bitmap; barcodeBitmap) { }
}
}
Utilisez-les comme suit :
barcode := barcode.Barcode;
//barcode.License(your license data);
barcode.BarcodeType := barcodeType.Code128;
barcode.Dpi := 300;
barcode.Data := yourDataToEncode;
// barcode.TranslateEscapeSequences := TRUE; // optional
// calculate optimal width in Pixel with scaling factor (1 Module = 3 Pixels)
optimalWidthPx := 3 * barcode.CalculateNumberOfModules();
// set optimal width for the bitmap (works for linear codes)
barcode.BoundingRectangle := barcodeRectangle.Rectangle(0, 0, optimalWidthPx, 300);
FileNameBmp := Filemanagement.ServerTempFileName('bmp');
barcode.Draw(FileNameBmp, 0); // save as BMP format (0 = BMP)
Cliquez ici pour plus d'informations : Call .NET Framework Types From C/AL Code in Dynamics NAV
Exemple de fonction pour Nav 2017
Cette fonction renvoie une image BMP dans un enregistrement TempBlob :
PROCEDURE CreateCode128 (Data2Encode : Text[100]; ScaleX: Integer, HeightPx : Integer; VAR TempBlob : TEMPORARY Record 99008535);
VAR
barcode : DotNet "'TECIT.TBarCode, Version=11.10.0.0, Culture=neutral, PublicKeyToken=1b5f4306b234b83d'.TECIT.TBarCode.Barcode";
bctype : DotNet "'TECIT.TBarCode, Version=11.10.0.0, Culture=neutral, PublicKeyToken=1b5f4306b234b83d'.TECIT.TBarCode.BarcodeType";
rectangle : DotNet "'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.System.Drawing.Rectangle";
widthPx : Integer;
BEGIN
FileNameBmp := FileManagement.ServerTempFileName('bmp');
barcode := barcode.Barcode;
//barcode.License(your license data);
barcode.BarcodeType := bctype.Code128;
barcode.Dpi := 300;
barcode.Data := Data2Encode;
// barcode.TranslateEscapeSequences := TRUE; // optional
// calculate optimal width in Pixel with scaling factor (ScaleX =3 -> 1 Module = 3 Pixels)
widthPx := ScaleX * barcode.CalculateNumberOfModules();
// set optimal width for the bitmap (works for linear codes)
barcode.BoundingRectangle := rectangle.Rectangle(0, 0, widthPx, HeightPx);
barcode.Draw(FileNameBmp, 0); // save as BMP format (0 = BMP)
CLEAR(TempBlob);
IF TempBlob.INSERT THEN;
FileManagement.BLOBImportFromServerFile(TempBlob, FileNameBmp);
TempBlob.MODIFY;
END;
Code 2D
Pour un code matriciel 2D, modifiez le calcul de taille comme suit :
widthPx := Scale * barcode.CalculateXColumnsOf2DBarcode (); heightPx := Scale * barcode.CalculateXRowsOf2DBarcode (); barcode.BoundingRectangle := rectangle.Rectangle(0, 0, widthPx, heightPx);
- Scale est un facteur qui détermine le nombre de pixels dont doit être composé un point de matrice dans le QR code.
- Une largeur de module de 0,423 mm est obtenue avec 300 ppp et Scale=5. Une largeur de module de 0,381 mm est obtenue avec 600 ppp et Scale=9.
- Si nécessaire, la matrice peut être fixée à une version spécifique de QR code (mais la capacité serait alors aussi limitée).
- Si UTF-8 est requis comme encodage (au lieu de Latin-1), vous pouvez régler la page de code du code-barres sur UTF-8 (doit être pris en charge par le lecteur !) :
barcode.CodePage := codePage.Utf_8;