具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
参阅图1所示,是本发明应用服务器2一可选的硬件架构的示意图。本实施例中,所述应用服务器2可包括,但不仅限于,可通过系统总线相互通信连接存储器11、处理器12、网络接口13。需要指出的是,图1仅示出了具有组件11-13的应用服务器2,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
其中,所述应用服务器2可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器等计算设备,该应用服务器2可以是独立的服务器,也可以是多个服务器所组成的服务器集群。
所述存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器11可以是所述应用服务器2的内部存储单元,例如该应用服务器2的硬盘或内存。在另一些实施例中,所述存储器11也可以是所述应用服务器2的外部存储设备,例如该应用服务器2上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(FlashCard)等。当然,所述存储器11还可以既包括所述应用服务器2的内部存储单元也包括其外部存储设备。本实施例中,所述存储器11通常用于存储安装于所述应用服务器2的操作系统和各类应用软件,例如签名文件合成系统200的程序代码等。此外,所述存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器12在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述应用服务器2的总体操作。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行所述的签名文件合成系统200等。
所述网络接口13可包括无线网络接口或有线网络接口,该网络接口13通常用于在所述应用服务器2与其他电子设备之间建立通信连接。
至此,己经详细介绍了本发明相关设备的硬件结构和功能。下面,将基于上述相关设备,提出本发明的各个实施例。
首先,本发明提出一种签名文件合成系统200。
参阅图2所示,是本发明签名文件合成系统200第一实施例的程序模块图。本实施例中,所述的签名文件合成系统200包括一系列的存储于存储器11上的计算机程序指令,当该计算机程序指令被处理器12执行时,可以实现本发明各实施例的签名文件合成操作。在一些实施例中,基于该计算机程序指令各部分所实现的特定的操作,签名文件合成系统200可以被划分为一个或多个模块。例如,在图2中,所述签名文件合成系统200可以被分割成获取模块201、设置模块202、合成模块203。其中:
所述获取模块201,用于获取参与合成的第一图片。
具体地,使用BufferedImage类获取所述第一图片。BufferedImage是Image的一个子类,BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区可以很方便的操作该图片。
所述获取模块201,还用于获取所述第一图片的对象,以进行编辑。
具体地,使用Graphics类获取所述第一图片的对象进行编辑。
Graphics是Java绘图的核心类,它支持两种绘图,一种是基本的绘图,如画线、矩形、圆等,另一种是画图像,主要用于动画制作。要进行绘图,首先要找到一个Graphics类的对象。Graphics类是抽象类,没有办法直接生成一个对象来使用,而且它也没有提供任何static方法可供直接调用,update()方法和paint()方法所传递的参数就是Graphics类的对象。因此,在绘图的时候通过重载这两个方法,使用参数对象的绘图方法来进行绘图,这是在动画程序中经常使用的方法。另外,还可以通过getGraphics()方法得到一个Graphics类的对象,这个对象和update()方法和paint()方法中所传递的对象一样,都是该成员所对应的Graphics类的对象。getGraphics()方法有两个来源,一个是继承自Componet类,同时,Image类也提供了getGraphics()方法。
所述获取模块201,还用于获取参与合成的第二图片。
具体地,使用ByteArrayInputStream获取所述第二图片。ByteArrayInputStream是字节数组输入流,包含一个在内存中创建的字节数组缓冲区,从输入流读取的数据保存在该字节数组缓冲区中。在本实施例中,所述第二图片包含有签名。在本实施例中,可以先分析所述第一图片中的文字内容,判断所需要的签名,然后查询所述签名对应的所述第二图片及其获取地址,从而从所述获取地址获取所述第二图片。例如,所述第一图片为保险合同,所述第一图片中需要客户的签名,获取所述客户签名对应的第二图片。所述第一图片中有可能需要多个不同的签名,此时要分别针对每个不同的签名获取对应的第二图片。
在其他实施例中,还可以预先对各种待签名的文件进行分类,并设置每种类型的待签名文件所需要的签名。例如,所述待签名文件可以是需要客户签名的文件、需要主管签名的文件等。在进行合成前,根据所述第一图片中的文字内容判断所述第一图片所属的待签名文件类型,然后根据所述待签名文件类型判断所述第一图片所需要的签名,从而获取对应的所述第二图片。
所述设置模块202,用于设置第二图片的合成位置、当前日期和当前日期的放置位置。
具体地,可以先分析所述第一图片中的文字内容,判断出需要进行签名的位置,然将所述需要进行签名的位置设置为所述合成位置。当所述第一图片中有多个位置需要进行签名时,根据每个所述需要进行签名的位置分别设置所述合成位置。
在本实施例中,使用Graphics.drawImage(img,x,y,width,height,observer)方法设置所述第二图片的合成位置,其中需要设置的参数包括:img为要绘制的指定图像,x的坐标,y的坐标,矩形宽度,矩形高度,observer为当转换了更多图片时要通知的对象。使用Graphics.drawString(str,x,y)方法设置当前日期和当前日期的放置位置,其中需要设置的参数包括:str为要绘制的String类型的字符,x的坐标,y的坐标。
例如,可以设置为graphics.drawImage(image,763,2104,300,150,null)及graphics.drawString(DateUtils.getCurrentPageDate(),673,2294)。
所述合成模块203,用于根据所设置的位置合成所述第一图片和第二图片。
具体地,当获取到所述第一图片的对象,并设置好第二图片的合成位置和当前日期的放置位置后,根据所述设置合成所述第一图片和第二图片,即将所述第二图片中的签名合成到所述第一图片中的所述合成位置,同时一并将所述当前日期也放置到相应放置位置,得到合成后的第三图片。其中,所述第一图片、第二图片、第三图片均为JPG文件。
参阅图3所示,是本发明签名文件合成系统200第二实施例的程序模块图。本实施例中,所述的签名文件合成系统200除了包括第一实施例中的所述获取模块201、设置模块202、合成模块203之外,还包括创建模块204和输出模块205。
所述创建模块204用于创建一个nas目录,以存放合成后的图片。
具体地,当创建所述nas目录时,首先判断当前欲创建的nas目录是否存在。如果存在,则先删除原有的文件夹,删除规则是一层一层往上删除。如果不存在,新创建一个所述nas目录。
所述输出模块205用于将合成后的图片输出到设定路径。
具体地,当得到合成后的图片后,使用ImageIO.write将合成后的图片输出到设定路径。
此外,本发明还提出一种签名文件合成方法。
参阅图4所示,是本发明签名文件合成方法第一实施例的流程示意图。在本实施例中,根据不同的需求,图4所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。
步骤S500,获取参与合成的第一图片。
具体地,使用BufferedImage类获取所述第一图片。BufferedImage是Image的一个子类,BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区可以很方便的操作该图片。
步骤S502,获取所述第一图片的对象,以进行编辑。
具体地,使用Graphics类获取所述第一图片的对象进行编辑。
Graphics是Java绘图的核心类,它支持两种绘图,一种是基本的绘图,如画线、矩形、圆等,另一种是画图像,主要用于动画制作。要进行绘图,首先要找到一个Graphics类的对象。Graphics类是抽象类,没有办法直接生成一个对象来使用,而且它也没有提供任何static方法可供直接调用,update()方法和paint()方法所传递的参数就是Graphics类的对象。因此,在绘图的时候通过重载这两个方法,使用参数对象的绘图方法来进行绘图,这是在动画程序中经常使用的方法。另外,还可以通过getGraphics()方法得到一个Graphics类的对象,这个对象和update()方法和paint()方法中所传递的对象一样,都是该成员所对应的Graphics类的对象。getGraphics()方法有两个来源,一个是继承自Componet类,同时,Image类也提供了getGraphics()方法。
步骤S504,获取参与合成的第二图片。
具体地,使用ByteArrayInputStream获取所述第二图片。ByteArrayInputStream是字节数组输入流,包含一个在内存中创建的字节数组缓冲区,从输入流读取的数据保存在该字节数组缓冲区中。在本实施例中,所述第二图片包含有签名。在本实施例中,可以先分析所述第一图片中的文字内容,判断所需要的签名,然后查询所述签名对应的所述第二图片及其获取地址,从而从所述获取地址获取所述第二图片。例如,所述第一图片为保险合同,所述第一图片中需要客户的签名,获取所述客户签名对应的第二图片。所述第一图片中有可能需要多个不同的签名,此时要分别针对每个不同的签名获取对应的第二图片。
在其他实施例中,还可以预先对各种待签名的文件进行分类,并设置每种类型的待签名文件所需要的签名。例如,所述待签名文件可以是需要客户签名的文件、需要主管签名的文件等。在进行合成前,根据所述第一图片中的文字内容判断所述第一图片所属的待签名文件类型,然后根据所述待签名文件类型判断所述第一图片所需要的签名,从而获取对应的所述第二图片。
步骤S506,设置第二图片的合成位置、当前日期和当前日期的放置位置。
具体地,可以先分析所述第一图片中的文字内容,判断出需要进行签名的位置,然将所述需要进行签名的位置设置为所述合成位置。当所述第一图片中有多个位置需要进行签名时,根据每个所述需要进行签名的位置分别设置所述合成位置。
在本实施例中,使用Graphics.drawImage(img,x,y,width,height,observer)方法设置所述第二图片的合成位置,其中需要设置的参数包括:img为要绘制的指定图像,x的坐标,y的坐标,矩形宽度,矩形高度,observer为当转换了更多图片时要通知的对象。使用Graphics.drawString(str,x,y)方法设置当前日期和当前日期的放置位置,其中需要设置的参数包括:str为要绘制的String类型的字符,x的坐标,y的坐标。
例如,可以设置为graphics.drawImage(image,763,2104,300,150,null)及graphics.drawString(DateUtils.getCurrentPageDate(),673,2294)。
步骤S508,根据所设置的位置合成所述第一图片和第二图片。
具体地,当获取到所述第一图片的对象,并设置好第二图片的合成位置和当前日期的放置位置后,根据所述设置合成所述第一图片和第二图片,即将所述第二图片中的签名合成到所述第一图片中的所述合成位置,同时一并将所述当前日期也放置到相应放置位置,得到合成后的第三图片。其中,所述第一图片、第二图片、第三图片均为JPG文件。
本实施例所提出的签名文件合成方法,可以通过多个类方法将两张既有图片合成一张带有客户签名的JPG文件,并且可以自动查找所需要的签名和签名位置,从而不再依赖易签系统合成签名,也不需要先合成PDF文件再转换为JPG文件,减少系统性能开支。
如图5所示,是本发明签名文件合成方法的第二实施例的流程示意图。本实施例中,所述签名文件合成方法的步骤S602-S610与第一实施例的步骤S500-S508相类似,区别在于该方法还包括步骤S600和S612。
该方法包括以下步骤:
步骤S600,创建一个nas目录,以存放合成后的图片。
具体地,当创建所述nas目录时,首先判断当前欲创建的nas目录是否存在。如果存在,则先删除原有的文件夹,删除规则是一层一层往上删除。如果不存在,新创建一个所述nas目录。
步骤S602,获取参与合成的第一图片。
具体地,使用BufferedImage类获取所述第一图片。BufferedImage是Image的一个子类,BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区可以很方便的操作该图片。
步骤S604,获取所述第一图片的对象,以进行编辑。
具体地,使用Graphics类获取所述第一图片的对象进行编辑。
Graphics是Java绘图的核心类,它支持两种绘图,一种是基本的绘图,如画线、矩形、圆等,另一种是画图像,主要用于动画制作。要进行绘图,首先要找到一个Graphics类的对象。Graphics类是抽象类,没有办法直接生成一个对象来使用,而且它也没有提供任何static方法可供直接调用,update()方法和paint()方法所传递的参数就是Graphics类的对象。因此,在绘图的时候通过重载这两个方法,使用参数对象的绘图方法来进行绘图,这是在动画程序中经常使用的方法。另外,还可以通过getGraphics()方法得到一个Graphics类的对象,这个对象和update()方法和paint()方法中所传递的对象一样,都是该成员所对应的Graphics类的对象。getGraphics()方法有两个来源,一个是继承自Componet类,同时,Image类也提供了getGraphics()方法。
步骤S606,获取参与合成的第二图片。
具体地,使用ByteArrayInputStream获取所述第二图片。ByteArrayInputStream是字节数组输入流,包含一个在内存中创建的字节数组缓冲区,从输入流读取的数据保存在该字节数组缓冲区中。在本实施例中,所述第二图片包含有签名。在本实施例中,可以先分析所述第一图片中的文字内容,判断所需要的签名,然后查询所述签名对应的所述第二图片及其获取地址,从而从所述获取地址获取所述第二图片。例如,所述第一图片为保险合同,所述第一图片中需要客户的签名,获取所述客户签名对应的第二图片。所述第一图片中有可能需要多个不同的签名,此时要分别针对每个不同的签名获取对应的第二图片。
在其他实施例中,还可以预先对各种待签名的文件进行分类,并设置每种类型的待签名文件所需要的签名。例如,所述待签名文件可以是需要客户签名的文件、需要主管签名的文件等。在进行合成前,根据所述第一图片中的文字内容判断所述第一图片所属的待签名文件类型,然后根据所述待签名文件类型判断所述第一图片所需要的签名,从而获取对应的所述第二图片。
步骤S608,设置第二图片的合成位置、当前日期和当前日期的放置位置。
具体地,可以先分析所述第一图片中的文字内容,判断出需要进行签名的位置,然将所述需要进行签名的位置设置为所述合成位置。当所述第一图片中有多个位置需要进行签名时,根据每个所述需要进行签名的位置分别设置所述合成位置。
在本实施例中,使用Graphics.drawImage(img,x,y,width,height,observer)方法设置所述第二图片的合成位置,其中需要设置的参数包括:img为要绘制的指定图像,x的坐标,y的坐标,矩形宽度,矩形高度,observer为当转换了更多图片时要通知的对象。使用Graphics.drawString(str,x,y)方法设置当前日期和当前日期的放置位置,其中需要设置的参数包括:str为要绘制的String类型的字符,x的坐标,y的坐标。
例如,可以设置为graphics.drawImage(image,763,2104,300,150,null)及graphics.drawString(DateUtils.getCurrentPageDate(),673,2294)。
步骤S610,根据所设置的位置合成所述第一图片和第二图片。
具体地,当获取到所述第一图片的对象,并设置好第二图片的合成位置和当前日期的放置位置后,根据所述设置合成所述第一图片和第二图片,同时一并将所述当前日期也放置到相应位置,得到合成后的图片。
步骤S612,将合成后的图片输出到设定路径。
具体地,当得到合成后的图片后,使用ImageIO.write将合成后的图片输出到设定路径。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。