A_Prn_Barcode 应用code128码的 注意事项

来源:互联网 发布:淘宝领的优酷会员 编辑:程序博客网 时间:2024/06/08 20:09

   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;interfaceProcedure 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.


原创粉丝点击