最近一个需求是创建电子收据的Barcode和OCR。关于创建OCR字符的文章在国内很少出现,大部分内容都是关于打印机出错,需导入ocr.ttf字体。但是目前我面临的问题是显示ocr.ttf字体在pdf上,所以这里总结最近实现这个功能的过程。

一、OCR扩展

1.1 前言

OCR技术是光学字符识别的缩写(Optical Character Recognition),是通过扫描等光学输入方式将各种票据、报刊、书籍、文稿及其它印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算机输入技术。“OCR”位代表“光学字符识别”。“A”是字母表中的第一个字母;这告诉您,奥尔- a是第一个为OCR目的定制开发的字体。(oc - b是第二个!)
光学字符识别与磁读非常不同!图像扫描器(或检查阅读器)捕捉纸质文档的图像(或检查)——我们称之为“扫描”。在这一点上,被扫描的图像只不过是一个无意义的密集点云在一个更轻的背景上。OCR软件从图像中“提取”文本,识别形状并分配字符。因此,纸质文档无需重新输入就可以转换成计算机数据! OCR-a程序字体是根据ANSI INCITS 17-1981 (R2002)(前身为ANSI X3.17-1981 (R2000))创建的。USPS兼容性是通过使用9pt IDAutomationOCRa字体实现。欧元银行和德国的银行支票可以用欧元-a程序字体打印,这种字体包括用于打印欧洲银行支票的椅子、叉、钩和欧元等特殊符号。大小为1的IDAutomationOCRa字体(支票schriften)应该用于打印德国银行支票。
下表列出了这些独特字符的位置:


1.2 安装及导出OCR字体

1.2.1 Windows安装OCR

下载网址:https://www.wfonts.com/font/ocr-a

下载完后拖住OCRAExtended.ttf文件到C:\Windows\Fonts,会自动安装。
点击"查找字符",找到需要的字体Unicode码,Unicode码可直接于Jaspersoft中使用。

1.2.2 Jaspersoft安装OCR

OCR字体依赖于ttf文件,考虑到java代码开发,需生成一个jar包导入lib中创建依赖包。

①选择Window-》Preperences

②导入ttf文件

③点击Export导出为jar文件

④Java项目导入OCRAExtended.jar

⑤添加OCRAExtended.jar到Build Path中
右键jar包-》Build Path-》Add to Build Path

⑥导入barcode开发包

1.3 JasperSoft引用OCR字体

“222B"代表的是unicode码,如果要想显示字符,需在前面加上”\u",即"\u222B"。


Font需指定OCRAExtended字体。

二、Jaspersoft Studio 开发

2.1 前言

JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式。该库完全由Java写成,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。JasperReport是开源的,对于开发者来说是个不错的选择。

2.2 安装Jaspersoft studio

下载 Library Jar包和模板设计器Jaspersoft studio。并安装Jaspersoft studio。
官网地址下载:https://community.jaspersoft.com/community-download

选择电脑安装所需版本:

2.3 Jaspersoft 介绍

2.3.1 介绍

1)它可以PDF,HTML,XML等多种形式产生报表或动态报表,在新版本还支持CSV,XLS,RTF等格式的报表;
2)它按预定义的XML文档来组织数据,来源多(如:关系数据库,Java容器对象(collection,arrays)等);
报表的填充过程:
先产生报表设计对象->序列化该对象->存储在磁盘或网络->产生XML文件(表格数据)。
表单的设计过程就是用定义于XML文件中的Java表达式来实现报表的设计。
3)它带数据一致性验证;
4)报表引擎必须先接受数据(通过参数等多种形式)来产生报表,更多的是来自数据源,引擎直接接收用于填充表格的数据源对象,或者通过自身提供的JDBC连接对象来处理数据库的数据;
5)报表最终要产生一个新的对象来进行填充操作,从而产生打印文档对象,这也是存储在磁盘或网络传输介质的序列化对象;
6)内置浏览器能直接查看结果,以PDF,HTML,XML导出;
7)重要的类:
net.sf.jasperreports.engine.design.JasperDesign
其实例是用于报表产生的原始类;
net.sf.jasperreports.engine.design.JasperReport
表现了报表设计对象,是作为报表的编译过程的结果而被实例化,是向报表中填充数据的准备。

2.3.2 结构

JasperReports用XML文件来定义,约定用jrxml作为文件的后缀名。
1)主要元素:
根元素

报表的标题页眉正文页脚定义报表部件,以上所有元素都包含一个band元素作为其唯一子元素。 除了根元素,其余元素是可选的。 2)以JasperReports6.1.0版本为例,一个JasperReports项目需要如下jar包: 包名 说明 jasperreports-6.1.0.jar JasperReports API Jasperreports-fonts-6.1.0.jar JasperReports Fonts API commons-beanutils-1.9.2.jar JavaBeans Utility classes commons-collections-3.2.1.jar Collections framework extension classes commons-digester-1.7.jar classes for processing XML documents commons-logging-1.2.jar Logging classes poi-2.0-final-20040126.jar Jarkarta POI API to generate an Excel Document

2.3.3 报表

1)报表文件格式
设计模板时可以以HTML,PDF,XML方式预览,用它生成的文件有.jrxml和.jasper两种文件。
.jrxml:是可视化编辑的xml文件;
.jasper:经编译后生成的类文件,即报表模板文件。
2)报表的输出格式
其预览输出格式有:PDF,HTML,CSV。JAVA2D,EXCEL,纯文本,JRView。
注意:JRViewer是直接以C/S方式作为报表的输出格式,在JFrame框架下输出。
3)报表的动态对象变量、参数、字段
字段Fields:是从数据库抽取出来的,在报表中出现的数据库内容。$F
参数Parameters:你写的应用需要提供给报表的入口。 $P
变量Variables:报表中一些逻辑运算的表现。 $V
每个对象的定义格式如下: $V{variablesName}
4)运行时需要.jasper文件;编译:把.jrxml->.jasper文件。
静态运行:静态文本来运行,和数据源无关;
动态运行:带数据源运行。
5)报表的结构
title、pageHeader、columnHeader、detail、columnFooter、pageFooter、summary、groupHeader、groupfooter。
6)在Jaspersoft中创建数据库连接
(1)菜单DourceSource -> Connections/DataSources -> …new ->
(2)菜单Build -> Set active connection -> 选择 -> … -> OK

2.4 Jaspersoft使用

2.4.1 新建jrxml文件

①选择File-》New-》Jasper Report

②选择Blank A4

③选择保存的路径并重命名,一直点击下一步即可。

④进入到数据源页面

数据源是填充报表的关键,我们必须制定一个数据适配器(Data Adapter),此时我们有三种选择:
选择“OneEmpty Record - Empty rows”,这样我们就可以专注于报表的设计,而暂时不指定数据源,创建完报表之后,我们随时可以制定别的数据源。
选择“SampleDB - Database JBDC Connection”,这是Jaspersoft Studio安装时提供的一个示例数据库。

这是Eclipse工作区经典的布局视图,中间部分是报表设计视图,右侧的调色板(Palette)包含了一些报表元素,我们可以方便地把它们拖拽到设计视图中的报表模板上,然后根据需要调整元素的大小、位置和配置信息等。本例中我们将添加一个3D饼状图,这是一个Chart元素,具体方法将在下文介绍。
左下角的大纲(Outline)视图包含了当前编辑的报表的所有基础信息,包括一些固定区域的样式(Style)、报表参数(Parameters)、字段(Fields)等,我们可以方便地查看和修改。大纲视图中还包括报表的一些固定面板的直接链接,比如标头(Title)面板,细节(Detail)面板等。点击一个面板的链接之后,我们可以在右侧的属性视图(Properties)中查看和修改该面板对应的一些基本属性,如高度、布局。
注意:从大纲视图中我们发现,一个报表包含很多固定的面板。在每一个报表中标题和汇总(summary)面板只打印一次,页眉(header)和页脚(footer)在报表的每一页都会独立打印。我们可以直接在field中新增、删除字段,还可以将字段拖拽到报表的细节面板中,Jasper Studio将会为我们创建一个文本字段(text field)元素,并设置其值为对应字段的数据。文本字段不应出现在除细节面板之外的其它地方。
下面,我们可以预览报表了。在JasperSoftStudio5.2中,我们切换到预览(Preview)视图(点击报表设计视图左下角的“Preview“标签),即可编译、生成、并在报表设计视图展示报表。至此,一个简单的报表就展示在我们面前了。

2.4.2 编辑jrxml文件

创建完jrxml文件后,使用JasperSoft Studio进入编辑阶段。首先需理解示例模板,了解整体的构图,才能进行编辑。这里我复制了先有的jrxml进行修改,也可以自己进行添加。

2.4.2.1 插入Barcode

①从Basic Elements中选择 Barcode

②拖住 Barcode element放入Detail板块
选择Barbecue types的Code39类型

③在Barcode 中设置Code Expression

注意:$F表示的是Filed,这里需要Java代码相匹配才可以。

④引用OCR字体

选择“Text Field”中的Font,字体设置为之前本地安装的OCRAExtended字体。

⑤最终效果

三、总结

此次开发用到的技术及工具有:Java,Jaspersoft Studio、SQL Developer、FontForge、OCR。
Java代码部分引用的jar包有:barbecue-1.5-beta1.jar,commons-collections4-4.3.jar、jasperreports-6.8.0.jar、jasperreports、fonts-6.8.0.jar、OCRAExtended.jar。Jaspersoft Studio主要用于绘制PDF模板及编译jrxml文件并配合Java代码进行动态数据的填充。SQL Developer是连接Oracle数据库的主要工具,用于编辑数据表及插入数据。FontForge用于修改ttf字体,比如说字符的宽度及大小。测试的过程中,发现一个char字符多了空白符。使用FontForge软件进行查看,发现是字符间距的问题。另外,OCR字体是最重要的组成部分,没有它整个需求则不能完成。该需求总花费时长差不多一个月。前期花费了一些时间琢磨JasperSoft软件,中期反复修改用户要求的打印模板,后期主要探索Java代码与jrxml的结合以及OCR字体展示不出的问题。经过反复搜寻OCR的相关信息及测试的过程,事实证明一定要冷静思考,实事求是,因为问题会在不经意间就解决了。

Jaspersfot Studio Create Check OCR Font相关推荐

  1. android studio create device

    1.avd 2.选尺寸6.0 3.选android 11 ,api 选30 ,download 4.sdk manager

  2. 报错:Error: Could not create FontSet for font ‘-adobe-helvetica-medium-r-normal-*

    此报错为在远程连接Server时调用相关Gui界面时,由于本机当前版本(ubuntu 20.04)与Server所用版本差距过大,导致早期使用的Fonts被淘汰造成的,翻了一下目前尚未有明确解决办法, ...

  3. BUG: Setup Was Unable to Create a DCOM User Account Error Message in Visual Studio 6.0

    今天在安装VS 6.0时,遇见这个问题:Setup was unable to create a DCOM user account in order to register <path> ...

  4. Step by Step Setup Git Server on Windows with CopSSH + msysGit and Integrate Git with Visual Studio

    Introduction First of all, let me clarify that Git doesn't need to specify the side for client and s ...

  5. 在android studio中创建Hello-JNI工程

    2019独角兽企业重金招聘Python工程师标准>>> 1. Overview What you'll need : Android Studio 2.2 or higher fro ...

  6. Install Visual Studio

    有篇:<windows10安装Visual Studio 2017>https://blog.csdn.net/Rong_Toa/article/details/80251939 以下为微 ...

  7. Android Studio 3.5.2 入门教程(浓缩版)

    到http://www.android-studio.org/下载安装包进行安装,安装完成后启动程序: 选择是否import(导入)之前的配置,我们是首次安装运行,不改变默认,点击"OK&q ...

  8. OCR和voting disk损坏恢复

    OCR和voting disk损坏恢复 原创魔鬼之武 介绍 有时候服务器或存储的突发情况,导致数据库服务器重启同时出现OCR磁盘丢失报错,导致oracle数据库集群宕机.这时,就需要我们来恢复OCR磁 ...

  9. Visual Studio代码:高级用户指南

    In this guide, you'll learn how to take advantage of Visual Studio Code to supercharge your developm ...

最新文章

  1. 1-1-2 交叉编译工具链
  2. 更灵活的边缘云原生运维:OpenYurt 单元化部署新增 Patch 特性
  3. python基础教程:操作符
  4. 【单调栈】向右看齐(luogu 2947)
  5. OS-written test2
  6. Multi_thread--Linux进程编程基础介绍
  7. 真假黄仁勋疑云?英伟达推出全球首个元宇宙平台
  8. MySQL视图,触发器,事务,存储过程,函数
  9. java day22【网络编程】
  10. java导论pdf下载,操作系统导论 PDF 下载
  11. MSDE 下载安装、创建管理数据库
  12. matlab fftshift函数,matlab fft fftshift--【转帖】
  13. 洛谷 P4173 残缺的字符串 (FFT)
  14. JVM-运行时数据区:Java堆(Heap) 内存管理的核心区
  15. mir2的db数据库
  16. U盘和移动硬盘不能安全删除问题及解决方案
  17. php7cms手册,phpcms手册下载|
  18. arduino(14):使用ESP8266加蜂鸣器,自己动手做歌曲,使用python 程序,做简单的五线谱转换。直接把音节和节拍转换,然后转换成数据,用蜂鸣器播放歌曲《下山》。。
  19. C#招行支付流程(一网通支付-PC扫码支付)
  20. iOS(iPhone,iPad))开发(Obje…

热门文章

  1. oracle用hints调优,oracle性能优化之--hints
  2. [数据集][目标检测]公路落石和滑坡数据集VOC格式-991张
  3. MongoDB集群部署模式
  4. iphone不能网络连接到服务器未响应,iphone用usb上网没反应怎么办
  5. 《设计与制造》课程——计算齿轮传动比案例所用部分代码
  6. linux 端口通信,AFDX端系统通信端口在linux下的实现
  7. elasticSearch 在query时候同义词配置以及使用
  8. Expandable Table Cell
  9. java中怎样写html,怎样用java写html代码
  10. 为什么要使用工厂模式,工厂模式具有哪些优点