code128码是全字符状态下压缩比例比较高的编码了,所以在应用中大家都喜欢用它,但对于不同的编码还要要区分一下比较好,毕竟它还有3个子集(A,B,C),灵活的应用可以更高效的提高条码的效率和压缩比。
本人在使用中原本要打印的规格 为“JB-13010001-001”,采用该编码发现条码太长,缩短比例后达到要求,但扫描枪扫描非常费力,毕竟只是一般的扫描枪,买高级的提高成本,所以只能在条码上做文章了,还好这个编码是刚要执行的,所以沟通后要更改编码规则,毕竟公司也不想提高成本,所以把规则该为全数字型“0013010001001”,这样就OK了,但打印后发现没有变化,郁闷的不得了,把打印结果输出到文件后分析,才发现原来PPLA的A_Prn_Barcode打印默认为B子集,知道原因就好解决了,把打印更改为C子集,
打印效果符合条件,并且扫描效果不是非常不错,不再费力。
下面把更改方法告之大家,本来PPLA说明中就有说明的:
A_Prn_Barcode
Example: subset = B
barcode data = "Bar code"
output = "BBar code"
如果要打印C子集,请在要打印的字串前添加“C”字符,这样系统就会采用C子集方式打印。
如要打印C开头的字串,当然此时已经不是C子集范畴了,直接加“A”或“B”就OK了。
附件USB接口的条码测试程序(供大家参考):
unit BarCodeDll;
interface
Procedure PrintLabel(LPT,JBCStr:string;PageNum:integer);
Procedure PrintLabel6(LPT,JBCStr1,JBCStr2,JBCStr3,JBCStr4,JBCStr5,JBCStr6:string);
Procedure PrintLabel_test(LPT,JBCStr:string;A,B:integer);
var
PrintServer:String;
implementation
var dpCrLf : AnsiString = chr(13)+chr(10);
var szSavePath : String = 'C:\Argox';
var szSaveFile : AnsiString = 'C:\Argox\PPLA_Example.Prn';
var sznop1 : AnsiString = 'nop_front' + Chr(13) + chr(10);
var sznop2 : AnsiString = 'nop_middle' + Chr(13) + chr(10);
function A_Bar2d_Maxi(x:integer; y:integer; primary:integer; secondary:integer; country:integer;
service:integer; mode:char; numeric:integer; data:AnsiString):integer;stdcall;
external 'WINPPLA.DLL';
function A_Bar2d_Maxi_Ori(x:integer; y:integer; ori:integer; primary:integer; secondary:integer;
country:integer; service:integer; mode:char; numeric:integer; data:AnsiString):integer;
stdcall;external 'WINPPLA.DLL';
function A_Bar2d_PDF417(x:integer; y:integer; narrow:integer; width:integer; normal:char;
security:integer; aspect:integer; row:integer; column:integer; mode:char;
numeric:integer; data:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
function A_Bar2d_PDF417_Ori(x:integer; y:integer; ori:integer; narrow:integer; width:integer;
normal:char; security:integer; aspect:integer; row:integer; column:integer; mode:char;
numeric:integer; data:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
function A_Bar2d_DataMatrix(x:integer; y:integer; rotation:integer; hor_mul:integer;
ver_mul:integer; ECC:integer; data_format:integer; num_rows:integer; num_col:integer;
mode:char; numeric:integer; data:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
Procedure A_Clear_Memory();stdcall;external 'WINPPLA.DLL';
Procedure A_ClosePrn();stdcall;external 'WINPPLA.DLL';
function A_CreatePrn(selection:integer; filename:AnsiString):integer;stdcall;
external 'WINPPLA.DLL';
function A_Del_Graphic(mem_mode:integer; graphic:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
function A_Draw_Box(mode:char; x:integer; y:integer; width:integer; height:integer; top:integer;
side:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Draw_Line(mode:char; x:integer; y:integer; width:integer; height:integer):integer;
stdcall;external 'WINPPLA.DLL';
Procedure A_Feed_Label();stdcall;external 'WINPPLA.DLL';
function A_Get_DLL_Version(nShowMessage:integer):PAnsiChar;stdcall;external 'WINPPLA.DLL';
function A_Get_DLL_VersionA(nShowMessage:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Get_Graphic(x:integer; y:integer; mem_mode:integer; format:char; filename:AnsiString):integer;
stdcall;external 'WINPPLA.DLL';
function A_Get_Graphic_ColorBMP(x:integer; y:integer; mem_mode:integer; format:char;
filename:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
function A_Get_Graphic_ColorBMPEx(x:integer; y:integer; nWidth:integer; nHeight:integer;
rotate:integer; mem_mode:integer; format:char; id_name:AnsiString; filename:AnsiString):integer;
stdcall;external 'WINPPLA.DLL';
// function A_Get_Graphic_ColorBMP_HBitmap(x:integer; y:integer; nWidth:integer; nHeight:integer;
// rotate:integer; mem_mode:integer; format:char; id_name:AnsiString; hbm:HBITMAP):integer;
// stdcall;external 'WINPPLA.DLL';
function A_Initial_Setting(Type_Renamed:integer; Source:AnsiString):integer;stdcall;
external 'WINPPLA.DLL';
function A_WriteData(IsImmediate:integer; pbuf:AnsiString; length:integer):integer;stdcall;
external 'WINPPLA.DLL';
function A_ReadData(pbuf:PAnsiChar; length:integer; dwTimeoutms:integer):integer;stdcall;
external 'WINPPLA.DLL';
function A_Load_Graphic(x:integer; y:integer; graphic_name:AnsiString):integer;stdcall;
external 'WINPPLA.DLL';
function A_Open_ChineseFont(path:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
function A_Print_Form(width:integer; height:integer; copies:integer; amount:integer;
form_name:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
function A_Print_Out(width:integer; height:integer; copies:integer; amount:integer):integer;
stdcall;external 'WINPPLA.DLL';
function A_Prn_Barcode(x:integer; y:integer; ori:integer; type_Renamed:char; narrow:integer;
width:integer; height:integer; mode:char; numeric:integer; data:AnsiString):integer;
stdcall;external 'WINPPLA.DLL';
function A_Prn_Text(x:integer; y:integer; ori:integer; font:integer; type_Renamed:integer;
hor_factor:integer; ver_factor:integer; mode:char; numeric:integer; data:AnsiString):integer;
stdcall;external 'WINPPLA.DLL';
function A_Prn_Text_Chinese(x:integer; y:integer; fonttype:integer; id_name:AnsiString; data:AnsiString;
mem_mode:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Prn_Text_TrueType(x:integer; y:integer; FSize:integer; FType:AnsiString; Fspin:integer;
FWeight:integer; FItalic:integer; FUnline:integer; FStrikeOut:integer; id_name:AnsiString;
data:AnsiString; mem_mode:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Prn_Text_TrueType_W(x:integer; y:integer; FHeight:integer; FWidth:integer;
FType:AnsiString; Fspin:integer; FWeight:integer; FItalic:integer; FUnline:integer;
FStrikeOut:integer; id_name:AnsiString; data:AnsiString; mem_mode:integer):integer;
stdcall;external 'WINPPLA.DLL';
function A_Set_Backfeed(back:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Set_BMPSave(nSave:integer; pstrBMPFName:AnsiString):integer;stdcall;
external 'WINPPLA.DLL';
function A_Set_Cutting(cutting:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Set_Darkness(heat:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Set_DebugDialog(nEnable:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Set_Feed(rate:char):integer;stdcall;external 'WINPPLA.DLL';
function A_Set_Form(formfile:AnsiString; form_name:AnsiString; mem_mode:integer):integer;stdcall;
external 'WINPPLA.DLL';
function A_Set_Margin(position:integer; margin:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Set_Prncomport(baud:integer; parity:integer; data:integer; stop:integer):integer;
stdcall;external 'WINPPLA.DLL';
function A_Set_Prncomport_PC(nBaudRate:integer; nByteSize:integer; nParity:integer;
nStopBits:integer; nDsr:integer; nCts:integer; nXonXoff:integer):integer;stdcall;
external 'WINPPLA.DLL';
function A_Set_Sensor_Mode(type_Renamed:char; continuous:integer):integer;stdcall;
external 'WINPPLA.DLL';
function A_Set_Speed(speed:char):integer;stdcall;external 'WINPPLA.DLL';
function A_Set_Syssetting(transfer:integer; cut_peel:integer; length:integer; zero:integer;
pause:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Set_Unit(unit_Renamed:char):integer;stdcall;external 'WINPPLA.DLL';
function A_Set_Gap(gap:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Set_Logic(logic:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Set_ProcessDlg(nShow:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Set_LabelVer(centiInch:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_GetUSBBufferLen():integer;stdcall;external 'WINPPLA.DLL';
function A_EnumUSB(buf:PAnsiChar):integer;stdcall;external 'WINPPLA.DLL';
function A_CreateUSBPort(nPort:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_CreatePort(nPortType:integer; nPort:integer; filename:AnsiString):integer;stdcall;
external 'WINPPLA.DLL';
function A_Clear_MemoryEx(nMode:integer):integer;stdcall;external 'WINPPLA.DLL';
Procedure A_Set_Mirror();stdcall;external 'WINPPLA.DLL';
function A_Bar2d_RSS(x:integer; y:integer; ori:integer; ratio:integer; height:integer;
rtype:char; mult:integer; seg:integer; data1:AnsiString; data2:AnsiString):integer;stdcall;
external 'WINPPLA.DLL';
function A_Bar2d_QR_M(x:integer; y:integer; ori:integer; mult:char; value:integer; model:integer;
error:char; mask:integer; dinput:char; mode:char; numeric:integer; data:AnsiString):integer;
stdcall;external 'WINPPLA.DLL';
function A_Bar2d_QR_A(x:integer; y:integer; ori:integer; mult:char; value:integer; mode:char;
numeric:integer; data:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
function A_GetNetPrinterBufferLen():integer;stdcall;external 'WINPPLA.DLL';
function A_EnumNetPrinter(buf:PAnsiChar):integer;stdcall;external 'WINPPLA.DLL';
function A_CreateNetPort(nPort:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Prn_Text_TrueType_Uni(x:integer; y:integer; FSize:integer; FType:AnsiString; Fspin:integer;
FWeight:integer; FItalic:integer; FUnline:integer; FStrikeOut:integer; id_name:AnsiString;
data:PWideChar; format:integer; mem_mode:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Prn_Text_TrueType_UniB(x:integer; y:integer; FSize:integer; FType:AnsiString; Fspin:integer;
FWeight:integer; FItalic:integer; FUnline:integer; FStrikeOut:integer; id_name:AnsiString;
data:PWideChar; format:integer ; mem_mode:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_GetUSBDeviceInfo(nPort:integer; pDeviceName:PAnsiChar; pDeviceNameLen:PInteger;
pDevicePath:PAnsiChar; pDevicePathLen:PInteger):integer;stdcall;external 'WINPPLA.DLL';
function A_Set_EncryptionKey(encryptionKey:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
function A_Check_EncryptionKey(decodeKey:AnsiString; encryptionKey:AnsiString;
dwTimeoutms:integer):integer;stdcall;external 'WINPPLA.DLL';
{
function A_Set_Darkness ( darkness:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_GetUSBBufferLen():integer;stdcall;external 'WINPPLA.DLL';
function A_EnumUSB ( buf:string):integer;stdcall;external 'WINPPLA.DLL';
function A_CreatePrn ( selection:integer;FileName:pchar):integer;stdcall;external 'WINPPLA.DLL';
function A_CreateUSBPort( nPort:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Print_Out ( width,height,copies,amount:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Prn_Text ( x,y,ori,font,typee,hor_factor,ver_factor:integer;mode:char;numeric:integer;data:pchar):integer;stdcall;external 'WINPPLA.DLL';
function A_Prn_Barcode ( x,y,ori:integer;typee:char;narrow,width,height:integer;mode:char;numeric:integer;data:pchar):integer;stdcall;external 'WINPPLA.DLL';
function A_Prn_Text_TrueType ( x,y,FSize:integer;FType:pchar;Fspin,FWeight,FItalic,FUnline,FStrikeOut:integer;id_name,data:pchar;mem_mode:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Prn_Text_Chinese(x,y,ori:integer;str1,str2:pchar;mode:integer):integer;stdcall;external 'WINPPLA.DLL';
// (100, 140, 0,'A01','国家利益当前AbCcDd', 1);
function A_Get_Graphic ( x,y,mem_mode:integer;format:char;filename:pchar):integer;stdcall;external 'WINPPLA.DLL';
function A_Draw_Box ( mode, x, y, width, height, top, side:integer):integer;stdcall;external 'WINPPLA.DLL';
function A_Draw_Line (mode, x, y, width, height:integer):integer;stdcall;external 'WINPPLA.DLL';
Procedure A_ClosePrn ();stdcall;external 'WINPPLA.DLL';
}
Procedure PrintLabel(LPT,JBCStr:string;PageNum:integer);
var
ret,nLen,sw : integer;
pbuf : array[0..127] of AnsiChar;
ver : PAnsiChar;
strmsg : string;
len1,len2 : integer;
buf1,buf2 : AnsiString;
buff1 : array[0..127] of WideChar;
//himage : HBITMAP;
buf,_TmpDN:string;
begin
_TmpDN:=JBCStr;
// Test code start
// open port.
// dll version.
ver := A_Get_DLL_Version(0);
A_CreatePrn(0,'d:\out.prn');
// search port.
nLen := A_GetUSBBufferLen() + 1;
strmsg := 'DLL ' + ver + dpCrLf; // only sample coding, not smart.
If nLen > 1 then
begin
len1 := 128;
len2 := 128;
SetLength(buf1,len1);
SetLength(buf2,len2);
A_EnumUSB(pbuf);
A_GetUSBDeviceInfo(1, PAnsiChar(buf1), @len1, PAnsiChar(buf2), @len2);
sw := 1;
If 0 < sw then
ret := A_CreatePrn(12, PAnsiChar(buf2)) // open usb.
else
ret := A_CreateUSBPort(1); // must call A_GetUSBBufferLen() function fisrt.
If 0 < ret then
strmsg := strmsg + 'Open USB fail!'
else
begin
SetLength(buf1,len1);
SetLength(buf2,len2);
strmsg := strmsg + 'Open USB:' + dpCrLf+ 'Device name: ';
strmsg := strmsg + buf1;
strmsg := strmsg + dpCrLf+ 'Device path: ';
strmsg := strmsg + buf2;
//sw := 2;
If 2 = sw then
begin
//get printer status.
pbuf[0] := #$01;
pbuf[1] := #$46;
pbuf[2] := #$0D;
pbuf[3] := #$0A;
A_WriteData(1, pbuf, 4); //<SOH>F
ret := A_ReadData(pbuf, 2, 1000);
end;
end;
end
else
begin
CreateDirectory(PChar(szSavePath), nil);
ret := A_CreatePrn(0, szSaveFile); // open file.
strmsg := strmsg + 'Open ' + szSaveFile;
if 0 < ret then
strmsg := strmsg + ' file fail!'
else
strmsg := strmsg + ' file succeed!';
end;
//ShowMessage(strmsg);
If 0 < ret then
exit;
/
A_Set_Darkness(18);
A_Prn_Barcode(52, 47, 1, 'E', 2, 4, 40, 'N', 0, pchar('C'+_TmpDN));
A_Print_Out(1, 1, PageNum,1);
A_ClosePrn;
end;
Procedure PrintLabel_test(LPT,JBCStr:string;A,B:integer);
var
ret,nLen,sw : integer;
pbuf : array[0..127] of AnsiChar;
ver : PAnsiChar;
strmsg : string;
len1,len2 : integer;
buf1,buf2 : AnsiString;
buff1 : array[0..127] of WideChar;
//himage : HBITMAP;
buf,_TmpDN:string;
begin
_TmpDN:=JBCStr;
// Test code start
// open port.
// dll version.
ver := A_Get_DLL_Version(0);
// A_CreatePrn(0,'d:\out.prn');
// search port.
nLen := A_GetUSBBufferLen() + 1;
strmsg := 'DLL ' + ver + dpCrLf; // only sample coding, not smart.
If nLen > 1 then
begin
len1 := 128;
len2 := 128;
SetLength(buf1,len1);
SetLength(buf2,len2);
A_EnumUSB(pbuf);
A_GetUSBDeviceInfo(1, PAnsiChar(buf1), @len1, PAnsiChar(buf2), @len2);
sw := 1;
If 0 < sw then
ret := A_CreatePrn(12, PAnsiChar(buf2)) // open usb.
else
ret := A_CreateUSBPort(1); // must call A_GetUSBBufferLen() function fisrt.
If 0 < ret then
strmsg := strmsg + 'Open USB fail!'
else
begin
SetLength(buf1,len1);
SetLength(buf2,len2);
strmsg := strmsg + 'Open USB:' + dpCrLf+ 'Device name: ';
strmsg := strmsg + buf1;
strmsg := strmsg + dpCrLf+ 'Device path: ';
strmsg := strmsg + buf2;
//sw := 2;
If 2 = sw then
begin
//get printer status.
pbuf[0] := #$01;
pbuf[1] := #$46;
pbuf[2] := #$0D;
pbuf[3] := #$0A;
A_WriteData(1, pbuf, 4); //<SOH>F
ret := A_ReadData(pbuf, 2, 1000);
end;
end;
end
else
begin
{
CreateDirectory(PChar(szSavePath), nil);
ret := A_CreatePrn(0, szSaveFile); // open file.
strmsg := strmsg + 'Open ' + szSaveFile;
if 0 < ret then
strmsg := strmsg + ' file fail!'
else
strmsg := strmsg + ' file succeed!';
}
end;
//ShowMessage(strmsg);
If 0 < ret then
exit;
/
A_Set_Darkness(18);
A_Prn_Barcode(20, 60, 1, 'E', a, b, 40, 'N', 0, pchar(_TmpDN));
A_Print_Out(1, 1, 2,1);
A_ClosePrn;
end;
Procedure PrintLabel6(LPT,JBCStr1,JBCStr2,JBCStr3,JBCStr4,JBCStr5,JBCStr6:string);
var
ret,nLen,sw : integer;
pbuf : array[0..127] of AnsiChar;
ver : PAnsiChar;
strmsg : string;
len1,len2 : integer;
buf1,buf2 : AnsiString;
buff1 : array[0..127] of WideChar;
//himage : HBITMAP;
buf,_TmpDN:string;
begin
// Test code start
// open port.
// dll version.
ver := A_Get_DLL_Version(0);
// search port.
nLen := A_GetUSBBufferLen() + 1;
strmsg := 'DLL ' + ver + dpCrLf; // only sample coding, not smart.
If nLen > 1 then
begin
len1 := 128;
len2 := 128;
SetLength(buf1,len1);
SetLength(buf2,len2);
A_EnumUSB(pbuf);
A_GetUSBDeviceInfo(1, PAnsiChar(buf1), @len1, PAnsiChar(buf2), @len2);
sw := 1;
If 0 < sw then
ret := A_CreatePrn(12, PAnsiChar(buf2)) // open usb.
else
ret := A_CreateUSBPort(1); // must call A_GetUSBBufferLen() function fisrt.
If 0 < ret then
strmsg := strmsg + 'Open USB fail!'
else
begin
SetLength(buf1,len1);
SetLength(buf2,len2);
strmsg := strmsg + 'Open USB:' + dpCrLf+ 'Device name: ';
strmsg := strmsg + buf1;
strmsg := strmsg + dpCrLf+ 'Device path: ';
strmsg := strmsg + buf2;
//sw := 2;
If 2 = sw then
begin
//get printer status.
pbuf[0] := #$01;
pbuf[1] := #$46;
pbuf[2] := #$0D;
pbuf[3] := #$0A;
A_WriteData(1, pbuf, 4); //<SOH>F
ret := A_ReadData(pbuf, 2, 1000);
end;
end;
end
else
begin
{
CreateDirectory(PChar(szSavePath), nil);
ret := A_CreatePrn(0, szSaveFile); // open file.
strmsg := strmsg + 'Open ' + szSaveFile;
if 0 < ret then
strmsg := strmsg + ' file fail!'
else
strmsg := strmsg + ' file succeed!';
}
end;
//ShowMessage(strmsg);
If 0 < ret then
exit;
/
A_Set_Darkness(15);
if JBCStr1<>'' then
A_Prn_Barcode(5, 15, 1, 'E', 1, 5, 40, 'N', 0, pchar(JBCStr1));
if JBCStr2<>'' then
A_Prn_Barcode(140, 15, 1, 'E', 1, 5, 40, 'N', 0, pchar(JBCStr2));
if JBCStr3<>'' then
A_Prn_Barcode(275, 15, 1, 'E', 1, 5, 40, 'N', 0, pchar(JBCStr3));
if JBCStr4<>'' then
A_Prn_Barcode(5, 30, 1, 'E', 1, 5, 50, 'N', 0, pchar(JBCStr4));
if JBCStr5<>'' then
A_Prn_Barcode(140, 30, 1, 'E', 1, 5, 50, 'N', 0, pchar(JBCStr5));
if JBCStr6<>'' then
A_Prn_Barcode(275, 30, 1, 'E', 1, 5, 50, 'N', 0, pchar(JBCStr6));
A_Print_Out(1, 1, 1,1);
A_ClosePrn;
end;
end.