前几天项目上用到了水晶报表的条码打印功能

最开始用的字体,code39 code128都试了,可以正常打印,但是扫描枪不识别,

据说code39值两边加*可以扫描到,我没能成功

又在网上找到以下方法,可以打印和扫描。

大致思路是:用一个程序文件生成条码图片(此例规则是Code39,参数Code是要生成条码的值),

然后在报表页面加入一个图片控件,再用该图片控件动态抓取条码图片,显示到报表控件上。

Code39Handler.ashx

就是生成条码图片的文件,参数是Code,加到项目里面,直接访问文件就能看到生成的条码图片,

例如:http://localhost/..../Code39Handler.ashx?Code=123456

代码:

using System;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Text;/// <summary>
/// 用 .NET 繪圖 API,搭配條碼最普遍的 Code 39 編碼規則 (一般超商的讀條碼機都可讀),產生條碼圖檔
/// </summary>
public class Code39Handler : IHttpHandler {public void ProcessRequest (HttpContext context) {//context.Response.ContentType = "text/plain";//context.Response.Write("Hello World");//Logic to retrieve the image file//context.Response.ContentType = "image/jpeg";//context.Response.WriteFile("MyImage01.jpg");string mycode = context.Request["code"];string 字串;string 字元;//字串 = "*-%$*"字串 = "*" + mycode + "*";  //Code 39 的特性是前、後置碼會標識「星號(*)」,表示開始和結束int 畫布高 = 35;int 畫布寬 = 0;int 筆x = 0;int 筆y = 20;//int 筆寬 = 0;if (!string.IsNullOrEmpty(mycode)){畫布寬 = 字串.Length * 13;Bitmap BMP = new Bitmap(畫布寬, 畫布高, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);Graphics G = Graphics.FromImage(BMP);G.TextRenderingHint = TextRenderingHint.AntiAlias;G.Clear(Color.White);Brush 筆刷1 = new SolidBrush(Color.White);G.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;G.FillRectangle(筆刷1, 0, 0, 畫布寬, 畫布高);for (int i = 0; i < 字串.Length; i++){//取得 Code 39 碼的規則字元 = this.genBarcode(字串.Substring(i, 1).ToUpper());for (int j = 0; j < 4; j++){if (字元.Substring(j, 1).Equals("0")){G.DrawLine(Pens.Black, 筆x, 0, 筆x, 筆y);}else{G.DrawLine(Pens.Black, 筆x, 0, 筆x, 筆y);G.DrawLine(Pens.Black, 筆x + 1, 0, 筆x + 1, 筆y);筆x += 1;}筆x += 1;if (字元.Substring(j + 5, 1).Equals("0")){G.DrawLine(Pens.White, 筆x, 0, 筆x, 筆y);}else{G.DrawLine(Pens.White, 筆x, 0, 筆x, 筆y);G.DrawLine(Pens.White, 筆x + 1, 0, 筆x + 1, 筆y);筆x += 1;}筆x += 1;} //end of loopif (字元.Substring(4, 1).Equals("0")){G.DrawLine(Pens.Black, 筆x, 0, 筆x, 筆y);}else{G.DrawLine(Pens.Black, 筆x, 0, 筆x, 筆y);G.DrawLine(Pens.Black, 筆x + 1, 0, 筆x + 1, 筆y);筆x += 1;}筆x += 2;} //end of loopint x = 0;int addx = 13;G.DrawString("-", new Font("Arial", 10, FontStyle.Italic), SystemBrushes.WindowText, new PointF(x, 20));x += addx;for (int k = 0; k < mycode.Length; k++){G.DrawString(mycode.Substring(k, 1), new Font("Arial", 10, FontStyle.Italic), SystemBrushes.WindowText, new PointF(x, 20));x = x + addx;}G.DrawString("-", new Font("Arial", 10, FontStyle.Italic), SystemBrushes.WindowText, new PointF(x, 20));BMP.Save(context.Response.OutputStream, ImageFormat.Jpeg);G.Dispose();BMP.Dispose();}else{畫布寬 = 100;Bitmap BMP = new Bitmap(畫布寬, 畫布高, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);Graphics G = Graphics.FromImage(BMP);G.TextRenderingHint = TextRenderingHint.AntiAlias;G.Clear(Color.White);//未給參數時顯示的提示內容G.DrawString("無條碼產生", new Font("宋体", 12, FontStyle.Regular), SystemBrushes.WindowText, new PointF(0, 20));BMP.Save(context.Response.OutputStream, ImageFormat.Jpeg);G.Dispose();BMP.Dispose();}}// 規則可參考網址 1:http://blog.csdn.net/xuzhongxuan/archive/2008/05/28/2489358.aspx// 規則可參考網址 2:http://blog.163.com/zryou/blog/static/6903184200971704226450//// <summary>/// Code 39 碼的規則。/// Code 39 碼可使用的字元如下:0~9、A~Z、+、-、*、/、%、$、. 及空白字元。    /// </summary>/// <param name="code"></param>/// <returns></returns>public string genBarcode(string code){switch (code){case "0":code = "001100100";break;case "1":code = "100010100";break;case "2":code = "010010100";break;case "3":code = "110000100";break;case "4":code = "001010100";break;case "5":code = "101000100";break;case "6":code = "011000100";break;case "7":code = "000110100";break;case "8":code = "100100100";break;case "9":code = "010100100";break;case "A":code = "100010010";break;case "B":code = "010010010";break;case "C":code = "110000010";break;case "D":code = "001010010";break;case "E":code = "101000010";break;case "F":code = "011000010";break;case "G":code = "000110010";break;case "H":code = "100100010";break;case "I":code = "010100010";break;case "J":code = "001100010";break;case "K":code = "100010001";break;case "L":code = "010010001";break;case "M":code = "110000001";break;case "N":code = "001010001";break;case "O":code = "101000001";break;case "P":code = "011000001";break;case "Q":code = "000110001";break;case "R":code = "100100001";break;case "S":code = "010100001";break;case "T":code = "001100001";break;case "U":code = "100011000";break;case "V":code = "010011000";break;case "W":code = "110001000";break;case "X":code = "001011000";break;case "Y":code = "101001000";break;case "Z":code = "011001000";break;case "*":code = "001101000";break;case "-":code = "000111000"; //好像辨識不出來break;case "%":code = "100101000"; //好像辨識不出來break;case "$":code = "010101000"; //好像辨識不出來break;default:code = "010101000"; //都不是就印 $break;}return code;}public bool IsReusable {get {return false;}}}

把文件加到项目里,打开加好图片控件的报表,右击图片控件,选择[设置对象格式]---[图片]选项卡,最下面有[图形位置]一栏,打开,  下面最大空白框里就写刚才访问Code39Handler.ashx的路径就行。到这里基本就完成了,也可以有很多补充的。。。。。。

注意:

vs自带的报表图片控件是没有【图形位置】这一项的。

一定要把报表装到vs里,否则不显示条码,会显示原图片

CrystalReports2008 下载链接,用浏览器下载老会断...何解?? 用迅雷下载就好好的

https://smpdl.sap-ag.de/~sapidp/012002523100009989492010E/cr2008_sp3_fullbuild.zip

密钥: CFKOA-YOTTM2M-OOUFAFF-N43M 注册号: 6707437608

原文链接:http://www.cnblogs.com/WizardWu/archive/2010/09/14/1825523.html

水晶报表2008 条码打印 扫描相关推荐

  1. 水晶报表2008新增功能点评及仍需改进之处

    水晶报表2008问世已经一年左右了,不过从目前的应用来看 ,应用的并不多. 现在市面上用的最多的还是CR9, VS2005自带版本,VS2008自带版本及 CR XI (R2). 本文的主要内容来自官 ...

  2. 水晶报表2008部署

    1.下载水晶报表2008合并模块 http://resources.businessobjects.com/support/communitycs/FilesAndUpdates/cr120_merg ...

  3. 水晶报表A4纸打印两张中一刀凭证

    现在很多时候都会遇到 水晶报表A4纸打印两张中一刀凭证 单头如下: numbervar firstRecordOfGroup; //numbervar lastRecordOfGroup; //将每组 ...

  4. 水晶报表提示“出现打印错误。将停止打印”的原因,非page_Init

    在水晶报表安装完printControl.cab后,弹出选择打印机的界面后,点确定按钮提示"出现打印错误.将停止打印",这可把我郁闷了,到网上一搜,无法就是page_Init里也需 ...

  5. 水晶报表 动态批量打印本地图片

    目的:从数据库中得到本地图片的路径,再将其打印到报表上,每一个ID查询出来的信息(包括多幅图片)对应报表中的一页 环境:VS2005+自带水晶报表 参考文献:http://babyt.cnblogs. ...

  6. 珠宝条码打印扫描解决方案

    随着人们生活水平的逐步提高,珠宝消费日益增长,据统计,我国珠宝首饰零售规模超过7000亿,过去5年复合增长为15%,是规模增长最为迅速的可选消费品类之一.面对千亿级的消费市场,珠宝行业竞争激烈,人工. ...

  7. 水晶报表报表条码的处理方法

    之前找了N多资料都没有一个完整的实现办法,现在整理完整的实现办法,: 一.用水晶报表做表时: 1.做表电脑安装字体:code128\C39HrP24DhTt 2.设置水晶报表,将要打印为条码的字体设置 ...

  8. access数据库使用水晶报表(PUSH)推模式实现多数据源含子报表的订单打印

    最近改造一个小型购物网站,要求使用水晶报表实现订单打印,本人对水晶报表从一无所知到,到最终弄出来整整花了一夜的时间,特此记录下此文和大家共享. 关于水晶报表更详细的介绍建议大家可以参考阿泰的博客:ht ...

  9. 【PB】程序中在普通激光打印机上实现条码打印

     随着计算机在生产.销售.管理上应用水平的提高以及Internet .Intranet 的普及,条码技术在生产管理.销售管理上的使用越来越多,条码的编码技术和识别技术也得到了较快的发展.我单位因建 ...

最新文章

  1. iOS开发JSON字符串和字典互转
  2. linux内核打开prntk,操作系统实验一向Linux内核增加一个系统调用.docx
  3. 计算机处理信息的方式
  4. Silverlight同步(Synchro“.NET研究”nous)调用WCF服务
  5. 6/100. Invert Binary Tree
  6. 雷军1994年写的诗一样的代码,我把它运行起来了!
  7. JAVA入门级教学之(方法-6)
  8. 瑞幸咖啡上半年营收31.8亿元 同比增长106%
  9. webservice 实现通知支付结果到OA
  10. 关于PPC软件的开发库
  11. 【Spring】注解驱动开发
  12. 计算机sci转让,紧急转让的环境sci,一共四十个选题,2020年上半年出版,包SCI检索...
  13. mysql 重做日志_mysql redo log 重做日志
  14. Android调用getSimSerialNumber获取iccid不完整(RK3288 7.1.2)
  15. 小白求答疑,在vs连接数据库的一段配置代码有问题
  16. python的dev包怎么安装_python-dev如何安装 sudo apt-get install python-dev ?
  17. 阿里云最新可申请试用云产品汇总(免费领阿里云服务器)
  18. 三个数据分析的技巧:找趋势、看分布、做细化
  19. 最新版HBuilderx + 夜神模拟器 模拟器调试设置
  20. IPv6技术精要--第9章 无状态地址自动配置SLACC

热门文章

  1. C++ assert.h头文件
  2. Mysql的深层次研究(下)
  3. Vue 使用百度地图画点线面和标记
  4. jquery fileupload设置http request headers
  5. NILMTK安装的血泪征程(2021-11-04更新)
  6. xpath自定义属性值的取法
  7. Throwable源码异常分析
  8. [Writeup]与佛论禅
  9. java批量下载图片_Java批量写入文件和下载图片的示例代码
  10. linux下做u盘启动权限不够,Linux U盘启动安装制作工具unetbootin - 第一原理 - 小木虫 - 学术 科研 互动社区...