生成条形码:
1.下载压缩包barcode4j-2.0alpha2-bin.zip和barcode4j-2.0alpha2-src.zip。
2、解压barcode4j-2.0alpha2-bin.zip这个包,在build目录下有barcode4j.jar,在lib目录下有avalon- framework-4.2.0.jar, 将barcode4j.jar和avalon-framework-4.2.0.jar添加到项目的lib中,刷新工程,然后在项目配置中将这两个jar 包添加到classpath里面去。
3、解压将barcode4j-2.0alpha2-src.zip,将src\java\org\krysalis\barcode4j\servlet目录下的BarcodeServlet.java类的代码拷出来,修改默认的图片显示方式,BarcodeServlet.java第168行的默认图片显示格式改成jpeg(因为不是所有的浏览器都支持svg格式,也不是所有的浏览者都愿意给自己的浏览器加一个这样的插件)
下载barCode.zip
配置 web.xml
<servlet>
<servlet-name>CreateBarCode</servlet-name>
<servlet-class>com.soft4j.barcode.BarCodeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CreateBarCode</servlet-name>
<url-pattern>/CreateBarCode</url-pattern>
</servlet-mapping>
表示要访问/createBarCode实际是访问barCodeServlet类。
页面上写<img src=”xxx/CreateBarCode?code=xxxx&barType=CODE39&checkCharacter=n&checkCharacterInText=n”>类似形式,参数如下:
barType(默认为CODE128): 条码类型.支持18钟类型,分别是CODE39,CODE39EXT,INTERLEAVED25,CODE11,CODABAR,MSI,UPCA,IND25,MAT25,CODE93,EAN13,EAN8,UPCE,CODE128,CODE93EXT,POSTNET,PLANET,UCC128 .
code: 要打印的条码内容.
width(默认为自适应,一般不用自行设置): 图片宽度.width,height要同时都设置才有效.
height(默认为自适应,一般不用自行设置): 图片高度.width,height要同时都设置才有效.
st(默认为y显示): 是否显示条码内容(show text).默认会在条码图片下方显示条码内容,有效值为y和n.
textFont(默认为Arial|PLAIN|11): 条码文本的字体,字体有效格式为<font name>|<style>|<size>.Style可以是PLAIN,ITALIC或BOLD.
fontColor(默认为黑色): 条码文本的颜色,有效值为RED,BLUE,GREEN,BLACK,GRAY,LIGHTGRAY,WHITE,DARKGRAY,YELLOW,ORANGE,CYAN和MAGENTA.
barColor(默认为黑色): 条码的颜色.
backColor(默认为白色): 图片背景颜色.
rotate(默认为0): 设置条码旋转角度.有效值为0(不旋转),90(旋转90度),180(旋转180度),270(旋转270度).
barHeightCM(默认为1厘米): 条码的高度.
x(默认为0.03厘米,一般不用自行调整): 条码符号中窄单元的标称尺寸,最小可设置为0.001即1象素,通常以0.03递增.
n(默认为2倍): 宽窄比,平均宽条的条宽与平均宽空的空宽之和(条码字符间隔不计在内)除以两倍窄单元尺寸.它是宽度调节编码法中的技术参数.
leftMarginCM(默认为0.3厘米): 条码与图片左右边的距离.
topMarginCM(默认为0.2厘米): 条码与图片上下边的距离.
checkCharacter(默认为y,一般不用自行设置): 是否自动计算check character,有效值为y和n.
checkCharacterInText(默认为y,一般不用自行设置): 条码内容是否自动计算check character,有效值为y和n.
Code128Set(默认为0自动选择,一般不用设置): 设置CODE128中使用的字符集.有效值为0,A,B,C.
UPCESytem(默认为0,一般不用自行设置): UPCE中使用的编码系统.有效值为0和1.
————————————
其中关键的参数主要是 barType,code这2个. 另外把checkCharacter和checkCharacterInText这2个参数设置成n, 如果是y的话,会在你的条形码后面追加一个校验码, 虽然不影响使用(扫描设备扫描条形码得到数据不会出现校验码),但是看着比较别扭(如下图).
/*************************************************************************************************/
读取条形码如下:
更详细关于串口的如下:http://fansong1983.blog.163.com/blog/static/271481020083711312229/
需要到其官方主页http://java.sun.com/products/javacomm/下载这个javax.comm,
将下载的文件解压缩后,在\javacomm20-win32\commapi目录下有必需的三个文件comm.jar,javax.comm. properties和win32comm.dll。将文件comm.jar拷贝到%JAVA_HOME%\jre\lib\ext;文件
javax.comm. properties拷贝到%JAVA_HOME%\jre\lib; 文件win32comm.dll拷贝到%JAVA_HOME%\bin。注意%JAVA_HOME%是jdk的路径,而非jre。
代码如下:
CommPortIdentifier commPort = CommPortIdentifier.getPortIdentifier("COM1");//获取串口1
serialPort = (SerialPort)commPort.open("Barcode Scanner",3000);//
inputStream = new BufferedReader (new InputStreamReader(new BufferedInputStream(serialPort.getInputStream())));//获取输入流
serialPort.setInputBufferSize(200);//设置缓冲区
serialPort.addEventListener(this);//设置监听器
serialPort.notifyOnDataAvailable(true);//设置监听模式,如果有数据,就激活
serialPort.setSerialPortParams(BAUD_RATE, SerialPort.DATABITS_8,SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);//设置波特率,设置数据类型,优先级等串口参数
我们使用输入流来将字节数组转换成 String。但是,我们发现当使用不同的条形码扫描器和条形码时有下列问题。
当处理大于 100 个字符的大条形码时,会发出两个 serialEvent:第一个 serialEvent 的缓冲区只被部分填充,第二个 serialEvent 的缓冲区被完全填充。解决这个问题的最简单方法是当缓冲区中的
数据不完整时忽略该事件,并等待直到它完整为止才将它传递到侦听器。
if (inputStream.available() < length)
return;
后,当读取和转换条形码时,我们必须通知所有侦听器有关新 String 的信息。但是,在侦听器的所有 barCodeScanned() 方法中循环很费时,尤其当它们查询数据库时(正如它在本案例中所做的)。
在 Java 抽象窗口工具包(Java Abstract Window Toolkit,AWT)模型中,如果还没有完成第一个事件的 actionPerformed() ,那么单击按钮两次将不会发出两个 ActionEvent。这对于条形码扫描器
来说是无法接受的,因为当快速读取条形码时,我们不能允许丢失它们。因此,我们必须为每个条形码读取产生一个新线程,使该线程调用并等待 AWT 线程,确保在发生“象机关枪扫射一样连续快速扫
描”时不会丢失条形码。
您可以在条码单元格中显示一个条码。不同的条码种类都是可用的,比如零售商品中使用的条码,邮局中使用的条码,等等。您可以设置条码显示的不同的高度和宽度。
您可以使用BarCodeCellType类来设置条码单元格及其属性。使用下列的步骤创建一个条码单元格。
自定义外观
您可以使用下列属性自定义条码单元格:
属性 | 描述 |
---|---|
AcceptsCheckDigit | 设定是否在输入中接受检测位。 |
AdjustSize | 设定是否根据条码的内容调整条码的大小。 |
AutoStretch | 设置大小是否是以单元格大小为依据。 |
BarAdjust | 设定是否调整条码的宽度为最恰当的宽度。 |
BarCodePadding | 设置条码左边和右边的边距。 |
BarSize | 设置条码的高度和宽度。 |
DisplayCheckDigit | 设置条码的检测为是否可用。 |
DisplayMode | 设置条码是否可以进行条码图像绘制。 |
FixedLength | 设置条码值的固定位的个数。 |
IsFormulaValue | 决定编辑器是否包含一个公式。 |
Message | 设定是否在条码图的下方显示自定义的信息字符串(如果条码类型允许的话)。 |
MessagePosition | 设置条码图下方的自定义信息的对齐方式。 |
MessageValue | 设定条码下方显示的自定义信息。 |
MinimumHeight | 设置整个条码的最小高度。 |
ModuleSize | 设置条码单元的大小。 |
Resolution | 设置条码的分辨率。 |
Rotation | 设置条码的旋转角度。 |
Type | 设置条码的条码类型 |
Unit | 设置条码的测量单元。 |
FixedLength属性仅仅适用于PostNet,ITF或者Code39条码类型。PostNet条码选项允许比FixedLength属性设置值少一位。
只有条形码类型在它的值下面显示一条信息(被Message,MessagePosition,以及MessageValue属性设置)。
条码类型
这里的示例图片显示了每一个支持的条形码类型,这些条形码类型可以使用Type属性进行设置。
条码类型 | 示例条码图 |
---|---|
Code128 | |
Code39 | |
Code49 | |
Code93 | |
EAN128 | |
ITF | |
Jan13 | |
Jan8 | |
JapanesePostal | |
NW7 | |
PDF417 | |
PostNet | |
QRCode | |
UPC |
自定义信息
您可以在一些条码类型的条码底部显示一条自定义的文本信息。 它支持在条码图形下方显示数值的条码类型。(比如说,PostNet,PDF417, JapanesePostal,以及 QRCode 并不会显示一条信息)。在这个示例中,原有信息值已经被文本信息所替换。生成条码图片的代码显示在下方。 您可以使用这些属性:Message, MessagePosition, 和 MessageValue设置信息。
[C#]
FarPoint.Win.Spread.CellType.BarCodeCellType barc = new FarPoint.Win.Spread.CellType.BarCodeCellType();
barc.DisplayMode = FarPoint.Win.Spread.CellType.BarCodeDisplayMode.Image;
barc.Message = true;
barc.MessagePosition = FarPoint.Win.Spread.CellType.BarCode.MessagePosition.Left;
barc.MessageValue = "Display This Instead of Value";
barc.Type = new FarPoint.Win.Spread.CellType.BarCode.UPC();
fpSpread1.ActiveSheet.Columns[0].Width = 220;
fpSpread1.ActiveSheet.Rows[0].Height = 100;
fpSpread1.ActiveSheet.Cells[0, 0].CellType = barc;
fpSpread1.ActiveSheet.Cells[0, 0].Value = 36000280753;
[Visual Basic .NET]
Dim barc As New FarPoint.Win.Spread.CellType.BarCodeCellType
barc.DisplayMode = FarPoint.Win.Spread.CellType.BarCodeDisplayMode.Image
barc.Message = True
barc.MessagePosition = FarPoint.Win.Spread.CellType.BarCode.MessagePosition.Left
barc.MessageValue = "Display This Instead of Value"
barc.Type = New FarPoint.Win.Spread.CellType.BarCode.UPC
FpSpread1.ActiveSheet.Columns(0).Width = 220
FpSpread1.ActiveSheet.Rows(0).Height = 100
FpSpread1.ActiveSheet.Cells(0, 0).CellType = barc
FpSpread1.ActiveSheet.Cells(0, 0).Value = 36000280753
请参阅
请注意某些单元格类型中的图形化元素可能会被XP的主题(虚拟样式)所影响。设定Spread控件的 VisualStyles属性为“off”以便使图形化单元格类型虚拟自定义形式得以实现。更多信息请参阅 在控件上使用XP主题 。
更多有关这个单元格类型的属性和方法的信息,请参阅 BarCodeCellType 类。
更多有关其他的图形化单元格类型的信息,请参阅 使用图形化单元格类型 。
使用属性窗口
- 在设计阶段,在属性窗口中,选择Spread控件。
- 选择该表单的属性。
- 点击按钮显示表单集合编辑器。
- 在成员列表中,选择单元格要进行显示的表单。
- 在属性列表中,选择单元格属性然后点击按钮显示单元格,列,和行的编辑器。
- 选择您想设置单元格类型的单元格。
- 在属性类表中,选择CellType属性并且选择条码单元格属性。
- 展开由单元格类型属性下面的属性组成的列表。根据需要,选择并且设置这些指定的属性。
- 点击确定关闭单元格,列,和行的编辑器。
- 点击确定关闭表单集合编辑器。
使用代码
- 通过创建一个BarCodeCellType类的实例 定义一个文本单元格。
- 指定条型码单元格属性。
- 通过设置一个单元格,一行,一列,或者样式的CellType属性为BarCodeCellType 对象,将条形码单元格类型赋给一个单元格或者一组单元格。
示例
[C#]
FarPoint.Win.Spread.CellType.BarCodeCellType brcdcell = new FarPoint.Win.Spread.CellType.BarCodeCellType(); FpSpread1.Sheets[0].Cells[0, 0].CellType = brcdcell; FpSpread1.Sheets[0].Cells[0, 0].Value = "12345";
[Visual Basic]
Dim brcdcell As New FarPoint.Win.Spread.CellType.BarCodeCellType FpSpread1.Sheets(0).Cells(0, 0).CellType = brcdcell FpSpread1.Sheets(0).Cells(0, 0).Value = "12345"
使用Spread设计器
- 在工作区域中选择一个单元格或者若干单元格。
- 在属性列表中,在Misc策略中,选择CellType。 在下拉菜单中,选择文本单元格类型。随即将展开一个由单元格类型属性以及各种针对此单元格类型可用的各种属性组成的窗口, 根据需要选择并且设置这些属性。
或者右击单元格或若干单元格并且选择单元格类型。 在列表中,选择“条形码”。在单元格类型编辑器中,设置您所需要的属性,点击应用。
- 在文件菜单中,选择“应用并退出”以便使您的更改及时生效并且退出Spread设计器。