打印土地证,现要加上条形码的功能,条码与土地证号对应原来学校里的老师给我发来一段代码和一个test.bmp文件,但我看看仍是无从下手,又不想多麻烦老师现将代码贴上,请大家指点迷津,多谢先了,圣诞快乐好象就是几个函数,我不知道怎样具体的用起来...function Tform1.BarToBmp(s:string;hi,wid:integer):string;
//s 为条码字符串,Hi为BMP高度,wid为bmp宽度
Var bmpFile,HeadFile:File;
bmpFileName,HeadFileName:string;
Data_00,Data_f0,Data_0f,Data_ff:Array[0..256] of Char;
C_Letter,CodeInfo,vs:string;
buf:array[0..128] of Char;
bCode:Array[0..512] of char;
Start,BarCodes:array[0..4800] of Char;
Bits,kk,k,BarBits,ReadNum,str_len,str_len0,i,g,StartG:integer;
begin
BarData00ff(Data_00,Data_0f,Data_f0,Data_ff,Wid);
BmpfileName:='E:\ldmsapp\test.bmp';
HeadfileName:='E:\ldmsapp\test1.Bmp';
g:=0;
for i:=0 to wid-1 Do Start[g+i] := data_0f[i];g:=g+wid;
for i:=0 to wid-1 Do Start[g+i] := data_ff[i];g:=g+wid;
for i:=0 to wid-1 Do Start[g+i] := data_0f[i];g:=g+wid;
for i:=0 to wid-1 Do Start[g+i] := data_00[i];g:=g+wid;
for i:=0 to wid-1 Do Start[g+i] := data_0f[i];g:=g+wid;
for i:=0 to wid-1 Do Start[g+i] := data_00[i];g:=g+wid;
for i:=0 to wid-1 Do Start[g+i] := data_0f[i];g:=g+wid;
for i:=0 to wid-1 Do Start[g+i] := data_0f[i];g:=g+wid;
Assignfile(HeadFile,HeadFileName);Reset(HeadFile,1);
Assignfile(bmpFile,BmpFileName);ReWrite(bmpfile,1);
for i:=0 to g-1 Do BarCodes[i] := Start[i]; StartG :=g;
str_len :=length(s);
for i:=1 to str_len do begin
C_Letter := Copy(s,i,1);
CodeInfo := BarToCode(C_letter);
kk :=Bardecode(bCode,CodeInfo,Wid);
for k:=0 to kk-1 do BarCodes[g+k]:=bCode[k];g:=g+kk;
End;
for i:=0 to StartG-1 Do BarCodes[g+i] := Start[i];
str_len := StartG+g;
BlockRead(HeadFile,buf,2,ReadNum); Blockwrite(bmpfile,buf,2);
BlockRead(HeadFile,buf,2);
str_len0 := str_len;
if( (str_len Mod 4)<>0) Then begin
str_len0 := (str_len div 4+1)*4;
for i:= 0 to str_len0 - str_len-1 do BarCodes[str_len+i] :=Chr(0);
End;
Barbits := str_len0*hi;
bits := Barbits+76; Vs:= Chr(bits Mod 256)+chr(bits div 256);
BlockWrite(bmpfile,Bits,2);
BlockRead(HeadFile,buf,14,ReadNum);
BlockWrite(bmpfile,buf,14);
bits := Str_len*2;
BlockRead(HeadFile,buf,2,ReadNum); Vs:= Chr(bits Mod 256)+chr(bits div 256);
BlockWrite(bmpfile,Bits,2);
BlockRead(HeadFile,buf,2,ReadNum);
BlockWrite(bmpfile,buf,2); Bits := hi;
BlockRead(HeadFile,buf,2,ReadNum); Vs:= Chr(bits Mod 256)+chr(bits div 256);
BlockWrite(bmpfile,bits,2);
BlockRead(HeadFile,buf,10,ReadNum);
BlockWrite(bmpfile,buf,10); Bits := Barbits;
BlockRead(HeadFile,buf,2,ReadNum);Vs:= Chr(bits Mod 256)+chr(bits div 256);
BlockWrite(bmpfile,bits,2);
BlockRead(HeadFile,buf,82,ReadNum);
BlockWrite(bmpfile,buf,82);
for i :=1 to hi do BlockWrite(bmpfile,barCodes,str_len0);
CloseFile(bmpfile);
Closefile(HeadFile);
result := BmpfileName;
End;
procedure Tform1.BarData00ff(Var Data_00,Data_0f,Data_f0,Data_ff:Array of Char;Wid:integer);
Var i,BarColor,GapColor:integer;
begin
BarColor :=0;GapColor :=15;
Data_00[0]:=#0; Data_f0[0]:=#0;
Data_ff[0]:=#0; Data_0f[0]:=#0;
for i:=0 to wid-1 Do begin
Data_00[i]:=Chr(BarColor*16+BarColor);
Data_0f[i]:=Chr(BarColor*16+GapColor);
Data_f0[i]:=Chr(GapColor*16+BarColor);
Data_ff[i]:=Chr(GapColor*16+GapColor);
End;
End;
function Tform1.BarDecode(var barCode:Array of Char ;CurCode:String;wid:integer):integer;
Var bit2:string;
Data_00,Data_0f,Data_ff,Data_f0:Array[0..256] of Char;
i,g,k:integer;
begin
BarData00ff(Data_00,Data_0f,data_f0,Data_ff,Wid);
BarCode[0]:=#0;CurCode :=CurCode+'0';g:=0;
for k :=1 to 5 Do begin
bit2 := Copy(CurCode,(k*2-1),2);
if( Bit2='00') Then Begin
for i:=0 to wid-1 Do barCode[g+i] := data_0f[i];g :=g+wid;
End else if( Bit2='01') Then begin
for i:=0 to wid-1 Do barCode[g+i] := data_0f[i];g:=g+wid;
for i:=0 to wid-1 Do barCode[g+i] := data_ff[i];g:=g+wid;
End else if( Bit2='10') Then begin
for i:=0 to wid-1 Do barCode[g+i] := data_00[i];g:=g+wid;
for i:=0 to wid-1 Do barCode[g+i] := data_0f[i];g:=g+wid;
End else if( Bit2='11') Then begin
for i:=0 to wid-1 Do barCode[g+i] := data_00[i];g:=g+wid;
for i:=0 to wid-1 Do barCode[g+i] := data_0f[i];g:=g+wid;
for i:=0 to wid-1 Do barCode[g+i] := data_ff[i];g:=g+wid;
End;
End;
result := g;
End;
function Tform1.BarToCode(s:string):string;
Var Code:Array[0..38] of String;
Info:Array[0..38] of String;
PL,i:integer;
begin
Code[0]:='0' ;Info[0]:='000110100';
Code[1]:='1' ;Info[1]:='100100001';
Code[2]:='2' ;Info[2]:='001100001';
Code[3]:='3' ;Info[3]:='101100000';
Code[4]:='4' ;Info[4]:='000110001';
Code[5]:='5' ;Info[5]:='100110000';
Code[6]:='6' ;Info[6]:='001110000';
Code[7]:='7' ;Info[7]:='000100101';
Code[8]:='8' ;Info[8]:='100100100';
Code[9]:='9' ;Info[9]:='001100100';
Code[10]:='a';Info[10]:='100001001';
Code[11]:='b';Info[11]:='001001001';
Code[12]:='c';Info[12]:='101001000';
Code[13]:='d';Info[13]:='000011001';
Code[14]:='e';Info[14]:='100011000';
Code[15]:='f';Info[15]:='001011000';
Code[16]:='g';Info[16]:='000001101';
Code[17]:='h';Info[17]:='100001100';
Code[18]:='i';Info[18]:='001001100';
Code[19]:='j';Info[19]:='000011100';
Code[20]:='k';Info[20]:='100000011';
Code[21]:='l';Info[21]:='001000011';
Code[22]:='m';Info[22]:='101000010';
Code[23]:='n';Info[23]:='000010011';
Code[24]:='o';Info[24]:='100010010';
Code[25]:='p';Info[25]:='001010010';
Code[26]:='q';Info[26]:='000000111';
Code[27]:='r';Info[27]:='100000110';
Code[28]:='s';Info[28]:='001000110';
Code[29]:='t';Info[29]:='000010110';
Code[30]:='u';Info[30]:='110000001';
Code[31]:='v';Info[31]:='011000001';
Code[32]:='w';Info[32]:='111000000';
Code[33]:='x';Info[33]:='010010001';
Code[34]:='y';Info[34]:='110010000';
Code[35]:='z';Info[35]:='011010000';
Code[36]:='_';Info[36]:='010000010';
Code[37]:='.';Info[37]:='110000100';
PL:= 37;
for i:=0 to Pl Do begin
if( UpperCase(Code[i])=UpperCase(s)) Then begin
Result :=Info[i];exit;
End;
End;
End;
//s 为条码字符串,Hi为BMP高度,wid为bmp宽度
Var bmpFile,HeadFile:File;
bmpFileName,HeadFileName:string;
Data_00,Data_f0,Data_0f,Data_ff:Array[0..256] of Char;
C_Letter,CodeInfo,vs:string;
buf:array[0..128] of Char;
bCode:Array[0..512] of char;
Start,BarCodes:array[0..4800] of Char;
Bits,kk,k,BarBits,ReadNum,str_len,str_len0,i,g,StartG:integer;
begin
BarData00ff(Data_00,Data_0f,Data_f0,Data_ff,Wid);
BmpfileName:='E:\ldmsapp\test.bmp';
HeadfileName:='E:\ldmsapp\test1.Bmp';
g:=0;
for i:=0 to wid-1 Do Start[g+i] := data_0f[i];g:=g+wid;
for i:=0 to wid-1 Do Start[g+i] := data_ff[i];g:=g+wid;
for i:=0 to wid-1 Do Start[g+i] := data_0f[i];g:=g+wid;
for i:=0 to wid-1 Do Start[g+i] := data_00[i];g:=g+wid;
for i:=0 to wid-1 Do Start[g+i] := data_0f[i];g:=g+wid;
for i:=0 to wid-1 Do Start[g+i] := data_00[i];g:=g+wid;
for i:=0 to wid-1 Do Start[g+i] := data_0f[i];g:=g+wid;
for i:=0 to wid-1 Do Start[g+i] := data_0f[i];g:=g+wid;
Assignfile(HeadFile,HeadFileName);Reset(HeadFile,1);
Assignfile(bmpFile,BmpFileName);ReWrite(bmpfile,1);
for i:=0 to g-1 Do BarCodes[i] := Start[i]; StartG :=g;
str_len :=length(s);
for i:=1 to str_len do begin
C_Letter := Copy(s,i,1);
CodeInfo := BarToCode(C_letter);
kk :=Bardecode(bCode,CodeInfo,Wid);
for k:=0 to kk-1 do BarCodes[g+k]:=bCode[k];g:=g+kk;
End;
for i:=0 to StartG-1 Do BarCodes[g+i] := Start[i];
str_len := StartG+g;
BlockRead(HeadFile,buf,2,ReadNum); Blockwrite(bmpfile,buf,2);
BlockRead(HeadFile,buf,2);
str_len0 := str_len;
if( (str_len Mod 4)<>0) Then begin
str_len0 := (str_len div 4+1)*4;
for i:= 0 to str_len0 - str_len-1 do BarCodes[str_len+i] :=Chr(0);
End;
Barbits := str_len0*hi;
bits := Barbits+76; Vs:= Chr(bits Mod 256)+chr(bits div 256);
BlockWrite(bmpfile,Bits,2);
BlockRead(HeadFile,buf,14,ReadNum);
BlockWrite(bmpfile,buf,14);
bits := Str_len*2;
BlockRead(HeadFile,buf,2,ReadNum); Vs:= Chr(bits Mod 256)+chr(bits div 256);
BlockWrite(bmpfile,Bits,2);
BlockRead(HeadFile,buf,2,ReadNum);
BlockWrite(bmpfile,buf,2); Bits := hi;
BlockRead(HeadFile,buf,2,ReadNum); Vs:= Chr(bits Mod 256)+chr(bits div 256);
BlockWrite(bmpfile,bits,2);
BlockRead(HeadFile,buf,10,ReadNum);
BlockWrite(bmpfile,buf,10); Bits := Barbits;
BlockRead(HeadFile,buf,2,ReadNum);Vs:= Chr(bits Mod 256)+chr(bits div 256);
BlockWrite(bmpfile,bits,2);
BlockRead(HeadFile,buf,82,ReadNum);
BlockWrite(bmpfile,buf,82);
for i :=1 to hi do BlockWrite(bmpfile,barCodes,str_len0);
CloseFile(bmpfile);
Closefile(HeadFile);
result := BmpfileName;
End;
procedure Tform1.BarData00ff(Var Data_00,Data_0f,Data_f0,Data_ff:Array of Char;Wid:integer);
Var i,BarColor,GapColor:integer;
begin
BarColor :=0;GapColor :=15;
Data_00[0]:=#0; Data_f0[0]:=#0;
Data_ff[0]:=#0; Data_0f[0]:=#0;
for i:=0 to wid-1 Do begin
Data_00[i]:=Chr(BarColor*16+BarColor);
Data_0f[i]:=Chr(BarColor*16+GapColor);
Data_f0[i]:=Chr(GapColor*16+BarColor);
Data_ff[i]:=Chr(GapColor*16+GapColor);
End;
End;
function Tform1.BarDecode(var barCode:Array of Char ;CurCode:String;wid:integer):integer;
Var bit2:string;
Data_00,Data_0f,Data_ff,Data_f0:Array[0..256] of Char;
i,g,k:integer;
begin
BarData00ff(Data_00,Data_0f,data_f0,Data_ff,Wid);
BarCode[0]:=#0;CurCode :=CurCode+'0';g:=0;
for k :=1 to 5 Do begin
bit2 := Copy(CurCode,(k*2-1),2);
if( Bit2='00') Then Begin
for i:=0 to wid-1 Do barCode[g+i] := data_0f[i];g :=g+wid;
End else if( Bit2='01') Then begin
for i:=0 to wid-1 Do barCode[g+i] := data_0f[i];g:=g+wid;
for i:=0 to wid-1 Do barCode[g+i] := data_ff[i];g:=g+wid;
End else if( Bit2='10') Then begin
for i:=0 to wid-1 Do barCode[g+i] := data_00[i];g:=g+wid;
for i:=0 to wid-1 Do barCode[g+i] := data_0f[i];g:=g+wid;
End else if( Bit2='11') Then begin
for i:=0 to wid-1 Do barCode[g+i] := data_00[i];g:=g+wid;
for i:=0 to wid-1 Do barCode[g+i] := data_0f[i];g:=g+wid;
for i:=0 to wid-1 Do barCode[g+i] := data_ff[i];g:=g+wid;
End;
End;
result := g;
End;
function Tform1.BarToCode(s:string):string;
Var Code:Array[0..38] of String;
Info:Array[0..38] of String;
PL,i:integer;
begin
Code[0]:='0' ;Info[0]:='000110100';
Code[1]:='1' ;Info[1]:='100100001';
Code[2]:='2' ;Info[2]:='001100001';
Code[3]:='3' ;Info[3]:='101100000';
Code[4]:='4' ;Info[4]:='000110001';
Code[5]:='5' ;Info[5]:='100110000';
Code[6]:='6' ;Info[6]:='001110000';
Code[7]:='7' ;Info[7]:='000100101';
Code[8]:='8' ;Info[8]:='100100100';
Code[9]:='9' ;Info[9]:='001100100';
Code[10]:='a';Info[10]:='100001001';
Code[11]:='b';Info[11]:='001001001';
Code[12]:='c';Info[12]:='101001000';
Code[13]:='d';Info[13]:='000011001';
Code[14]:='e';Info[14]:='100011000';
Code[15]:='f';Info[15]:='001011000';
Code[16]:='g';Info[16]:='000001101';
Code[17]:='h';Info[17]:='100001100';
Code[18]:='i';Info[18]:='001001100';
Code[19]:='j';Info[19]:='000011100';
Code[20]:='k';Info[20]:='100000011';
Code[21]:='l';Info[21]:='001000011';
Code[22]:='m';Info[22]:='101000010';
Code[23]:='n';Info[23]:='000010011';
Code[24]:='o';Info[24]:='100010010';
Code[25]:='p';Info[25]:='001010010';
Code[26]:='q';Info[26]:='000000111';
Code[27]:='r';Info[27]:='100000110';
Code[28]:='s';Info[28]:='001000110';
Code[29]:='t';Info[29]:='000010110';
Code[30]:='u';Info[30]:='110000001';
Code[31]:='v';Info[31]:='011000001';
Code[32]:='w';Info[32]:='111000000';
Code[33]:='x';Info[33]:='010010001';
Code[34]:='y';Info[34]:='110010000';
Code[35]:='z';Info[35]:='011010000';
Code[36]:='_';Info[36]:='010000010';
Code[37]:='.';Info[37]:='110000100';
PL:= 37;
for i:=0 to Pl Do begin
if( UpperCase(Code[i])=UpperCase(s)) Then begin
Result :=Info[i];exit;
End;
End;
End;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货