用水晶报表做条码打印

不知道各位有没有直接在WORD或EXCEL里直接设置过条码,然后打印出来? 如果直接把内容设置为条码字体,打印出来后是扫描枪是无法读取的. 我们都知道要在内容前后加上"*"(这里和""只起引用,实际不用). 当然,这种只是39码的起始字符. 但在实际应用途中,39码往往不能够满足要求,需要打印成CODE128码,但这时候就不能简单的在打印内容前后加入"*"后设置为CODE128字体就可以了. 这需要通过算法添加不同的起始符. 下面结合我在实际的应用中,讲一下这两种方法(实际上是一种),

1. 是直接在SQL里取出相应的内容就已经添加.

2. 如果数据是在画面生成,但不需经过数据库获取的话,就只能在报表里直接实现了.

把函数放到SQL里

ALTER FUNCTION [dbo].[StrToCode128B](
 @Str NVARCHAR(200)=‘GetonJew‘)--128B码:ChrW(204)
 RETURNS NVARCHAR(200)
AS  --  by GetonJew
BEGIN
 DECLARE @checkB INT
 DECLARE @i INT ,@j INT
 DECLARE @str2 NVARCHAR(2)
 SET @i=1  

 SET @checkB = 1  --开始位的码值为104 mod 103 =1
                  --
 WHILE @i <= LEN(@Str)
 BEGIN
  SET @str2 = SUBSTRING(@Str,@i,1)
  SET @j = ASCII(@str2) --不过滤无效字符,比如汉字
  IF @j<135
  BEGIN
   SET @j=@j-32
  END
  ELSE IF @j>134
  BEGIN
   SET @j=@j-100
  END
  SET @checkB = (@checkB + @i * @j) % 103   --计算校验位
  SET @i=@i+1
 END    

 IF @checkB<95 AND @checkB>0 --有的资料直接求103的模,解说不充分,因为有的校验位超过127时,系统会"吃"掉它们(连带休止符).
 BEGIN
  SET @checkB = @checkB + 32
 END
 ELSE IF @checkB > 94  -- ‘字体设置时,字模被定义了2个值.观察字体文件时能发现.
 BEGIN
  SET @checkB = @checkB + 100
 END  

     RETURN NCHAR(204) + @Str + CASE WHEN @checkB>0 THEN NCHAR(@checkB) ELSE NCHAR(32) END + NCHAR(206)  

END 

在报表中的【自定义函数】新建一个函数保存为Code128,名字随便定义,在代码框中输入如下代码(Basic语法):

Function Code128  ( strIn As string ) As String  

Dim intLoop As Number
Dim intPosition as Number
Dim intTotalVal as Number
Dim strOut as String
Dim strSpChr as String
Dim strEndChr as String
Dim intEndNo as Number
strOut = ""
for
intLoop = 0 to Len(strIn) - 1
intPosition = intLoop + 1
strSpChr = Mid(strIn, intPosition, 1)
intTotalVal = intTotalVal + (Asc(strSpChr) - 32) * intPosition
next 

intTotalVal = intTotalVal + 104 

intTotalVal = intTotalVal mod 103 

If intTotalVal >= 95 Then 

Select Case intTotalVal
Case 95
strEndChr = "Ã"
Case 96
strEndChr = "Ä"
Case 97
strEndChr = "Å"
Case 98
strEndChr = "Æ"
Case 99
strEndChr = "Ç"
Case 100
strEndChr = "È"
Case 101
strEndChr = "É"
Case 102
strEndChr = "Ê"
End Select
Else
intTotalVal = intTotalVal + 32
strEndChr = Chr(intTotalVal)
End If
Code128 = "Ì" + strIn + strEndChr + "Î"   

End Function 

下面是水晶报表设计,为显示添加起始符后的数据,这里的数量就特意不以条码字体显示

下图是调出来的结果.

时间: 2024-11-11 03:32:49

用水晶报表做条码打印的相关文章

(转)VS2010结合水晶报表做条码标签打印功能

本文转载自:http://blog.sina.com.cn/s/blog_552ca1400100y6dd.html 先来个功能效果图: 大家都知道VS2005和VS2008软件本身是包含水晶报表插件的,而新版本的VS2010去掉了SAP水晶报表的插件,想要在VS2010中使用水晶报表首先要下载SAP的插件CRforVS_13_0.exe,我这下载的是13版本的. 下载完成后安装,现在就可以在VS2010里面使用了,哈哈. 1.准备工作,条码实现 具体如何实现条码,这里不再赘述,详细请参考:ht

水晶报表 如何设置水晶报表 crystal reports 的字段自动换行

在做报价系统时候水晶报表做最后报表的产出.由于规格字数较长,用户在预览报表时无法看全规格,规格多出部分会导致重叠现象. 百度文库提供一个解决方案: 1.如何设置水晶报表(crystal reports)的字段自动换行 水晶报表从数据库中读取的数据,当字段内容比较长时,很影响美观,需要设置它为自动换行来显示. 影响美观的没有自动换行的报表图示: OK,看了图示,觉得实在太难看了,好,我们来设置它自动换行吧: 1.打开字段的格式化字段属性,将其公用标签下的可以扩大(CANGROW)属性选上,如图:

水晶报表制作甘特图实例

最近两周一直在用水晶报表做图表,像柱状图.折线图.甘特图.饼图等,原以为采用推模式用存储过程把数据推给图表就行了.但在实际操作过程中遇到了不少的细节问题. 1)图例标签文本 如图所示,默认情况下图例中的是 数据库的字段,如果是sum则是  数据库字段+"的和",这显然不是我们想要的,而且在vs集成版本里面这个标签文本是无法修改的. 如果是独立版本的话则可以在预览时点击相应的图例项然后编辑轴标签 但是如果采用推模式的话预览的时候没有数据看不到图表,也就无法进行设置了. 2)折线图线条的粗

水晶报表制作甘特图教程

最近两周一直在用水晶报表做图表,像柱状图.折线图.甘特图.饼图等,原以为采用推模式用存储过程把数据推给图表就行了.但在实际操作过程中遇到了不少的细节问题. 1)图例标签文本 如图所示,默认情况下图例中的是 数据库的字段,如果是sum则是  数据库字段+“的和”,这显然不是我们想要的,而且在vs集成版本里面这个标签文本是无法修改的. 如果是独立版本的话则可以在预览时点击相应的图例项然后编辑轴标签 但是如果采用推模式的话预览的时候没有数据看不到图表,也就无法进行设置了. 2)折线图线条的粗细 做了一

C# 用vs2008连接SQL数据库做动态水晶报表

博主是个还在上大学的新手,如果有什么说错的地方请务必帮我指出来,谢谢! 想要完成一个能够动态改变其中数据的水晶报表,可以通过创建一个 数据的中转站来存储和输出数据的方式. 借由这个中转站,我们可以通过为它动态输入数据,然后再将数据导出到水晶报表,来达到得到有动态数据的水晶报表的目的. 仅在vs2008中,很多它自带的应用也可以达到中转站的作用,比如数组,数据集等. 博主最近刚在学SQL所以尝试了用VS连接数据库来做水晶报表. 1.首先,博主在SQL中创建了名为xxs的数据库,然后再在数据库xxs

小结--通过水晶报表打印表格数据步骤

最近项目用到水晶报表来打印表格数据,现在温故一下: 1.安装CRforVS_13_0水晶报表. 2.在vs2010中创建.xsd 文件,往里面创建一个DataTable,并设置每个字段的数据类型. 3.创建.rpt(报表文件),在里面画要显示的表格,然后绑定数据库字段(右击数据库字段-数据库专家-我的连接-展开树节点找到新建的DataTable)将DataTable中字段拖入表格相应位置. 4.在上层页面的打印事件中New出新建的DataTable,接着将要打印的表格数据(例如:DataGrid

水晶报表打印

水晶报表打印问题: ReportDocument aReportDocument = new ReportDocument(); //加载报表 aReportDocument.Load(@Application.StartupPath + Properties.Settings.Default.MainReportPath); //子报表数据源 aReportDocument.Subreports["SonRpt.rpt"].SetDataSource(sonDs); //传递参数 a

C#之二十三 打印和水晶报表

打印组件介绍 打印是常用的的功能,打印的原理从本质上和Windows窗体画图的原理是一样的,你在窗体里面画了一个圆,那么同样的代码,打印机也会在纸张的同一个位置打印了出一个圆,它们所不同的就是输出终端而已,下面让我们先来看一下关于打印的一些类. 1.PrintDocument类 PrintDocument组件用于设置一些属性,这些属性说明在基于Windows操作系统的应用程序中要打印什么内容以及打印文档的能力,可将它与PrintDialog组件一起使用来控制文档打印的各个方面,PrintDocu

VS.NET2010水晶报表安装部署[VS2010]

水晶报表VS2010版IDE安装标准版SAP Crystal Reports, version for Visual Studio 2010 - Standard: 下载地址: http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_13_0_1.exe 下载安装后打开VS2010就可以在左边工具栏中看到CRYSTALREPORTVIEWER,并且可以新建水晶报表了: 用法跟以前版本的用法类似:  不过要注意下面几点: a. 运行