首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

barcode条形码打印和打印预览

2014-07-05 
barcode条码打印和打印预览项目使用VC6的开发环境,需要生成条码显示在View上并打印。使用java时候用过barco

barcode条码打印和打印预览
项目使用VC6的开发环境,需要生成条码显示在View上并打印。
使用java时候用过barcode4j,C/C++应该有可用的类库吧,
当然最好是开源的,请各位大侠指点。

[解决办法]
有一个active x控件 ,叫做msbcode9.ocx 这个可以用
[解决办法]
也可以自己编,就是麻烦些,VC大多数都是这自己编的,不象其它的软件都有现成的控件或大多数代码都被开发软件代劳了
[解决办法]
C/C++ 条形码开发包
http://www.oschina.net/project/tag/238/barcode?lang=21&sort=view

Barcode SDK
http://www.leadtools.com/sdk/barcode/default.htm?SrcOrigin=Google-CPC-%2Bbarcode%20%2Bc%2B%2B&MatchType=b&AdPos=1t1&gclid=CIG41Iepw7ACFUWHpAodKFBMpA
[解决办法]
这是C#的生成12位39标准码的函数。返回了一个字符串,你如果急,就先参照转换成VC的。
算法很简单。
得到条码的字符串之后,再用gdi plus画线即可得到条码
public static string Get39_12(string s, int width, int height)
{
Hashtable ht = new Hashtable();

#region 39码 12位
ht.Add('A', "110101001011");
ht.Add('B', "101101001011");
ht.Add('C', "110110100101");
ht.Add('D', "101011001011");
ht.Add('E', "110101100101");
ht.Add('F', "101101100101");
ht.Add('G', "101010011011");
ht.Add('H', "110101001101");
ht.Add('I', "101101001101");
ht.Add('J', "101011001101");
ht.Add('K', "110101010011");
ht.Add('L', "101101010011");
ht.Add('M', "110110101001");
ht.Add('N', "101011010011");
ht.Add('O', "110101101001");
ht.Add('P', "101101101001");
ht.Add('Q', "101010110011");
ht.Add('R', "110101011001");
ht.Add('S', "101101011001");
ht.Add('T', "101011011001");
ht.Add('U', "110010101011");
ht.Add('V', "100110101011");
ht.Add('W', "110011010101");
ht.Add('X', "100101101011");
ht.Add('Y', "110010110101");
ht.Add('Z', "100110110101");
ht.Add('0', "101001101101");
ht.Add('1', "110100101011");
ht.Add('2', "101100101011");
ht.Add('3', "110110010101");
ht.Add('4', "101001101011");
ht.Add('5', "110100110101");
ht.Add('6', "101100110101");
ht.Add('7', "101001011011");
ht.Add('8', "110100101101");
ht.Add('9', "101100101101");
ht.Add('+', "100101001001");
ht.Add('-', "100101011011");
ht.Add('*', "100101101101");
ht.Add('/', "100100101001");
ht.Add('%', "101001001001");
ht.Add('$', "100100100101");
ht.Add('.', "110010101101");
ht.Add(' ', "100110101101");
#endregion
#region 39码 9位
//ht.Add('0', "000110100");
//ht.Add('1', "100100001");
//ht.Add('2', "001100001");
//ht.Add('3', "101100000");
//ht.Add('4', "000110001");
//ht.Add('5', "100110000");
//ht.Add('6', "001110000");
//ht.Add('7', "000100101");
//ht.Add('8', "100100100");


//ht.Add('9', "001100100");
//ht.Add('A', "100001001");
//ht.Add('B', "001001001");
//ht.Add('C', "101001000");
//ht.Add('D', "000011001");
//ht.Add('E', "100011000");
//ht.Add('F', "001011000");
//ht.Add('G', "000001101");
//ht.Add('H', "100001100");
//ht.Add('I', "001001100");
//ht.Add('J', "000011100");
//ht.Add('K', "100000011");
//ht.Add('L', "001000011");
//ht.Add('M', "101000010");
//ht.Add('N', "000010011");
//ht.Add('O', "100010010");
//ht.Add('P', "001010010");
//ht.Add('Q', "000000111");
//ht.Add('R', "100000110");
//ht.Add('S', "001000110");
//ht.Add('T', "000010110");
//ht.Add('U', "110000001");
//ht.Add('V', "011000001");
//ht.Add('W', "111000000");
//ht.Add('X', "010010001");
//ht.Add('Y', "110010000");
//ht.Add('Z', "011010000");
//ht.Add('-', "010000101");
//ht.Add('.', "110000100");
//ht.Add(' ', "011000100");
//ht.Add('*', "010010100");
//ht.Add('$', "010101000");
//ht.Add('/', "010100010");
//ht.Add('+', "010001010");
//ht.Add('%', "000101010");
#endregion

s = "*" + s.ToUpper() + "*";

StringBuilder strBResult = new StringBuilder();//二进制串

try
{
foreach (char ch in s)
{
strBResult.AppendFormat("{0}{1}", ht[ch].ToString(), "0");

//result_bin += ht[ch].ToString();
//result_bin += "0";//间隔,与一个单位的线条宽度相等
}
}
catch { return "存在不允许的字符!";}

return strBResult.ToString();
}
[解决办法]
这是调用上面的方法,并且画线条码图。用的是gdi plus,这和vc没多大区别。 
static bool GenerateBarCode(string strUniqeid, string strBarCodeNumber)
{
string bardata = strBarCodeNumber;

// Code 39 Symbology Barcodes always start and end with the "*" character.
string strEncodedData = DrawCode.Get39_12(bardata, 1, 100);
int nBarWidth = 247;
int nBarHeight = 39;

//Create a white image.
Bitmap bitMapImage = new Bitmap(nBarWidth, nBarHeight);
Graphics gBar = Graphics.FromImage(bitMapImage);
gBar.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
gBar.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
gBar.CompositingQuality = CompositingQuality.HighSpeed;
gBar.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
gBar.Clear(Color.White);

int nLeft = 0 + (nBarWidth / 2 - strEncodedData.Length / 2);
int nTop = 2;
int nLeftEnd = nLeft;
int nTopEnd = 36;

Pen blackPen = new Pen(Color.Black, 1);
Pen whitePen = new Pen(Color.White, 1);

for (int j = 0; j < strEncodedData.Length; j++)
{
string checkstr = strEncodedData.Substring(j, 1);


if (checkstr.Equals("1"))
{
gBar.DrawLine(blackPen, nLeft + j, nTop, nLeftEnd + j, nTopEnd);
}
else
{
gBar.DrawLine(whitePen, nLeft + j, nTop, nLeftEnd + j, nTopEnd);
}
}
bitMapImage.Save(String.Format("{0}\\{1}_BarCode.jpg", strOutputFolder, strUniqeid));
gBar.Dispose();

bitMapImage.Dispose();
return true;
}
[解决办法]
改成功后传上来,大虾都可以来试试哈
[解决办法]
打印与屏幕是不同的设备,以下将屏幕参数转换为打印参数实例供参考。
建立结构

C/C++ code
private:    struct {        int        width;                // 页面宽度        int        height;                // 页面高度        int        quality;            // 打印分辨率        int        mdw;                // 每毫米像素    }m_printParam;
[解决办法]
看效果
发我csdn邮箱就可以了

热点排行