<kbd id="uqusk"></kbd>
  • <strike id="uqusk"></strike>
    <ul id="uqusk"><pre id="uqusk"></pre></ul>
    <strike id="uqusk"></strike>
  • <ul id="uqusk"></ul>
    <samp id="uqusk"></samp>
  • <strike id="uqusk"><s id="uqusk"></s></strike>

    go 實現(xiàn)電子合同(生成動態(tài)內(nèi)容word

    網(wǎng)絡(luò) 分享 時間: 收藏本文

    go 實現(xiàn)電子合同(生成動態(tài)內(nèi)容word

    go 實現(xiàn)電子合同(生成動態(tài)內(nèi)容word文件并拼接簽名圖片)

    go要實現(xiàn)一個電子合同的功能還是不容易的,go有直接用戶模版替換的標準庫,但是我沒有用它,

    它的特點有,實現(xiàn)文字替換模版非常簡單,但是無法處理替換圖片,同時它只能讀取由編輯器生成的docx文件,word或者wps生成的docx文檔,后面查了一下是由于軟件生成的docx帶有bom頭,所以標準庫讀取失敗。

    三方庫用這個,還有另外一個需要授權(quán)的,就不用了

    ///

    //生成未簽電子合同
    func CreateUnsignContract(params valiate.CreateUnsignContract) (url, obj_key string, err error) {
        data, err := CreateContractTpData(params) //這里就是一個數(shù)據(jù)結(jié)構(gòu)體
        if err != nil {
            log.Fatalf("error opening document: %s", err)
            return
        }
        doc, err := document.Open("e-contract-tp2.docx") // 獲取模板文檔路徑
        if err != nil {
            log.Fatalf("error opening document: %s", err)
            return
        }
        // 獲取全部的段落信息
        paragraphs := []document.Paragraph{}
        paragraphs = append(paragraphs, doc.Paragraphs()...)
        for _, sdt := range doc.StructuredDocumentTags() {
            paragraphs = append(paragraphs, sdt.Paragraphs()...)
        }
        // 循環(huán)段落并進行文字替換,也就是將模版文件里的動態(tài)部分替換成實際傳入的數(shù)據(jù)
        for _, p := range paragraphs {
            for _, r := range p.Runs() {
                str := r.Text()
                if strings.Contains(str, "ShopName") {
                    r.ClearContent() // 清除原有的文字信息和換行符
                    tmp := strings.Replace(str, "ShopName", data.ShopName, 1)
                    r.AddText(tmp)
                }
                if strings.Contains(str, "ShopAddress") {
                    r.ClearContent() // 清除原有的文字信息和換行符
                    tmp := strings.Replace(str, "ShopAddress", data.ShopAddress, 1)
                    r.AddText(tmp)
                }
                if strings.Contains(str, "UserName") {
                    r.ClearContent() // 清除原有的文字信息和換行符
                    tmp := strings.Replace(str, "UserName", data.UserName, 1)
                    r.AddText(tmp)
                }
                if strings.Contains(str, "UserRealNum") {
                    r.ClearContent() // 清除原有的文字信息和換行符
                    tmp := strings.Replace(str, "UserRealNum", data.UserRealNum, 1)
                    r.AddText(tmp)
                }
                if strings.Contains(str, "UserMobile") {
                    r.ClearContent() // 清除原有的文字信息和換行符
                    tmp := strings.Replace(str, "UserMobile", data.UserMobile, 1)
                    r.AddText(tmp)
                }
            }
        }
        // 保存文檔,保存在本地
        filename := fmt.Sprintf("e-contract-unsign-%d.docx", time.Now().UnixMicro())
        err = doc.SaveToFile(filename)
        if err != nil {
            return
        }
           return
    }
    //合成帶簽名的合同
    func MakeSignContract(sign_filename string)  {
        doc, err := document.Open(unsign) //打開未簽名的本地合同文件
        if err != nil {
            log.Fatalf("error opening document: %s", err)
            return
        }
        // 獲取全部的段落信息
        paragraphs := []document.Paragraph{}
        paragraphs = append(paragraphs, doc.Paragraphs()...)
        for _, sdt := range doc.StructuredDocumentTags() {
            paragraphs = append(paragraphs, sdt.Paragraphs()...)
        }
        // // 循環(huán)段落并進行文字替換
        for _, p := range paragraphs {
            for _, r := range p.Runs() {
                str := r.Text()
                if strings.Contains(str, "Sign") {
                    r.ClearContent() // 清除原有的文字信息和換行符
                    tmp := strings.Replace(str, "Sign", "", 1)
                    r.AddText(tmp)
                    r.AddBreak()
                    img, _ := common.ImageFromFile(sign_filename) //前端上傳的簽名文件,是圖片
                    if err != nil {
                        break
                    }
                    img1ref, err := doc.AddImage(img)
                    if err != nil {
                        break
                    }
                    anchored, err := r.AddDrawingAnchored(img1ref)
                    if err != nil {
                        break
                    }
                    anchored.SetSize(2*measurement.Inch, 4*measurement.Inch)
                    anchored.SetXOffset(3 * measurement.Inch)
                    anchored.SetYOffset(3.2 * measurement.Inch)
                    r.AddBreak()
                }
            }
        }
        // 保存簽名后的文檔
        filename := fmt.Sprintf("e-contract-signed-%d.docx", time.Now().UnixMicro())
        err = doc.SaveToFile(filename)
        if err != nil {
            return
        }
        return
    }
    

    最后編輯于 :2023.11.22 16:30:16

    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

    相關(guān)專題 生成替換合同讀取電子
    周易 易經(jīng) 代理招生 二手車 網(wǎng)絡(luò)營銷 旅游攻略 非物質(zhì)文化遺產(chǎn) 查字典 精雕圖 戲曲下載 抖音代運營 易學(xué)網(wǎng) 互聯(lián)網(wǎng)資訊 成語 詩詞 工商注冊 抖音帶貨 云南旅游網(wǎng) 網(wǎng)絡(luò)游戲 代理記賬 短視頻運營 在線題庫 國學(xué)網(wǎng) 抖音運營 雕龍客 雕塑 奇石 散文 常用文書 河北生活網(wǎng) 好書推薦 游戲攻略 心理測試 石家莊人才網(wǎng) 考研真題 漢語知識 心理咨詢 手游安卓版下載 興趣愛好 網(wǎng)絡(luò)知識 十大品牌排行榜 商標交易 單機游戲下載 短視頻代運營 寶寶起名 范文網(wǎng) 電商設(shè)計 免費發(fā)布信息 服裝服飾 律師咨詢 搜救犬 Chat GPT中文版 經(jīng)典范文 優(yōu)質(zhì)范文 工作總結(jié) 二手車估價 實用范文 石家莊點痣 養(yǎng)花 名酒回收 石家莊代理記賬 女士發(fā)型 搜搜作文 鋼琴入門指法教程 詞典 讀后感 玄機派 企業(yè)服務(wù) 法律咨詢 chatGPT國內(nèi)版 chatGPT官網(wǎng) 勵志名言 文玩 語料庫 游戲推薦 男士發(fā)型 高考作文 PS修圖 兒童文學(xué) 工作計劃 舟舟培訓(xùn) IT教程 手機游戲推薦排行榜 暖通,電地暖, 女性健康 苗木供應(yīng) ps素材庫 短視頻培訓(xùn) 優(yōu)秀個人博客 包裝網(wǎng) 創(chuàng)業(yè)賺錢 養(yǎng)生 民間借貸律師 綠色軟件 安卓手機游戲 手機軟件下載 手機游戲下載 單機游戲大全 石家莊論壇 網(wǎng)賺 職業(yè)培訓(xùn) 資格考試 成語大全 英語培訓(xùn) 藝術(shù)培訓(xùn) 少兒培訓(xùn) 苗木網(wǎng) 雕塑網(wǎng) 好玩的手機游戲推薦 漢語詞典 中國機械網(wǎng) 美文欣賞 紅樓夢 道德經(jīng) 標準件 電地暖 鮮花 書包網(wǎng) 英語培訓(xùn)機構(gòu) 電商運營
    亚洲人成电影在线天堂| 中文字幕在亚洲第一在线| 亚洲成AV人片一区二区密柚| 国产成人亚洲精品91专区高清| 亚洲色偷偷色噜噜狠狠99网| 国产成人精品日本亚洲网址| 亚洲一级毛片免费在线观看| 亚洲成a人片在线观看中文!!!| 亚洲特级aaaaaa毛片| 亚洲精品韩国美女在线| 亚洲综合激情六月婷婷在线观看| 亚洲伊人tv综合网色| 亚洲视频一区调教| 久久亚洲中文字幕精品有坂深雪| 亚洲欧洲国产日韩精品| 亚洲一卡2卡三卡4卡有限公司| 国产V亚洲V天堂无码| 久久噜噜噜久久亚洲va久| 亚洲男人天堂av| 亚洲精品无码久久久久久久| 亚洲天堂一区在线| 亚洲成_人网站图片| 亚洲综合av一区二区三区不卡| 亚洲欧美国产欧美色欲| 亚洲AV无码一区二区三区牲色| 国产精品亚洲综合网站| 亚洲一区二区三区在线视频 | 久久综合亚洲色一区二区三区| 在线观看亚洲一区二区| 亚洲免费在线视频观看| 亚洲第一区二区快射影院| 亚洲精品无码国产片| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 亚洲 国产 图片| 国产午夜亚洲精品国产成人小说| 亚洲熟妇丰满多毛XXXX| 久久久久亚洲精品美女| 亚洲成aⅴ人在线观看| 伊人久久亚洲综合影院首页| 久久精品国产亚洲av瑜伽| 国产国拍亚洲精品福利 |