应用场合


数据表格是学术、文案工作中常用的表述形式。我们经常需要从第三方获取所需的数据。有些时候这些数据并非以可直接编辑的形式(如电子表格文档),而是以打印件或者扫描件的形式提供。假如需要对数据进行进一步的使用,可能需要手工将打印件或扫描件誊写为电子文档。在这方面有许多现有工具及方案可供选择:

  • 对于比较清晰的图像,使用OCR软件执行文本识别;
  • 纸质文档可以通过LENS拍摄工具自动展平;
  • 对于单个内容有限的表格,可直接创建电子文档。

然而当需要处理的图像不够清晰,以至于OCR识别有误,尤其当数据量大时,成熟的工具则无用之地。在这种情况下,也许手工誊写是唯一的选择。IEPI.BIATranscribe (以下称BIAT)即为此情况开发。

以一次关联特定文件夹中多个位图格式图片,并依照用户指定的方式筛选和排序,将每个图片视为一个表格页。在编辑窗口中,用户设置编辑网格的行列数、位置等,并调整图片角度对齐网格,随后直接在网格中填写对应位置的内容。当所有页面数据输入完成后,通过导出定义保存为csv文件。BIAT能够以项目文件的方式保存文档页面设置和所录入的数据,以供长时间和多地点编辑。

开始使用


准备文档图像

将要拓写的图像放置于特定的文件夹中,修改图像的名称使其包括页码。对于单个表单图像也是相同要求。

一般来说,若决定使用BIAT,说明需要处理大量表格。我们以一PDF文档为例说明如何准备图像文件夹。

该文件取自BIA报告(德国职业安全联合会发布的粉尘爆炸性参数测试数据报告)的1.1物料分组,因此文件名为group1_1.pdf。也许你已经发现BIAT软件的名字即来源于此——它最初要处理的数据表格。

本节将持续使用该PDF示例文件。原始数据、程序和其他附件均在本文最后一节提供下载。

在开始操作前,应确保PDF文档不包含除表格之外的多余页面,如果有多余的页面,会破坏BIAT内置区分奇偶页的机制。但若不区分奇偶页,则可以保留多余的页面,在编辑时直接标为“已完成”即可,程序将自动忽略空白数据。

示例PDF文件的多余页已经去掉。

使用Acrobat打开PDF文件,选择菜单项 “文件 - 另存为其他 - 图像 - png“ ,将整个文件导出为图片。

Acrobat将自动为每个图片添加序号,图片文件名形如 group1_1_页面_xxx.png。若页面过多,也可以将其分成多份放在不同的文件夹中。只需注意,若要区分奇偶页,每个文件夹中的图片文件数量应当是偶数个。

加载图像

BIAT是可拷贝移动的.net应用程序,并且支持相对路径的项目加载。如果需要多处办公,推荐将文档图像和程序目录放置在较近的位置,便于整体移动。

程序启动,界面如下

首先观察“项目配置”的“正则捕获格式”,该设置使用正则表达式对给定文件夹中的文件进行过滤,只有文件名匹配的文件会被列出。

“页面排序依据捕获索引” 指定在文件名正则匹配时捕获的分组索引,该索引对应的捕获内容将作为程序对页面排序的依据。

针对此例,正则表达式捕获两个分组,第一个是 group_1_1,即PDF文件名,第二个是Acrobat导出生成的页码。因此按此设置,图像页面将按照页码值排序。

在“浏览到目标文件夹”处,点击“浏览”,选择保存有文档图像的文件夹。文件夹中符合筛选的文件将被列出。

查看页面

如上文件被添加到列表后,可查看特定页面状态。此时切换到“数据拓写”可见加载图片以及浮在其上的表格。

通过上方的导航工具可切换页面,也可直接输入页码并按下回车键跳转(输入的数值应在页码范围以内)。

通过拖动下方的滑动块对编辑区域进行缩放,以方便编辑。

在“项目配置”的文件列表中,也可单击列表项实现页码跳转,这在查看页面状态、继续编辑时很有用。

定义网格

“数据拓写”左侧边缘折叠区域“编辑区”可以展开,其中包含“页面定位”和“网格设置”两部分。

在页面视图中,文档图片在下层显示;输入网格在上层布局。通过“编辑区”设置,可以使网格完全对齐到图片中的表格范围。随后只需在相应单元格中输入下层图像位置的文本,即可完成该页的数据拓写。

在定位之前,首先要定义页面网格,观察“网格设置”,包含奇数页和偶数页两组设置,每一组都包含边距、行列数、行高、列宽的设置。

定义网格一般按以下顺序:

  1. 按照文档图像内容设置行数和列数;
  2. 设置边距,使网格大致对应表格范围;
  3. 调整行高、列宽,使单元格布局与表格基本一致。

这些设置参数中,列宽需要单独说明:它由多个数字通过半角逗号相连而成,每个数字代表第n列所占的比重;一般数字的个数应与列数一致,但也可以不一致;若数字数量少于列数,则实际不足部分用1补足进行表格绘制;若数字数量多于列数,多出的部分将被忽略。

在示例中,奇数页列宽为 3.75,0.93,0.9,0.9,0.9,0.9,0.9,0.9,0.9,1.2,1.2 ,这基本符合页面图像中表格列宽的分布。你可通过不断调整直至达到满意效果。

页面定位

虽然页面图像和网格的位置均可以设置,但是考虑到网格的正交性、网格页边距能方便页面对齐、图像的不规范,笔者还是推荐在“页面定位”中调整页面图像使其对齐定义好的网格。

当然,网格和图像的调整可以交互进行。

展开“页面定位”后,网格变为不可用(即无法输入内容),以便使用鼠标操作定位。

所谓的图像定位,实际上是通过调整页面图像矩形的4个角位置,自由拉伸文档。有两种方式进行角顶点的坐标设置:直接输入和鼠标点击。

直接输入坐标的方式要求你了解本程序的图像定位方式(关于WPF 3D非仿射变换)以及相关配置(参考“应用配置”)。

推荐使用鼠标方式设置图像4角位置。你会发现有箭头标记的4个按钮,分别对应左上、左下、右上、右下4个角。点击其中一个,便进入相应角的位置设置模式。在设置模式下,在页面和绿色背景范围内点击鼠标左键,将点击鼠标的位置设置为文档图像的相应角的位置。

你可通过点击连续调整单个角的位置,满意后点击其他方向箭头的按钮,继续调整其他角位置,或者点击标有X的按钮结束调整。在调整中,也可以单击鼠标右键结束调整,取消设置模式。

注意:折叠“页面定位”编辑区不会自动取消设置模式,你必须显式点击X按钮或右击鼠标。

由于扫描文件每页的图像变形都不一样,因此可能需要对每个页面实施定位,此时应保证网格定义的一致性,因为网格的定义只区分奇偶页。就是说网格定义只有奇数页、偶数页两套设置,而页面定位对于每一页都有独立的设置。

鼠标定位的操作很方便,因此每一页的定位不会花费太多时间。

输入内容

一旦网格和页面位置定好,网格单元格与底层页面中的表格的重复程度便会很好,此时只要在相应位置抄写表格内容,你甚至不用思考所抄写的内容是什么。

当然,如果有需要,也可以在单元格上填写任意内容。

输入时,可通过键盘的上下方向键将焦点移到上方或下方单元格,按住ctrl后使用键盘的左右方向键将焦点移动到左侧或右侧单元格。

当一页的表格拓写完毕,勾选选项卡右上角的“标记为完成”,则当前页变为不可用,文件列表的状态也随之更新。

当所有页面都已标记为完成时,方可进行“表格导出”操作。

保存和加载配置

可以通过“文件 - 保存项目配置“将当前的所有配置保存到文件(后缀为.btp)。保存的内容包括图像文件夹位置、筛选规则、网格定义、各页面定位、输入的数据及状态、以及导出CSV的设置。

要继续之前的工作,通过“文件 - 打开项目配置“加载之前保存的配置。

需要注意的是,当页面过多(如几百页)时,单个配置文件中保存的数据也会很多,这会对程序的加载速度产生一定影响。可以将页面适当分组处理以减少对加载速度产生的效应。

表格导出

在所有页面都标记为完成后,切换到“表格导出”选项卡进行导出设置。

BIAT可将以录入的内容导出为逗号分隔文件(.csv文件),供其他电子表格程序进一步使用。

在该选项卡中,你可以输入自定义文本作为导出csv文件的附加头。这部分文本将在数据之前写入文件,一般是对表格的说明或标题等。

通过勾选“区分奇偶页”,导出时将前后两页视为一张完整表格,在列定义中O和E(分别代表奇odd和偶even)区别对待。

导出时,BIAT并非直接将内容按照输入的网格定义导出,而是可以自定义要导出的列。从“备选列”中选择要导出的列标记,点击右箭头将其添加到“定义列”中。

备选列中的备选项除BLANK代表空列以外,其他项与网格定义的列数有关。例如奇数页网格有11列,则备选项中会有 O0~010;偶数页有10列,则备选项中会有E0~E9。

另外还可点击左箭头按钮,从“定义列”中移除项;或点击上下箭头调整项的排列顺序。

点击“C标记按钮”可增加常量列。

下载


Introduce: IEPI.BIATranscribe 图像表格拓写工具的更多相关文章

  1. 【原创】自己动手写工具----XSmartNote [Beta 3.0]

    一.前面的话 在动笔之前,一直很纠结到底要不要继续完成这个工具,因为上次给它码代码还是一年多之前的事情,参考自己动手写工具----XSmartNote [Beta 2.0],这篇博文里,很多园友提出了 ...

  2. 【原创】自己动手写工具----XSmartNote [Beta 2.0]

    一.前面的话 在上一篇自己动手写工具----XSmartNote中,我简单介绍了这个小玩意儿的大致界面和要实现的功能,看了一下园子里的评论,评价褒贬不一,有人说“现在那么多云笔记的工具”,“极简版ev ...

  3. 【原创】自己动手写工具----签到器[Beta 2.0]

    一.前面的话 上一篇中基本实现了简单的签到任务,但是不够灵活.在上一篇自己动手写工具----签到器的结尾中,我设想了几个新增功能来提高工具的灵活程度,下面把新增功能点列出来看看: (1)新增其他的进程 ...

  4. 如何在CI中写工具类,在哪个目录写

    在Libraries目录写工具类,可以参考项目中七牛的集成写法 而Helps目录写的是辅助函数(公共函数)这一类的

  5. 飞思卡尔烧写工具mfgtools的使用

    MFGTool是飞思卡尔提供的烧写工具,使用起来非常方便.但是,在使用MFGTool有几点是需要注意的,否则就会在烧写过程中遇到一些问题: 1.在使用MFGTool前,文件cfg.ini 和 UICf ...

  6. STlink及烧写工具:

    一 STLINK可以随时在STLINK与jlink之间切换:方法:https://www.segger.com/products/debug-probes/j-link/models/other-j- ...

  7. F5隐写工具使用

      0x00 前言 今天在实验吧看到一个图片隐写的题目,用了stegslove和winHex分析一通发现并没有什么有效信息.看了评论区大佬的提示说用到了F5隐写工具,所以百度教程用了一下,发现确实解决 ...

  8. ExcelPatternTool: Excel表格-数据库互导工具

    ExcelPatternTool Excel表格-数据库互导工具 介绍: 指定Pattern文件-一个规则描述的json文档,基于此规则实现Excel表格与数据库之间的导入导出,校验等功能. 特点: ...

  9. PDF提取表格的网页工具——Excalibur

      在之前的文章另类爬虫:从PDF文件中爬取表格数据中,我们知道如何利用Python的camelot模块,通过写Python程序来提取PDF中的表格数据.本文我们将学习如何用更便捷的工具从PDF中提取 ...

随机推荐

  1. CSS——宽高问题大汇总

    1.宽高继承 他们是要属性的,并不是直接就能继承,inherit. 2.浮动的盒子不要给宽,宽度由内容来决定

  2. (简单) POJ 3169 Layout,差分约束+SPFA。

    Description Like everyone else, cows like to stand close to their friends when queuing for feed. FJ ...

  3. FZU 1058 粗心的物理学家

    这题有毒.要用long double定义,以及cout控制格式输出. #include<cstdio> #include<cstring> #include<cmath& ...

  4. ucos任务优先级从64到256,任务就绪表的改变

    Ucos在任务调度中经常使用的技术为任务就绪表,在之前的文章中使用的例子是低于64个优先级的任务就绪表查找方法,现在ucos将任务扩展到256优先级之后,任务就绪表的查找也做了一定的修改,今天来讲讲 ...

  5. MVC 5学习总结笔记1

    01.使用MVC自带的DataAnnotations实现数据验证 public class ExternalLoginConfirmationViewModel { [Required] [Displ ...

  6. Vue.js使用前

    下载安装 node,npm,git 安装cnpm 淘宝cnpm镜像https://npm.taobao.org/,-g表示进行全局安装 npm install -g cnpm --registry=h ...

  7. 使用getParameterMap()方法实现对请求参数的封装的工具类

    我们知道,HttpServletRequest这个类的getParameter(name),getParameterValues(name)可以分别实现对页面传来的单个参数和对多个同名参数的接受.特别 ...

  8. 《Web接口开发与自动化测试 -- 基于Python语言》 ---前言

    前    言 本书的原型是我整理一份Django学习文档,从事软件测试工作的这六.七年来,一直有整理学习资料的习惯,这种学习理解再输出的方式对我非常受用,博客和文档是我主要的输出形式,这些输出同时也帮 ...

  9. Android 控件布局常用属性

    <!--单个控件经常用到android:id —— 为控件指定相应的IDandroid:text —— 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串a ...

  10. ZOJ 1012 Mainframe

    题目大意:有一台主机,有m个cpu和n的内存,有l个任务,每个任务需消耗一定的cpu和内存,给出任务的开始时间和截止时间,完成任务可获得一定的金钱,同时提前完成有奖金,延后完成要扣钱.计算到某个时间所 ...