一種文本文檔中數字水印的嵌入方法和裝置制造方法【專利摘要】本發明涉及一種文本文檔中數字水印的嵌入方法和裝置。該方法包括:將電子格式文本文檔轉換為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日【發明者】李曉妮申請人:北京溯源鴻業科技有限公司