FAQ TBarCode .NET
Как создать линейный штрихкод в C/AL (Dynamics NAV)?
Как создать линейный штрихкод в C/AL (Dynamics NAV)?
Импортируйте сборки в 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) { }
}
}
Используйте их следующим образом:
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)
Нажмите здесь, чтобы узнать больше: Call .NET Framework Types From C/AL Code in Dynamics NAV
Пример функции для Nav 2017
Эта функция возвращает изображение BMP в записи 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;
2D-код
Для 2D-матричного кода измените расчёт размера следующим образом:
widthPx := Scale * barcode.CalculateXColumnsOf2DBarcode (); heightPx := Scale * barcode.CalculateXRowsOf2DBarcode (); barcode.BoundingRectangle := rectangle.Rectangle(0, 0, widthPx, heightPx);
- Scale — это коэффициент, определяющий, из скольких пикселей должна состоять точка матрицы в QR-коде.
- Ширина модуля 0.423 мм достигается при 300 dpi и Scale=5. Ширина модуля 0.381 мм достигается при 600 dpi и Scale=9.
- При необходимости матрицу можно зафиксировать на конкретной версии QR-кода (но тогда ёмкость также будет ограничена).
- Если требуется кодировка UTF-8 (вместо Latin-1), вы можете задать кодовую страницу в штрихкоде как UTF-8 (должна поддерживаться считывателем!):
barcode.CodePage := codePage.Utf_8;