当前位置:首页 > 知识经验 > 正文内容

C# bartender封装dll异常

作者: 葛屹肃 | 日期: 2023-08-19 | 分类: 知识经验

bartender提供C#的SDK,使用C#引用SDK可以正常打印标签,那么,能否使用C#将bartender打印功能二次封装为dll,供其他开发语言调用呢?

C# bartender封装dll异常

实践出真知,简单写了一个使用bartender打印的dll,以下是dll的源码:

using System;
using System.Runtime.InteropServices;
using Seagull.BarTender.Print;

namespace bDll
{
public interface ILabelPrint
{
void Create();
void Destroy();
int PrintLabel();
}

public class LabelPrint: ILabelPrint
{
static Engine engine = null; // The BarTender Print Engine
static LabelFormatDocument format = null; // The currently open Format
public void Create()
{
if (engine == null)
{
engine = new Engine(true);
}
}

public void Destroy()
{
if (engine != null)
{
engine.Stop(SaveOptions.DoNotSaveChanges);
engine = null;
}
}

public int PrintLabel()
{
string labelpath = @”d:\1.btw”;
string printdate = “P1&111^P2&222″;
string AllLabelName = “”;
int i;
int len;
string sSubName = “”;
string sSubValue = “”;
string printer = “CutePDF Writer”;
int is_ok = 1;

format = engine.Documents.Open(labelpath);
try
{
string[] sSubstrings = printdate.Split(‘^’);
for (i = 0; i < format.SubStrings.Count; i++)
{
AllLabelName += format.SubStrings[i].Name + “$”;
}
for (i = 0; i < sSubstrings.Length; i++)
{
len = sSubstrings[i].IndexOf(“&”);
sSubName = sSubstrings[i].Substring(0, len);
if (AllLabelName.IndexOf(sSubName) != -1)
{
sSubValue = sSubstrings[i].Substring(len + 1, sSubstrings[i].Length – len – 1);
format.SubStrings[sSubName].Value = sSubValue;
}
}
format.PrintSetup.PrinterName = printer;//打印机名
format.PrintSetup.IdenticalCopiesOfLabel = 1;
format.Print();
}
catch
{
is_ok = 0;
}
finally
{
format.Close(SaveOptions.DoNotSaveChanges);
}
return is_ok;
}
}
}

测试了下,发现若是放在C#应用程序中调用,能正常打印,而使用delphi调用的话,会卡在打印标签模板这行代码。

format = engine.Documents.Open(labelpath);

目前不知原因,后面会查下资料,看能否实现,若是成功会告诉大家,若是此路不通,此事至此为止。

版权声明:本文由〖葛屹肃〗发布,转载请注明出处!
文章链接:https://www.geyisu.com/3209.html

  • 评论:(0)

已有 0 位网友发表了一针见血的评论,你还等什么?

◎欢迎大家参与讨论