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 示例函数
该函数会在 TempBlob 记录中返回一个 BMP 图像:
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;
二维码
对于二维矩阵码,请按以下方式修改尺寸计算方式:
widthPx := Scale * barcode.CalculateXColumnsOf2DBarcode (); heightPx := Scale * barcode.CalculateXRowsOf2DBarcode (); barcode.BoundingRectangle := rectangle.Rectangle(0, 0, widthPx, heightPx);
- Scale 是一个系数,用于确定 QR 码中一个矩阵点应由多少像素组成。
- 在 300 dpi 且 Scale=5 时,可得到 0.423 毫米的模块宽度;在 600 dpi 且 Scale=9 时,可得到 0.381 毫米的模块宽度。
- 如有需要,可以将矩阵固定为特定的 QR 码版本(但这样容量也会受到限制)。
- 如果需要使用 UTF-8 编码(而非 Latin-1),可以将条码的代码页设置为 UTF-8(必须由阅读器支持!):
barcode.CodePage := codePage.Utf_8;