CodeSoft和BarTender打印的调用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeSoft和BarTender打印的调用相关的知识,希望对你有一定的参考价值。

  1 unit Unit1;
  2 
  3 interface
  4 
  5 uses
  6   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons,System.Win.ComObj;
  8 
  9 type
 10   TForm1 = class(TForm)
 11     BitBtn1: TBitBtn;
 12     BitBtn2: TBitBtn;
 13     Edit1: TEdit;
 14     Label1: TLabel;
 15     procedure BitBtn2Click(Sender: TObject);
 16     procedure BitBtn1Click(Sender: TObject);
 17     procedure FormDestroy(Sender: TObject);
 18     procedure FormCreate(Sender: TObject);
 19   private
 20     FCSApp,FBarApp:Variant;
 21     const
 22       VARID=RID;
 23     { Private declarations }
 24     procedure PrintCS(ACopys:Integer=1);
 25     procedure PrintBar(ACopys:Integer=1);
 26     function VarIsExists(const Vars:Variant;AVarName : string):Boolean;
 27     function GetBarObj:Variant;
 28     function GetCSObj:variant;
 29   public
 30     { Public declarations }
 31   end;
 32 
 33 var
 34   Form1: TForm1;
 35 
 36 implementation
 37 
 38 {$R *.dfm}
 39 
 40 procedure TForm1.BitBtn1Click(Sender: TObject);
 41 begin
 42   PrintCS(StrToIntDef(Edit1.Text,1));
 43 end;
 44 
 45 procedure TForm1.BitBtn2Click(Sender: TObject);
 46 begin
 47   PrintBar(StrToIntDef(Edit1.Text,1));
 48 end;
 49 
 50 procedure TForm1.FormCreate(Sender: TObject);
 51 begin
 52  GetBarObj;
 53  GetCSObj;
 54 end;
 55 
 56 procedure TForm1.FormDestroy(Sender: TObject);
 57 begin
 58   if not VarIsEmpty(FBarApp) then
 59   try
 60     FBarApp.quit(1);
 61   except
 62     FBarApp := Unassigned;
 63   end;
 64   if not VarIsEmpty(FCSApp) then
 65   try
 66     FCSApp.quit;
 67   except on E: Exception do
 68     FCSApp := Unassigned;
 69   end;
 70 end;
 71 
 72 function TForm1.GetBarObj: Variant;
 73 begin
 74   try
 75     result := GetActiveOleObject(BarTender.Application);
 76   except on E: Exception do
 77     try
 78       result := CreateOleObject(BarTender.Application);
 79     except on E: Exception do
 80       result := varEmpty;
 81     end;
 82   end;
 83 end;
 84 
 85 function TForm1.GetCSObj: variant;
 86 begin
 87   try
 88     result := GetActiveOleObject(Lppx.Application);
 89   except on E: Exception do
 90     try
 91       result := CreateOleObject(Lppx.Application);
 92     except on E: Exception do
 93       result := varEmpty;
 94     end;
 95   end;
 96 end;
 97 
 98 procedure TForm1.PrintBar(ACopys: Integer);
 99 var
100   btFormat,Vars:Variant;
101   i:integer;
102   sFile:string;
103 begin
104 //  try
105 //    FBarApp := CreateOleObject(‘BarTender.Application‘);
106 //  except
107 //    raise Exception.Create(‘BarTender not installed?‘);
108 //  end;
109   sFile := ExtractFilePath(Application.ExeName)+RID.btw;
110   if not FileExists(sFile) then
111   begin
112     ShowMessage(模板文件(RID.btw)在当前目录下不存在!);
113     Exit;
114   end;
115   FBarApp := GetBarObj;
116   if VarIsEmpty(FBarApp) then Exit;
117 
118   FBarApp.Visible := False;
119   try
120     btFormat := FBarApp.formats.Open(sFile,true,‘‘);
121     Vars := btFormat.NamedSubStrings;
122     for i := 1 to ACopys do
123     begin
124       if VarIsExists(Vars,VARID) then
125       begin
126         btFormat.SetNamedSubStringValue(VARID,Concat(VARID,i.ToString));
127         btFormat.PrintOut(False,False);
128       end;
129     end;
130   finally
131     btFormat.Close(1);
132   //  FBarApp.Quit(1);
133   end;
134 end;
135 
136 procedure TForm1.PrintCS(ACopys: Integer);
137 var
138   Docs,Vars:Variant;
139   i:integer;
140   sFile:string;
141 begin
142 //  try
143 //    FCsApp := CreateOleObject(‘lppx.Application‘);
144 //  except
145 //    raise Exception.Create(‘Codesoft not installed?‘);
146 //  end;
147   sFile := ExtractFilePath(Application.ExeName)+RID.lab;
148   if not FileExists(sFile) then
149   begin
150     ShowMessage(模板文件(RID.lab)在当前目录下不存在!);
151     Exit;
152   end;
153 
154   FCSApp := GetCSObj;
155   if VarIsEmpty(FCSApp) then Exit;
156   FCsApp.Visible := False;
157   try
158     Docs := FCSApp.ActiveDocument;
159     Docs.Open(sFile,false);
160     Vars := Docs.Variables;
161     for i := 1 to ACopys do
162     begin
163       if VarIsExists(Vars,VARID) then
164       begin
165         Vars.Item[VARID].value := Concat(VARID,i.ToString);
166 
167       end;
168       Docs.PrintLabel(1);
169     end;
170     Docs.FormFeed;
171   finally
172     Docs.Close;
173   //  Docs:=Unassigned;
174 //    FCsApp.Quit;
175 //    FCSApp := Unassigned;
176   end;
177 end;
178 
179 function TForm1.VarIsExists(const Vars: Variant; AVarName: string): Boolean;
180 var
181  i:integer;
182 begin
183   Result := False;
184   if VarIsNull(Vars) or VarIsEmpty(Vars) then exit;
185   for i := 1 to Vars.Count do
186   begin
187     Result := SameText(Vars.Item[i].Name,AVarName);
188     if Result then Break;
189   end;
190 end;
191 
192 end.

注:CodeSoft 6在测试时正常,其它版本会自动把lppa.exe 终结,可能是环境的原因。 在窗体创建时建立lppa.exe,关闭时退出。这样可以提高打印速度。

以上是关于CodeSoft和BarTender打印的调用的主要内容,如果未能解决你的问题,请参考以下文章

Delphi调用BarTender8.01打印条码标签

Java实现调用Bartender控制条码打印机

C#程序调用CodeSoft预先设计好的标签模块实现打印功能

VB 调用Bartender打印问题

[C#]调用Bartender服务并打印bartender标签

java怎样调用打印机实现bartender后台打印