由去掉word文檔中的一個GoLand復制后殘留的底紋說起


首先,是有個很難去掉的底紋,就是當黑底的Goland中復制代碼,以保留格式方式黏貼后,會保留字體顏色、大小和“底紋”。

就是保留的這個底紋,想去掉一直沒成功,既不是文字的底紋,也不是頁面邊框里的底紋。

  • 為什么要去除,是因為wps復制保留的文檔,看上去還可以。但是微軟的office打開,行之間露出來了,影響閱讀、難看的要死,不如去掉。

發揚二杠子精神,做為程序員,能不能用什么讀取文件屬性,查看(最好是能去除)這個屬性。

GitHub上搜了下,搜word沒搜到,在百度搜了下,看到個docx4j的似乎是java的一個庫,然后又在github里以docx搜了下,搜到個Go語言的操作庫(https://github.com/nguyenthenguyen/docx)。因為我不會Java,會點Go,就用它了。

寫了幾行測試代碼。讀出word,發現doc的讀不成功,再看和它自帶例子區別,改文檔為docx的。能讀出來。

看了下接受word內容的結構體,看里面 有兩個結構體ReplaceDocx和Docx,屬性相近,摘錄個:

type ReplaceDocx struct {
   zipReader ZipData
   content   string
   links     string
   headers   map[string]string
   footers   map[string]string
}

看了下內容,格式更像是存儲在content中。將內容復制處了,看顏色都是十六進制顯示的,看了下word中的底色是 2B2B2B(微信截圖的時候截圖框右下角有顯示顏色數值)。

搜了下果然有,給替換了下,寫入新文件發現終於去掉了:

docx2.SetContent(strings.ReplaceAll(contextStr, `<w:shd w:val="clear" w:fill="2B2B2B"/>`, ""))

這個元素位置是在  <w:body> 子元素<w:p>再子元素,接着<w:r>子元素, 再 <w:rPr>子元素下有個 w:shd 名字的元素

 

測試文檔只有一行, 把我正式的文檔弄過來試下,又沒成功。。額,首先是doc格式的,需要改成docx,在用wps保存的時候,發現能保存很多種,還有xml格式的(心里咯噔了下)。

改成docx還是不行,后來發現w:shd那個元素條目變成了這樣:

<w:shd w:val="clear" w:color="auto" w:fill="2B2B2B"/>

兩個替換都加上就好了。

 

而這次我不再是將代碼讀取文檔,復制context屬性查找。而是另存為文件未xml格式,再用notepad打開查找到的。

而且發現,這個xml格式仍能正常的用wps打開。

 

以前認為doc的比較通用,兼容性好,看來還是應該轉用docx了,更高級些吧。或者,那個xml格式不正是一直想找的記錄日志的方式么?有word的排版方便,還有內容的文本化。

因為這個xml文件可以wps當做word打開,所以直接xml方式直接文本刪除掉,那都不用重新了吧。

所以最終簡潔方式是文檔轉為xml格式,刪除其中的對應顏色底紋 w:shd  元素。然后看個人喜好是不是要將文件再另存為docx了。

 

問題是解決了,去除了“底紋”。但是其實效果並不好,沒了底紋,很多原先字體看上去都看不清了。

 

查找w:shd 含義時,看到個介紹xml格式word文檔意義的網頁(https://www.cnblogs.com/forlina/archive/2011/06/09/2076559.html),雖然沒介紹w:shd,但有其他一些常見的。

關於微軟的office有沒提供 xml和docx的另存為,因為沒office這個正版軟件,沒做測試。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM