首页> 中国专利> 一种文本文档中数字水印的嵌入方法和装置

一种文本文档中数字水印的嵌入方法和装置

摘要

本发明涉及一种文本文档中数字水印的嵌入方法和装置。该方法包括:将电子格式文本文档转换为EMF文件;打开转换后的原始的EMF文件,使用其文件头参数信息创建对应的目标EMF文件;遍历原始EMF文件中的所有GDI函数及其参数信息,判断GDI函数是否为TEXTOUT,若是则读取所有字体信息并嵌入水印信息,然后复制到目标EMF文件中;若否则直接将GDI函数复制到目标EMF文件中;处理完所有的原始EMF文件后,将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作。本发明能够解决各种电子格式文本文档和纸质文本文档中的水印信息嵌入问题,实现对于重要文本文档的安全防控、溯源追踪以及内容保护。

著录项

  • 公开/公告号CN103500296A

    专利类型发明专利

  • 公开/公告日2014-01-08

    原文格式PDF

  • 申请/专利权人 北京溯源鸿业科技有限公司;

    申请/专利号CN201310456022.4

  • 发明设计人 李晓妮;

    申请日2013-09-29

  • 分类号G06F21/16(20130101);G06T1/00(20060101);

  • 代理机构北京君尚知识产权代理事务所(普通合伙);

  • 代理人余功勋

  • 地址 100085 北京市海淀区上地信息产业基地三街1号楼三层C段3200

  • 入库时间 2024-02-19 21:14:32

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-12-20

    专利权的转移 IPC(主分类):G06F21/16 登记生效日:20191129 变更前: 变更后: 申请日:20130929

    专利申请权、专利权的转移

  • 2017-05-31

    专利权的转移 IPC(主分类):G06F21/16 登记生效日:20170509 变更前: 变更后: 申请日:20130929

    专利申请权、专利权的转移

  • 2017-01-18

    授权

    授权

  • 2014-02-12

    实质审查的生效 IPC(主分类):G06F21/16 申请日:20130929

    实质审查的生效

  • 2014-01-08

    公开

    公开

说明书

技术领域

本发明属于文档保护技术领域,涉及一种文本文档中数字水印的嵌入方法,具体涉及EMF增强图元文件(Enhanced Metafile,EMF)中的数字水印嵌入方法和装置。

背景技术

随着知识经济时代的快速到来,知识在现代企业竞争优势中的作用空前突出,知识的载体——电子文件,成为了现代企业运营中最宝贵、最重要的战略资源。同样在政府部门和企事业单位的办公环境中,电子文档成为信息交流和知识传递的必不可少的载体。由于在文档信息传播过程中,文档内容很容易被非法获取和篡改,因此对重要文档的保护显得尤为重要。

纵观文本文档的传播方式主要有两种:a)以电子文件格式传播。在很多情况下,一个电子文档可能会在很多机器上流转,内容被很多人浏览。如果不能有效地掌握电子文档的流转过程,极易造成泄密事件的发生。b)通过打印、扫描、复印的方式以纸质文档形式进行传播,纸质文档一旦发生流失很难追溯至文档的来源。

文本水印技术在基于文档的信息安全方面发挥着积极作用,可以有效地解决上述问题。比如将某些具有标识作用的信息,诸如文档生成时间、文档的归属等隐藏在涉密的文档数据中,这些隐秘信息在视觉上是不可见的。当文档被非法获取或复制时,通过特定的装置提取的隐藏在文本中信息可以追踪文本的源头以达到版权保护及追溯源头的作用。

但是如何很方便地将水印信息嵌入到文本文件中存在着技术障碍。现有的方法中,有针对特定的电子文档编辑和浏览软件开发了相应的系统或者插件来完成水印信息的嵌入,比如微软Office办公文件或者PDF(Portable Document Format)文件,这些软件系统本身对外提供了基于宏或者COM组件方式的开发接口,可以较为方便地进行二次开发。但是该方法的开发成本非常高:一方面要针对不同的文档软件系统开发不同的系统或者插件,而且大部分的软件不支持二次开发,比如大量的私有格式文件系统等;另外一方面,即使支持二次开发的软件系统也会有版本升级的问题,比如通用的MS Office或者Adobe Acrobat软件。不同的版本之间的接口和COM(Component Object)组件存在一定的兼容性问题,软件系统一旦升级,水印系统可能会也要进行相应的改动升级后才能支持。因此该方法非常不灵活,通用性也比较差。如果要在打印的纸质文档中嵌入水印信息,利用上述方法进行水印信息嵌入后,还需要额外的个性化的打印输出操作,无法直接在打印输出的过程中嵌入水印信息。

因此,为了方便快捷地在任意电子格式文本文档和纸质文本文档中嵌入水印信息,需要解决两个问题:1)要将各种电子格式文档统一转为一种文件格式,然后通过解析该文件格式能够准确地获取文档中的文本对象,从而通过修改文本对象属性嵌入水印信息;2)转换后的文件格式的解析过程要相对简单,比如PDF文件和PS(PostScript)文件解析过程就非常复杂,难度很大。另外PDF文件和PS文件只能通过Acrobat或者特定的软件系统才能完成打印输出,因此打印客户端需要额外安装相应的软件系统,既增加了工作量又提高了成本。而比较理想的文件格式就是EMF文件。所谓的EMF文件是一种矢量图形文件,在文件内部存储的是图形设备接口GDI(Graphic Devices Interface)函数,不同于位图文件中的像素,克服了常见位图文件的诸多缺点,比如存储空间大,速度慢,图形放缩时严重失真等。EMF文件中记录着每一个GDI函数及其参数信息,显示时通过这些函数实现图形的重绘,具有存储空间小,图形缩放不失真的优点,真正做到与设备无关。

EMF由文件头、GDI函数和EMF文件尾三部分组成。文件头里包含了图形创建时的作者信息、图形尺寸、GDI函数个数等内容。文件尾记录文件结束标志,中间的GDI函数是文件的主体,记录着图形中每一个GDI函数。应用程序打开EMF文件时执行各个GDI函数来绘制出图像,存储时将GDI函数写回EMF文件中。总之任何复杂的图形都能分解为直线、曲线、三角形、椭圆、文字等基本的图形对象,对这些图形对象的绘制均可通过系统中的GDI函数来完成。因此文档中的所有对象都可以用EMF文件来准确描述。

发明内容

本发明提供了一种文本文档中数字水印的嵌入方法和装置,用以解决现有技术中无法方便地获取各种电子格式文本文档内容中的文本对象数据问题,进而解决各种电子格式文本文档和纸质文本文档中的水印信息嵌入问题,并最终实现对于重要文本文档的安全防控、溯源追踪以及内容保护的目的。

本发明的构思在于将各种电子格式文本文档统一转换为矢量的EMF格式文件,其中每页文档对应生成一幅EMF图像;进而读取每个EMF格式文件中记录的所有GDI函数及其参数信息得到所有的文本对象数据;通过修改文本对象的属性信息嵌入水印信息,并将嵌入水印后的文本对象保存到一个新建的EMF文件中;将嵌入水印后的EMF文件转换为其他电子格式文档,或者通过调用操作系统的API函数将EMF文件发送至实际物理打印机输出,实现了电子格式文本文档和纸质文本文档中嵌入水印信息的目的。从而得到了一种文本文档中数字水印的嵌入方法和装置。

本发明的一种文本文档中数字水印的嵌入方法,包括如下步骤:

步骤一,将电子格式文本文档内容数据转换为EMF文件,其中每页数据对应生成一个EMF文件,多页的电子格式文本文档对应生成多页的EMF文件集合;

步骤二,打开一个原始的EMF文件,读取该文件的文件头参数信息,使用相同的参数信息创建对应的新的目标EMF文件;

步骤三,遍历原始EMF文件中记录的所有GDI函数及其参数信息,判断读取的GDI函数是否为TEXTOUT,若是,读取所有字体信息并嵌入水印信息,并将修改后的文本对象复制到目标EMF文件中;若否,则直接将读取的GDI函数复制到目标EMF文件中;

步骤四,判断是否处理完所有的原始EMF文件,若否,则分别执行步骤二和步骤三的操作;若是,则执行步骤五;

步骤五,将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作。

较佳地,所述的将电子格式文本文档内容数据转换为EMF文件时,应用程序调用操作系统提供的函数接口,以页为单位将文档内容数据保存为EMF格式文件,每一页对应生成一幅EMF图像;

较佳地,所述的将电子格式文本文档内容数据转换为EMF文件时,应用程序通过虚拟的EMF打印机将文档数据输出为EMF文件;

较佳地,所述的读取的所有字体信息包括字符编码、字体名称、字体大小、字符间距、字体形状、字体颜色、行间距;

较佳地,所述的读取所有字体信息后,通过替换字库来嵌入水印信息,具体为:嵌入水印信息为“0”时,保持原有的字库类型不变,嵌入水印信息“1”时,将原有字库替换为修改后的字库;

较佳地,所述的读取所有字体信息后,通过修改字符间距和行间距来嵌入水印信息;

较佳地,步骤三中,若读取的原始EMF文件中记录的GDI函数为图像对象,则将图像数据拷贝至内存空间,调用数字图像水印算法嵌入水印信息后,再将修改过的内存空间复制到目标EMF文件中;

较佳地,所述的将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作时,从EMF文件中逐条读取对操作系统函数接口的调用,按照PDF格式的标准转换为PDF文件,或者直接进行点阵化处理后输出为BMP、JPEG、GIF、TIFF、PNG图片文件,或者提取其中的文本信息另存为TXT文本文件;

较佳地,所述的将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作时,直接调用操作系统API函数,将EMF文件发送至虚拟打印机上输出,从而得到PDF、BMP、JPEG、GIF、TIFF、PNG文件;

较佳地,所述的将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作时,直接调用操作系统API函数,将EMF文件发送至物理打印机上输出,最终得到嵌入水印信息的纸质文档。

基于同一发明构思,本发明还提供了一种文本文档中数字水印的嵌入装置,包括:

原始EMF文件生成模块,用于将电子格式文本文档内容数据转换为EMF文件:

目标EMF文件创建模块,连接所述原始EMF文件生成模块,用于读取原始EMF文件的文件头参数信息,使用相同的参数信息创建对应的目标EMF文件;

原始EMF文件遍历模块,连接所述原始EMF文件生成模块,用于遍历原始EMF文件中记录的所有GDI函数及其参数信息,并判断读取的GDI函数是否为TEXTOUT;

水印信息嵌入模块,连接所述原始EMF文件遍历模块,用于读取判断为TEXTOUT的GDI函数的所有字体信息并嵌入水印信息;

目标EMF文件生成模块,连接所述水印信息嵌入模块和所述目标EMF文件创建模块,用于将嵌入水印信息的文本对象复制到目标EMF文件中,或者直接将读取的判断为非TEXTOUT的GDI函数复制到目标EMF文件中;

EMF文件输出转换模块,连接所述目标EMF文件生成模块,用于将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作。

本发明的有益效果如下:

由于本发明中,EMF文件是Windows操作系统底层打印过程中一个中间矢量文件格式,它可以描述电子格式文本文档中的所有文字、图形和图像等对象信息,因此通过EMF虚拟打印技术可以很方便地获取电子格式文本文档中的所有内容数据。

由于本发明中,EMF文件的结构相对PDF、PS和PCL(Printer Command Language)页面描述语言来说比较简单,可以遍历文件中所有的GDI函数记录信息获取所有对象数据信息,并且通过修改相应的对象数据信息属性来嵌入水印信息,然后很方便地转换为其他电子文档格式,比如PDF文件或者各种图片文件,以便更灵活地进行文档数据交换。

由于本发明中,通过Windows操作系统提供的GDI函数直接将嵌入水印后的EMF文件发送至虚拟打印机和物理打印机输出,得到嵌入水印后的其他电子格式文本文档或者纸质文档,从而达到了在各种电子格式文本文档和打印输出的纸质文档中同时嵌入水印信息的效果,并最终实现对于重要文本文档的安全防控、溯源追踪以及内容保护的目的。

附图说明

图1为实施例1中一种文本文档中数字水印的嵌入方法的实施流程示意图;

图2为实施例1中所述的word文档嵌入水印信息流程示意图;

图3为实施例2中PDF文档嵌入水印信息流程示意图;

图4为实施例1中一种文本文档中数字水印的嵌入装置的模块组成示意图。

具体实施方式

下面通过具体实施例和附图,对本发明做详细的说明。

本发明的构思在于将各种电子格式文本文档统一转换为EMF格式文件,其中每页文档对应生成一幅EMF图像;进而读取每个EMF格式文件中记录的所有GDI函数及其参数信息得到所有的文本对象数据;通过修改文本对象的属性信息嵌入水印信息,并将嵌入水印后的文本对象保存到一个新建的EMF文件中;将嵌入水印后的EMF文件转换为其他电子格式文档,或者通过调用操作系统的API函数将EMF文件发送至实际物理打印机输出,实现了电子格式文本文档和纸质文本文档中嵌入水印信息的目的。从而得到了一种文本文档中数字水印的嵌入方法和装置。

图1为实施例1中所述的一种文本文档中数字水印的嵌入方法的实施流程示意图。下面具体说明其各个步骤S101至S105。

S101,将电子格式文本文档内容数据转换为EMF文件,其中每页数据对应生成一个EMF文件,一个连续多页的电子格式文本文档会生成多页的EMF文件集合。

一般来说,有两种方法可以将电子格式文本文档内容数据转换为EMF文件。一是应用程序调用操作系统提供的函数接口,以页为单位将文档内容数据保存为EMF格式文件,每一页对应生成一幅EMF图像。二是应用程序通过虚拟的EMF打印机将文档数据输出为EMF文件。用户需要在客户端安装一个虚拟的EMF打印机,在应用程序中打印输出时不是选择通常使用的普通打印机,而是在列表中选择虚拟的EMF打印机,执行打印操作后,会在打印机首选项中设定的目录下获得转换后的EMF文件数据。

相比较而言,第一种方法需要了解EMF格式的每个细节,然后编写专用程序模块,用于生成EMF文件,这涉及到一定的工作量。而第二种方法的优点在于,应用程序本身无需理解EMF文件格式,不需要进行额外的工作,只需使用程序内部已有的打印模块就能生成所需的EMF文件。事实上,整个过程对于应用程序而言是完全透明的,在应用程序看来,整个过程只是一次普通的打印操作。当然其缺点则是需要用户额外选择虚拟EMF打印机进行输出,但是如果想实现在打印纸质文档中或者通过其他虚拟打印机(比如通过虚拟的PDF文件打印机转换PDF文件时)转换到其他格式电子文档,并且嵌入水印信息,通过第二种方法则可以取得非常理想的效果,即在文档正常打印输出的同时嵌入水印信息,对于用户来讲完全是透明的。大致的实现方法是:用户在正常的打印操作时,会选择实际的目标打印机进行打印输出,此时采用HOOK技术(又称钩子技术)截获系统所有的打印操作消息,强制将用户待打印的文档内容先发送至虚拟的EMF打印机,获得EMF格式文件,然后再将获得的EMF文件发送至实际目标打印机输出。

S102,打开一个原始的EMF文件,读取该文件的文件头参数信息,使用相同的参数信息创建对应的新的目标EMF文件。

读取的EMF文件头里包含了图形创建时的作者信息、图形尺寸、GDI函数个数等内容。另外在创建目标EMF文件时需要重新指定EMF文件的图像分辨率。

S103,遍历原始EMF文件中记录的所有GDI函数及其参数信息,判断读取的GDI函数是否为TEXTOUT,若是,读取所有字体信息并嵌入水印信息,并将修改后的文本对象复制到目标EMF文件中;若否,则直接将读取的GDI函数复制到目标EMF文件中。

读取的所有字体信息包括字符编码、字体名称、字体大小、字符间距、字体形状、字体颜色、行间距等。通过修改读取的字体信息属性来嵌入水印信息,有代表性的处理方法有两种,分别为修改字体的行间距和替换字库方式。

第一种方法,行间距编码就是在文本的每一页中,每间隔一行轮流地嵌入水印信息。但嵌入信息的行的相邻上下两行位置不动,作为参照。需嵌入信息的行根据水印数据的比特流进行轻微的上移和下移。在移动过的一行中编码一个信息比持。如果这一行上移,则编码为“1”,如果这一行下移,则编码为“0”。一般来说,大部分的文档格式都有一个持点:一段内的各行的间距是均匀的。尽管人眼已熟练于区分不均衡的情况,但是经验告诉我们:当垂直位移量等于或小于1/300英寸时人眼将无法辨认,为了方便准确地提出水印信息,通常页面上第一行和最后一行都不作为嵌入的行。

读取字符的行间距信息后,按照上面的方法修改了行间距信息,再将修改后的GDI函数作为一条记录写入目标的EMF文件中,从而完成水印信息的嵌入。

第二种方法,通过替换字库来嵌入水印信息,具体为:嵌入水印信息为“0”时,保持原有的字库类型不变,嵌入水印信息“1”时,将原有字库替换为修改后的字库。

通过修改字库的方法具有很大的优点,水印信息容量较大,可以抵抗缩放和不等分辨率的攻击,还可以用于识别经过数码相机或手机等低精度图像获取设备的图像中的水印信息识别,操作简单,鲁棒性能较高。但是需要设计新的字库文件,安装在计算机终端系统中,当文档被打印输出时,通过动态替换文档中的字体而嵌入水印信息。比如在MS Office word文件中嵌入水印信息的流程示意图如图2所示,具体说明如下:

Step1,获取原始EMF文件中当前TEXTOUT函数及其参数信息;

Step2,获取当前TEXTOUT函数中所包含的字体信息;

Step3,判断当前字体是否需要替换,若否,则结束;若需要替换,则按照当前字体信息(大小、质量、是否加粗等)创建目标字体对象;

Step4,判断TEXTOUT函数中是否包含可用汉字,若否,则结束;若包含可用汉字,则读取TEXTOUT函数中单个的可用汉字,并根据其对应的0和1水印位串信息设置目标字体类型;

Step5,创建新的TEXTOUT函数,并输出到目标EMF文件中;

Step6,结束整个嵌入过程。

在本发明中,我们通过逐条读取EMF文件中的记录信息,然后根据前面所述的规则,改变每个字符的字体名称来嵌入水印信息,最后将处理后的GDI函数复制到新的EMF文件中。下面具体描述一下在EMF文件中通过替换字库信息嵌入水印的思想。

在原有的EMF文件中,对于一个连续的具有相同属性的字符串而言,只需要一条GDI函数来描述。由于嵌入水印信息的需要,每个字符可能要使用不同的字体名称,因此有可能要分拆为多条GDI函数写入新的EMF文件中。比如“我爱北京天安门”是仿宋字体,在原始文档中有1条文本输出记录:

selectobject        font(仿宋)

textoutw            我爱北京天安门

当需要嵌入水印时,我们需要将这整条记录拆成单个的字符,然后根据要嵌入的信息设定每个字符的字体信息属性进行输出。假设嵌入信息为“0101010”,嵌“0”的汉字对应的字体为“连笔仿宋”,嵌“1”的字体为“断笔仿宋”,最后的效果可能会变成:

在上述记录拆分之前有一个重要的预处理工作,即将从EMF文件中读取的所有字符需要按照位置信息从上到下、从左到右的顺序进行重排序。因为在很多不规则排版的页面中,如图文混排文档,EMF文件中的GDI函数记录不是按照正常的阅读习惯顺序排列的。页面中的标注、页眉、页脚可能在EMF文件中正文前面出现,这样会造成信息嵌入时的文字顺序和信息提取时的文字顺序不一致,尤其对于打印扫描后的图片文件而言,只能按照字符的位置顺序进行水印信息的提取。因此,我们在嵌入信息之前,要先对EMF文件中的TEXTOUT函数按照每个字符在页面中的位置进行排序,从而使得文字内容看起来符合我们的阅读习惯。

由于EMF文件中每一条TEXTOUT函数作用的效果与它相邻的多条记录相关,比如SELECTOBJECT,SETBKCOLOR等。因此如果直接改变TEXTOUT记录在EMF文件中出现的位置可能造成不可控的效果。为此,我们尝试将待嵌入的水印信息位串进行反排序,使得按照TEXTOUT记录顺序嵌入的水印信息位串和按照阅读习惯排列的字符序列所代表的水印信息位串保持一致。举一个例子说明一下。

假设1,所待嵌入的水印信息位串为“1011001”。

假设2,水印信息的载体字符串为“我爱北京天安门”,如果每一个字符代表1bit信息的话,则根据阅读习惯,我们期望的嵌入方式为表1所示:

表1.嵌入方式列表

字符水印信息1011001

假设3,在实际EMF文件中,水印载体字符串被拆分为4条TEXTOUT记录,它们出现的顺序为:

如果按照在EMF文件中实际出现的顺序来分配水印信息位串,我们就不能得到假设2中的结果。本发明中,我们将会把水印信息位串进行反排序,使得每个字符对应正确的水印信息位串,具体为:

Step1,将4条TEXTOUT记录存为表2方式。

表2.TEXTOUT记录存储列表

index_origin内容index_YXusable_countoffset_index1NULL1NULL2北京NULL2NULL3天安门NULL3NULL4NULL1NULL

其中index_origin为每条TEXTOUT记录在EMF文件中的原始序号;index_YX为按阅读习惯从上到下、从左到右的位置顺序排序后的序号;usable_count为每条TEXTOUT记录中有效字符个数,offset_index为该条TEXTOUT记录所对应的水印信息位串在整个位串中的起始位置。

Step2,按照位置排序后形成新的序列,如表3所示.

表3.排序后形成的新序列列表

index_origin内容index_YXusable_countoffset_index111NULL421NULL2北京32NULL3天安门43NULL

Step3,按照上述位置顺序,将每条TEXTOUT记录与嵌入信息的位置进行对应,如表4所示。

表4.TEXTOUT记录与嵌入信息的位置对应列表

index_origin内容index_YXusable_countoffset_index111042112北京3223天安门434

比如,“天安门”有3个字符,对应在原始水印信息位串中的起始位置为4,则它代表的水印信息位串应该为“001”。

Step4,再按照原始编号index_origin进行排序,如表5所示。

表5.按照原始编号index_origin进行排序的结果列表

index_origin内容index_YXusable_countoffset_index

11102北京3223天安门4344211

则最后的水印嵌入顺序和效果为:

我  msg[0]=1

北  msg[2]=1

京  msg[3]=1

天  msg[4]=0

安  msg[5]=0

门  msg[6]=1

爱  msg[1]=0

但如果按照阅读习惯顺序,我们可以得到假设2所期望的结果。

上述提到的都是有关文本数据,如果原始EMF文件中记录的GDI函数为图像对象时,将图像数据拷贝至内存空间,调用数字图像水印算法嵌入水印信息后,再将修改过的内存空间复制到目标EMF文件中,从而可以实现电子文档内容中图像对象中的水印信息嵌入。

S104,判断是否处理完所有的原始EMF文件,若否则分别执行步骤S102和步骤S103的操作;若是,则执行步骤S105;

S105,将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作。

将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作时,从EMF文件中逐条读取对操作系统函数接口的调用,按照PDF格式的标准转换为PDF文件,或者直接进行点阵化处理后输出为BMP、JPEG、GIF、TIFF、PNG图片文件,或者提取其中的文本信息另存为TXT文本文件;

将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作时,直接调用操作系统API函数,将EMF文件发送至虚拟打印机上输出,从而得到PDF、BMP、JPEG、GIF、TIFF、PNG文件;

将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作时,直接调用操作系统API函数,将EMF文件发送至物理打印机上输出,最终得到嵌入水印信息的纸质文档;

实施例2,本实施例考虑在PDF文件中嵌入水印信息的情况。

不同于MS Office word文件,在Acrobat Reader浏览器中打开PDF文件选择虚拟EMF打印机输出为EMF文件时,其中的矢量文字对象转换后不再是矢量的TEXTOUT函数记录,而是每个字符都输出为一个图形,其中包括点、线、曲线,最后会使用FILLPATH命令填充这块区域。比如,以下是一个字符的对应的输出记录:

R3313:[059]EMR_BEGINPATH(s=8)

R3314:[027]EMR_MOVETOEX(s=16){ptl(3369,3594)}

R3315:[088]EMR_POLYBEZIERTO16(s=40){rclBounds(0,0,-1,-1),nbPoints:3,

P1(3371,3598)-Pn(3375,3607)}

R3316:[054]EMR_LINETO(s=16){ptl(3417,3602)}

R3317:[088]EMR_POLYBEZIERTO16(s=40){rclBounds(0,0,-1,-1),

nbPoints:

……

R3396:[060]EMR_ENDPATH(s=8)

R3397:[062]EMR_FILLPATH(s=24){rclBounds(3292,3594,3451,3756)}

从FILLPATH记录中可以获得汉字在页面中的位置、区域,但是无法得到汉字的编码、字体、大小等信息。此时水印信息嵌入方式可以分为三种情况:

第1种情况,读取EMF文件中FILLPATH记录信息,采用基于图形变换的方法嵌入水印信息,然后再将修改后的FILLPATH记录写入目标EMF文件中。

第2种情况,将从EMF文件中读取的FILLPATH记录的文字曲线数据转换为字符点阵图像,并利用基于二值文本图像水印的算法嵌入水印信息,然后再将嵌入水印后的字符图像作为一个独立的图像对象写入到目标EMF文件中。

第3种情况,将从EMF文件中读取的FILLPATH记录的文字曲线数据还原回文字对象,然后再按照实施例中替换字库的方式嵌入水印信息。这就需要从原始的PDF文件中读取每个汉字的位置、编码、大小、颜色、字体名称、是否粗体等所有信息,并按照位置将PDF文件中读取的字符跟EMF文件中的图形进行匹配,从而将图形对象恢复为文字对象,嵌入水印信息后写入到目标EMF文件中。具体流程示意图如图3所示:

Step1,读取EMF文件中FILLPATH记录,获取当前文字曲线区域的外接矩形;

Step2,获取PDF文件中下一个字符的坐标位置信息和相关字体信息;

Step3,判断读取的字符的坐标位置是否处在FILLPATH记录中文字曲线区域外接矩形的内部,若是,则该图形区域可以恢复为文本对象,转入Step4;

Step4,按照这个字符对应的字体信息,比如大小、质量、是否加粗等,创建目标字体对象;

Step5,利用字库替换的方法嵌入水印信息,根据每个字符对应的信息位串设置目标字体类型;

Step6,创建新的TEXTOUT记录,并输出到目标EMF文件中;

Step7,结束整个嵌入过程。

基于同一发明构思,本发明还提供了一种文本文档中数字水印的嵌入装置,其模块组成及连接关系如图4所示,对各模块分别说明如下:

原始EMF文件生成模块,用于将电子格式文本文档内容数据转换为EMF文件;

目标EMF文件创建模块,连接所述原始EMF文件生成模块,用于读取原始EMF文件的文件头参数信息,使用相同的参数信息创建对应的目标EMF文件;

原始EMF文件遍历模块,连接所述原始EMF文件生成模块,用于遍历原始EMF文件中记录的所有GDI函数及其参数信息,并判断读取的GDI函数是否为TEXTOUT;

水印信息嵌入模块,连接所述原始EMF文件遍历模块,用于读取判断为TEXTOUT的GDI函数的所有字体信息并嵌入水印信息;

目标EMF文件生成模块,连接所述水印信息嵌入模块和所述目标EMF文件创建模块,用于将嵌入水印信息的文本对象复制到目标EMF文件中,或者直接将读取的判断为非TEXTOUT的GDI函数复制到目标EMF文件中;

EMF文件输出转换模块,连接所述目标EMF文件生成模块,用于将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作。

由于本发明中,EMF文件是Windows操作系统底层打印过程中一个中间矢量文件格式,它可以描述电子格式文本文档中的所有文字、图形和图像等对象信息,因此通过EMF虚拟打印技术可以很方便地获取电子格式文本文档中的所有内容数据。

由于本发明中,EMF文件的结构相对PDF、PS和PCL页面描述语言来说比较简单,可以遍历文件中所有的GDI函数记录信息获取所有对象数据信息,并且通过修改相应的对象数据信息属性来嵌入水印信息,然后很方便地转换为其他电子文档格式,比如PDF文件或者各种图片文件,以便更灵活地进行文档数据交换。

由于本发明中,通过Windows操作系统提供的GDI函数直接将嵌入水印后的EMF文件发送至虚拟打印机和物理打印机输出,得到嵌入水印后的其他电子格式文本文档或者纸质文档,从而达到了在各种电子格式文本文档和打印输出的纸质文档中同时嵌入水印信息的效果,并最终实现对于重要文本文档的安全防控、溯源追踪以及内容保护的目的。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也包含这些改动和变型在内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号