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

文档序号:6514082阅读:246来源:国知局
一种文本文档中数字水印的嵌入方法和装置制造方法【专利摘要】本发明涉及一种文本文档中数字水印的嵌入方法和装置。该方法包括:将电子格式文本文档转换为EMF文件;打开转换后的原始的EMF文件,使用其文件头参数信息创建对应的目标EMF文件;遍历原始EMF文件中的所有GDI函数及其参数信息,判断GDI函数是否为TEXTOUT,若是则读取所有字体信息并嵌入水印信息,然后复制到目标EMF文件中;若否则直接将GDI函数复制到目标EMF文件中;处理完所有的原始EMF文件后,将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作。本发明能够解决各种电子格式文本文档和纸质文本文档中的水印信息嵌入问题,实现对于重要文本文档的安全防控、溯源追踪以及内容保护。【专利说明】一种文本文档中数字水印的嵌入方法和装置【
技术领域
】[0001]本发明属于文档保护【
技术领域
】,涉及一种文本文档中数字水印的嵌入方法,具体涉及EMF增强图元文件(EnhancedMetafile,EMF)中的数字水印嵌入方法和装置。【
背景技术
】[0002]随着知识经济时代的快速到来,知识在现代企业竞争优势中的作用空前突出,知识的载体一电子文件,成为了现代企业运营中最宝贵、最重要的战略资源。同样在政府部门和企事业单位的办公环境中,电子文档成为信息交流和知识传递的必不可少的载体。由于在文档信息传播过程中,文档内容很容易被非法获取和篡改,因此对重要文档的保护显得尤为重要。[0003]纵观文本文档的传播方式主要有两种:a)以电子文件格式传播。在很多情况下,一个电子文档可能会在很多机器上流转,内容被很多人浏览。如果不能有效地掌握电子文档的流转过程,极易造成泄密事件的发生。b)通过打印、扫描、复印的方式以纸质文档形式进行传播,纸质文档一旦发生流失很难追溯至文档的来源。[0004]文本水印技术在基于文档的信息安全方面发挥着积极作用,可以有效地解决上述问题。比如将某些具有标识作用的信息,诸如文档生成时间、文档的归属等隐藏在涉密的文档数据中,这些隐秘信息在视觉上是不可见的。当文档被非法获取或复制时,通过特定的装置提取的隐藏在文本中信息可以追踪文本的源头以达到版权保护及追溯源头的作用。[0005]但是如何很方便地将水印信息嵌入到文本文件中存在着技术障碍。现有的方法中,有针对特定的电子文档编辑和浏览软件开发了相应的系统或者插件来完成水印信息的嵌入,比如微软Office办公文件或者F1DF(PortableDocumentFormat)文件,这些软件系统本身对外提供了基于宏或者COM组件方式的开发接口,可以较为方便地进行二次开发。但是该方法的开发成本非常高:一方面要针对不同的文档软件系统开发不同的系统或者插件,而且大部分的软件不支持二次开发,比如大量的私有格式文件系统等;另外一方面,即使支持二次开发的软件系统也会有版本升级的问题,比如通用的MSOffice或者AdobeAcrobat软件。不同的版本之间的接口和COM(Component0bject)组件存在一定的兼容性问题,软件系统一旦升级,水印系统可能会也要进行相应的改动升级后才能支持。因此该方法非常不灵活,通用性也比较差。如果要在打印的纸质文档中嵌入水印信息,利用上述方法进行水印信息嵌入后,还需要额外的个性化的打印输出操作,无法直接在打印输出的过程中嵌入水印信息。[0006]因此,为了方便快捷地在任意电子格式文本文档和纸质文本文档中嵌入水印信息,需要解决两个问题:I)要将各种电子格式文档统一转为一种文件格式,然后通过解析该文件格式能够准确地获取文档中的文本对象,从而通过修改文本对象属性嵌入水印信息;2)转换后的文件格式的解析过程要相对简单,比如PDF文件和PS(PostScript)文件解析过程就非常复杂,难度很大。另外PDF文件和PS文件只能通过Acrobat或者特定的软件系统才能完成打印输出,因此打印客户端需要额外安装相应的软件系统,既增加了工作量又提高了成本。而比较理想的文件格式就是EMF文件。所谓的EMF文件是一种矢量图形文件,在文件内部存储的是图形设备接口⑶I(GraphicDevicesInterface)函数,不同于位图文件中的像素,克服了常见位图文件的诸多缺点,比如存储空间大,速度慢,图形放缩时严重失真等。EMF文件中记录着每一个GDI函数及其参数信息,显示时通过这些函数实现图形的重绘,具有存储空间小,图形缩放不失真的优点,真正做到与设备无关。[0007]EMF由文件头、⑶I函数和EMF文件尾三部分组成。文件头里包含了图形创建时的作者信息、图形尺寸、GDI函数个数等内容。文件尾记录文件结束标志,中间的GDI函数是文件的主体,记录着图形中每一个GDI函数。应用程序打开EMF文件时执行各个GDI函数来绘制出图像,存储时将GDI函数写回EMF文件中。总之任何复杂的图形都能分解为直线、曲线、三角形、椭圆、文字等基本的图形对象,对这些图形对象的绘制均可通过系统中的GDI函数来完成。因此文档中的所有对象都可以用EMF文件来准确描述。【
发明内容】[0008]本发明提供了一种文本文档中数字水印的嵌入方法和装置,用以解决现有技术中无法方便地获取各种电子格式文本文档内容中的文本对象数据问题,进而解决各种电子格式文本文档和纸质文本文档中的水印信息嵌入问题,并最终实现对于重要文本文档的安全防控、溯源追踪以及内容保护的目的。[0009]本发明的构思在于将各种电子格式文本文档统一转换为矢量的EMF格式文件,其中每页文档对应生成一幅EMF图像;进而读取每个EMF格式文件中记录的所有GDI函数及其参数信息得到所有的文本对象数据;通过修改文本对象的属性信息嵌入水印信息,并将嵌入水印后的文本对象保存到一个新建的EMF文件中;将嵌入水印后的EMF文件转换为其他电子格式文档,或者通过调用操作系统的API函数将EMF文件发送至实际物理打印机输出,实现了电子格式文本文档和纸质文本文档中嵌入水印信息的目的。从而得到了一种文本文档中数字水印的嵌入方法和装置。[0010]本发明的一种文本文档中数字水印的嵌入方法,包括如下步骤:[0011]步骤一,将电子格式文本文档内容数据转换为EMF文件,其中每页数据对应生成一个EMF文件,多页的电子格式文本文档对应生成多页的EMF文件集合;[0012]步骤二,打开一个原始的EMF文件,读取该文件的文件头参数信息,使用相同的参数信息创建对应的新的目标EMF文件;[0013]步骤三,遍历原始EMF文件中记录的所有⑶I函数及其参数信息,判断读取的⑶I函数是否为TEXT0UT,若是,读取所有字体信息并嵌入水印信息,并将修改后的文本对象复制到目标EMF文件中;若否,则直接将读取的GDI函数复制到目标EMF文件中;[0014]步骤四,判断是否处理完所有的原始EMF文件,若否,则分别执行步骤二和步骤三的操作;若是,则执行步骤五;[0015]步骤五,将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作。[0016]较佳地,所述的将电子格式文本文档内容数据转换为EMF文件时,应用程序调用操作系统提供的函数接口,以页为单位将文档内容数据保存为EMF格式文件,每一页对应生成一幅EMF图像;[0017]较佳地,所述的将电子格式文本文档内容数据转换为EMF文件时,应用程序通过虚拟的EMF打印机将文档数据输出为EMF文件;[0018]较佳地,所述的读取的所有字体信息包括字符编码、字体名称、字体大小、字符间距、字体形状、字体颜色、行间距;[0019]较佳地,所述的读取所有字体信息后,通过替换字库来嵌入水印信息,具体为:嵌入水印信息为“O”时,保持原有的字库类型不变,嵌入水印信息“I”时,将原有字库替换为修改后的字库;[0020]较佳地,所述的读取所有字体信息后,通过修改字符间距和行间距来嵌入水印信息;[0021]较佳地,步骤三中,若读取的原始EMF文件中记录的⑶I函数为图像对象,则将图像数据拷贝至内存空间,调用数字图像水印算法嵌入水印信息后,再将修改过的内存空间复制到目标EMF文件中;[0022]较佳地,所述的将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作时,从EMF文件中逐条读取对操作系统函数接口的调用,按照PDF格式的标准转换为PDF文件,或者直接进行点阵化处理后输出为BMP、JPEG、GIF、TIFF、PNG图片文件,或者提取其中的文本信息另存为TXT文本文件;[0023]较佳地,所述的将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作时,直接调用操作系统API函数,将EMF文件发送至虚拟打印机上输出,从而得到H)F、BMP、JPEG、GIF、TIFF、PNG文件;[0024]较佳地,所述的将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作时,直接调用操作系统API函数,将EMF文件发送至物理打印机上输出,最终得到嵌入水印信息的纸质文档。[0025]基于同一发明构思,本发明还提供了一种文本文档中数字水印的嵌入装置,包括:[0026]原始EMF文件生成模块,用于将电子格式文本文档内容数据转换为EMF文件:[0027]目标EMF文件创建模块,连接所述原始EMF文件生成模块,用于读取原始EMF文件的文件头参数信息,使用相同的参数信息创建对应的目标EMF文件;[0028]原始EMF文件遍历模块,连接所述原始EMF文件生成模块,用于遍历原始EMF文件中记录的所有GDI函数及其参数信息,并判断读取的GDI函数是否为TEXTOUT;[0029]水印信息嵌入模块,连接所述原始EMF文件遍历模块,用于读取判断为TEXTOUT的GDI函数的所有字体信息并嵌入水印信息;[0030]目标EMF文件生成模块,连接所述水印信息嵌入模块和所述目标EMF文件创建模块,用于将嵌入水印信息的文本对象复制到目标EMF文件中,或者直接将读取的判断为非TEXTOUT的⑶I函数复制到目标EMF文件中;[0031]EMF文件输出转换模块,连接所述目标EMF文件生成模块,用于将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作。[0032]本发明的有益效果如下:[0033]由于本发明中,EMF文件是Windows操作系统底层打印过程中一个中间矢量文件格式,它可以描述电子格式文本文档中的所有文字、图形和图像等对象信息,因此通过EMF虚拟打印技术可以很方便地获取电子格式文本文档中的所有内容数据。[0034]由于本发明中,EMF文件的结构相对F1DFaPS和PCL(PrinterCommandLanguage)页面描述语言来说比较简单,可以遍历文件中所有的GDI函数记录信息获取所有对象数据信息,并且通过修改相应的对象数据信息属性来嵌入水印信息,然后很方便地转换为其他电子文档格式,比如PDF文件或者各种图片文件,以便更灵活地进行文档数据交换。[0035]由于本发明中,通过Windows操作系统提供的⑶I函数直接将嵌入水印后的EMF文件发送至虚拟打印机和物理打印机输出,得到嵌入水印后的其他电子格式文本文档或者纸质文档,从而达到了在各种电子格式文本文档和打印输出的纸质文档中同时嵌入水印信息的效果,并最终实现对于重要文本文档的安全防控、溯源追踪以及内容保护的目的。【专利附图】【附图说明】[0036]图1为实施例1中一种文本文档中数字水印的嵌入方法的实施流程示意图;[0037]图2为实施例1中所述的word文档嵌入水印信息流程示意图;[0038]图3为实施例2中PDF文档嵌入水印信息流程示意图;[0039]图4为实施例1中一种文本文档中数字水印的嵌入装置的模块组成示意图。【具体实施方式】[0040]下面通过具体实施例和附图,对本发明做详细的说明。[0041]本发明的构思在于将各种电子格式文本文档统一转换为EMF格式文件,其中每页文档对应生成一幅EMF图像;进而读取每个EMF格式文件中记录的所有GDI函数及其参数信息得到所有的文本对象数据;通过修改文本对象的属性信息嵌入水印信息,并将嵌入水印后的文本对象保存到一个新建的EMF文件中;将嵌入水印后的EMF文件转换为其他电子格式文档,或者通过调用操作系统的API函数将EMF文件发送至实际物理打印机输出,实现了电子格式文本文档和纸质文本文档中嵌入水印信息的目的。从而得到了一种文本文档中数字水印的嵌入方法和装置。[0042]图1为实施例1中所述的一种文本文档中数字水印的嵌入方法的实施流程示意图。下面具体说明其各个步骤SlOl至S105。[0043]S101,将电子格式文本文档内容数据转换为EMF文件,其中每页数据对应生成一个EMF文件,一个连续多页的电子格式文本文档会生成多页的EMF文件集合。[0044]—般来说,有两种方法可以将电子格式文本文档内容数据转换为EMF文件。一是应用程序调用操作系统提供的函数接口,以页为单位将文档内容数据保存为EMF格式文件,每一页对应生成一幅EMF图像。二是应用程序通过虚拟的EMF打印机将文档数据输出为EMF文件。用户需要在客户端安装一个虚拟的EMF打印机,在应用程序中打印输出时不是选择通常使用的普通打印机,而是在列表中选择虚拟的EMF打印机,执行打印操作后,会在打印机首选项中设定的目录下获得转换后的EMF文件数据。[0045]相比较而言,第一种方法需要了解EMF格式的每个细节,然后编写专用程序模块,用于生成EMF文件,这涉及到一定的工作量。而第二种方法的优点在于,应用程序本身无需理解EMF文件格式,不需要进行额外的工作,只需使用程序内部已有的打印模块就能生成所需的EMF文件。事实上,整个过程对于应用程序而言是完全透明的,在应用程序看来,整个过程只是一次普通的打印操作。当然其缺点则是需要用户额外选择虚拟EMF打印机进行输出,但是如果想实现在打印纸质文档中或者通过其他虚拟打印机(比如通过虚拟的I3DF文件打印机转换PDF文件时)转换到其他格式电子文档,并且嵌入水印信息,通过第二种方法则可以取得非常理想的效果,即在文档正常打印输出的同时嵌入水印信息,对于用户来讲完全是透明的。大致的实现方法是:用户在正常的打印操作时,会选择实际的目标打印机进行打印输出,此时采用HOOK技术(又称钩子技术)截获系统所有的打印操作消息,强制将用户待打印的文档内容先发送至虚拟的EMF打印机,获得EMF格式文件,然后再将获得的EMF文件发送至实际目标打印机输出。[0046]S102,打开一个原始的EMF文件,读取该文件的文件头参数信息,使用相同的参数信息创建对应的新的目标EMF文件。[0047]读取的EMF文件头里包含了图形创建时的作者信息、图形尺寸、⑶I函数个数等内容。另外在创建目标EMF文件时需要重新指定EMF文件的图像分辨率。[0048]S103,遍历原始EMF文件中记录的所有⑶I函数及其参数信息,判断读取的⑶I函数是否为TEXT0UT,若是,读取所有字体信息并嵌入水印信息,并将修改后的文本对象复制到目标EMF文件中;若否,则直接将读取的GDI函数复制到目标EMF文件中。[0049]读取的所有字体信息包括字符编码、字体名称、字体大小、字符间距、字体形状、字体颜色、行间距等。通过修改读取的字体信息属性来嵌入水印信息,有代表性的处理方法有两种,分别为修改字体的行间距和替换字库方式。[0050]第一种方法,行间距编码就是在文本的每一页中,每间隔一行轮流地嵌入水印信息。但嵌入信息的行的相邻上下两行位置不动,作为参照。需嵌入信息的行根据水印数据的比特流进行轻微的上移和下移。在移动过的一行中编码一个信息比持。如果这一行上移,则编码为“I”,如果这一行下移,则编码为“O”。一般来说,大部分的文档格式都有一个持点:一段内的各行的间距是均匀的。尽管人眼已熟练于区分不均衡的情况,但是经验告诉我们:当垂直位移量等于或小于I/300英寸时人眼将无法辨认,为了方便准确地提出水印信息,通常页面上第一行和最后一行都不作为嵌入的行。[0051]读取字符的行间距信息后,按照上面的方法修改了行间距信息,再将修改后的GDI函数作为一条记录写入目标的EMF文件中,从而完成水印信息的嵌入。[0052]第二种方法,通过替换字库来嵌入水印信息,具体为:嵌入水印信息为“O”时,保持原有的字库类型不变,嵌入水印信息“I”时,将原有字库替换为修改后的字库。[0053]通过修改字库的方法具有很大的优点,水印信息容量较大,可以抵抗缩放和不等分辨率的攻击,还可以用于识别经过数码相机或手机等低精度图像获取设备的图像中的水印信息识别,操作简单,鲁棒性能较高。但是需要设计新的字库文件,安装在计算机终端系统中,当文档被打印输出时,通过动态替换文档中的字体而嵌入水印信息。比如在MSOfficeword文件中嵌入水印信息的流程示意图如图2所示,具体说明如下:[0054]Stepl,获取原始EMF文件中当前TEXTOUT函数及其参数信息;[0055]Step2,获取当前TEXTOUT函数中所包含的字体信息;[0056]Step3,判断当前字体是否需要替换,若否,则结束;若需要替换,则按照当前字体信息(大小、质量、是否加粗等)创建目标字体对象;[0057]St印4,判断TEXTOUT函数中是否包含可用汉字,若否,则结束;若包含可用汉字,贝U读取TEXTOUT函数中单个的可用汉字,并根据其对应的O和I水印位串信息设置目标字体类型;[0058]St印5,创建新的TEXTOUT函数,并输出到目标EMF文件中;[0059]St印6,结束整个嵌入过程。[0060]在本发明中,我们通过逐条读取EMF文件中的记录信息,然后根据前面所述的规贝U,改变每个字符的字体名称来嵌入水印信息,最后将处理后的GDI函数复制到新的EMF文件中。下面具体描述一下在EMF文件中通过替换字库信息嵌入水印的思想。[0061]在原有的EMF文件中,对于一个连续的具有相同属性的字符串而言,只需要一条GDI函数来描述。由于嵌入水印信息的需要,每个字符可能要使用不同的字体名称,因此有可能要分拆为多条GDI函数写入新的EMF文件中。比如“我爱北京天安门”是仿宋字体,在原始文档中有I条文本输出记录:[0062]selectobjectfont(仿宋)[0063]textoutw我爱北京天安门[0064]当需要嵌入水印时,我们需要将这整条记录拆成单个的字符,然后根据要嵌入的信息设定每个字符的字体信息属性进行输出。假设嵌入信息为“0101010”,嵌“O”的汉字对应的字体为“连笔仿宋”,嵌“I”的字体为“断笔仿宋”,最后的效果可能会变成:[0065]【权利要求】1.一种文本文档中数字水印的嵌入方法,其步骤包括:步骤一:将电子格式文本文档内容数据转换为EMF文件,其中每页数据对应生成一个EMF文件,多页的电子格式文本文档对应生成多页的EMF文件集合;步骤二:打开一个原始的EMF文件,读取其文件头参数信息,使用相同的参数信息创建对应的目标EMF文件;步骤三:遍历原始EMF文件中记录的所有⑶I函数及其参数信息,判断读取的⑶I函数是否为TEXTOUT,若是,读取所有字体信息并嵌入水印信息,并将修改后的文本对象复制到目标EMF文件中;若否,则直接将读取的GDI函数复制到目标EMF文件中;步骤四:判断是否处理完所有的原始EMF文件,若否,则分别执行步骤二和步骤三的操作;若是,则执行步骤五;步骤五:将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作。2.如权利要求1所述的方法,其特征在于:步骤一采用下列方法之一将电子格式文本文档内容数据转换为EMF文件:1)应用程序调用操作系统提供的函数接口,以页为单位将文档内容数据保存为EMF格式文件,每一页对应生成一幅EMF图像;2)应用程序通过虚拟的EMF打印机将文档数据输出为EMF文件。3.如权利要求1所述的方法,其特征在于:步骤三所述字体信息包括字符编码、字体名称、字体大小、字符间距、字体形状、字体颜色和行间距。4.如权利要求1所述的方法,其特征在于:步骤三通过替换字库来嵌入水印信息,在嵌入水印信息为“O”时,保持原有的字库类型不变,在嵌入水印信息“I”时,将原有字库替换为修改后的字库。5.如权利要求1所述的方法,其特征在于:步骤三通过修改字符间距和行间距来嵌入水印信息。6.如权利要求1所述的方法,其特征在于:步骤三中,若读取的原始EMF文件中记录的GDI函数为图像对象,则将图像数据拷贝至内存空间,调用数字图像水印算法嵌入水印信息后,再将修改过的内存空间复制到目标EMF文件中。7.如权利要求1所述的方法,其特征在于,步骤五所述最终的输出转换操作为下列中的一种或多种:1)从EMF文件中逐条读取对操作系统函数接口的调用,按照PDF格式的标准转换为TOF文件,或者直接进行点阵化处理后输出为BMP、JPEG、GIF、TIFF、PNG图片文件,或者提取其中的文本信息另存为TXT文本文件;2)直接调用操作系统API函数,将EMF文件发送至虚拟打印机上输出,从而得到HF、BMP、JPEG、GIF、TIFF、PNG文件;3)直接调用操作系统API函数,将EMF文件发送至物理打印机上输出,最终得到嵌入水印信息的纸质文档。8.一种采用权利要求1所述方法的文本文档中数字水印的嵌入装置,其特征在于,包括:原始EMF文件生成模块,用于将电子格式文本文档内容数据转换为EMF文件;目标EMF文件创建模块,连接所述原始EMF文件生成模块,用于读取原始EMF文件的文件头参数信息,使用相同的参数信息创建对应的目标EMF文件;原始EMF文件遍历模块,连接所述原始EMF文件生成模块,用于遍历原始EMF文件中记录的所有GDI函数及其参数信息,并判断读取的GDI函数是否为TEXTOUT;水印信息嵌入模块,连接所述原始EMF文件遍历模块,用于读取判断为TEXTOUT的⑶I函数的所有字体信息并嵌入水印信息;目标EMF文件生成模块,连接所述水印信息嵌入模块和所述目标EMF文件创建模块,用于将嵌入水印信息的文本对象复制到目标EMF文件中,或者直接将读取的判断为非TEXTOUT的⑶I函数复制到目标EMF文件中;EMF文件输出转换模块,连接所述目标EMF文件生成模块,用于将所有嵌入水印信息后的目标EMF文件进行最终的输出转换操作。9.如权利要求8所述的装置,其特征在于,所述水印信息嵌入模块通过替换字库来嵌入水印信息,具体为:嵌入水印信息为“O”时,保持原有的字库类型不变,嵌入水印信息“I”时,将原有字库替换为修改后的字库。10.如权利要求8所述的装置,其特征在于:所述水印信息嵌入模块通过修改字符间距和行间距来嵌入水印信息。【文档编号】G06F21/16GK103500296SQ201310456022【公开日】2014年1月8日申请日期:2013年9月29日优先权日:2013年9月29日【发明者】李晓妮申请人:北京溯源鸿业科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1