<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 實(shí)現(xiàn)電子合同(生成動(dòng)態(tài)內(nèi)容word

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

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

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

    go要實(shí)現(xiàn)一個(gè)電子合同的功能還是不容易的,go有直接用戶模版替換的標(biāo)準(zhǔn)庫(kù),但是我沒有用它,

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

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

    ///

    //生成未簽電子合同
    func CreateUnsignContract(params valiate.CreateUnsignContract) (url, obj_key string, err error) {
        data, err := CreateContractTpData(params) //這里就是一個(gè)數(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)段落并進(jìn)行文字替換,也就是將模版文件里的動(dòng)態(tài)部分替換成實(shí)際傳入的數(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)段落并進(jì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)容合作請(qǐng)聯(lián)系作者

    相關(guān)專題 生成替換合同讀取電子
    信息流廣告 網(wǎng)絡(luò)推廣 周易 易經(jīng) 代理招生 二手車 網(wǎng)絡(luò)營(yíng)銷 招生代理 旅游攻略 非物質(zhì)文化遺產(chǎn) 查字典 精雕圖 戲曲下載 抖音代運(yùn)營(yíng) 易學(xué)網(wǎng) 互聯(lián)網(wǎng)資訊 成語(yǔ) 成語(yǔ)故事 詩(shī)詞 工商注冊(cè) 注冊(cè)公司 抖音帶貨 云南旅游網(wǎng) 網(wǎng)絡(luò)游戲 代理記賬 短視頻運(yùn)營(yíng) 在線題庫(kù) 國(guó)學(xué)網(wǎng) 知識(shí)產(chǎn)權(quán) 抖音運(yùn)營(yíng) 雕龍客 雕塑 奇石 散文 自學(xué)教程 常用文書 河北生活網(wǎng) 好書推薦 游戲攻略 心理測(cè)試 石家莊人才網(wǎng) 考研真題 漢語(yǔ)知識(shí) 心理咨詢 手游安卓版下載 興趣愛好 網(wǎng)絡(luò)知識(shí) 十大品牌排行榜 商標(biāo)交易 單機(jī)游戲下載 短視頻代運(yùn)營(yíng) 寶寶起名 范文網(wǎng) 電商設(shè)計(jì) 免費(fèi)發(fā)布信息 服裝服飾 律師咨詢 搜救犬 Chat GPT中文版 經(jīng)典范文 優(yōu)質(zhì)范文 工作總結(jié) 二手車估價(jià) 實(shí)用范文 愛采購(gòu)代運(yùn)營(yíng) 古詩(shī)詞 衡水人才網(wǎng) 石家莊點(diǎn)痣 養(yǎng)花 名酒回收 石家莊代理記賬 女士發(fā)型 搜搜作文 石家莊人才網(wǎng) 銅雕 詞典 圍棋 chatGPT 讀后感 玄機(jī)派 企業(yè)服務(wù) 法律咨詢 chatGPT國(guó)內(nèi)版 chatGPT官網(wǎng) 勵(lì)志名言 河北代理記賬公司 文玩 朋友圈文案 語(yǔ)料庫(kù) 游戲推薦 男士發(fā)型 高考作文 PS修圖 兒童文學(xué) 買車咨詢 工作計(jì)劃 禮品廠 舟舟培訓(xùn) IT教程 手機(jī)游戲推薦排行榜 暖通,電地暖, 女性健康 苗木供應(yīng) ps素材庫(kù) 短視頻培訓(xùn) 優(yōu)秀個(gè)人博客 包裝網(wǎng) 創(chuàng)業(yè)賺錢 養(yǎng)生 民間借貸律師 綠色軟件 安卓手機(jī)游戲 手機(jī)軟件下載 手機(jī)游戲下載 單機(jī)游戲大全 免費(fèi)軟件下載 網(wǎng)賺 手游下載 游戲盒子 職業(yè)培訓(xùn) 資格考試 成語(yǔ)大全 英語(yǔ)培訓(xùn) 藝術(shù)培訓(xùn) 少兒培訓(xùn) 苗木網(wǎng) 雕塑網(wǎng) 好玩的手機(jī)游戲推薦 漢語(yǔ)詞典 中國(guó)機(jī)械網(wǎng) 美文欣賞 紅樓夢(mèng) 道德經(jīng) 標(biāo)準(zhǔn)件 網(wǎng)站轉(zhuǎn)讓 鮮花 社區(qū)團(tuán)購(gòu) 石家莊論壇 書包網(wǎng) 電地暖
    亚洲熟女乱综合一区二区| 一本久久综合亚洲鲁鲁五月天 | 亚洲午夜久久久久久久久久| 久久精品国产亚洲av麻豆小说| 国产精品亚洲专区一区| 亚洲第一精品电影网| 在线观看亚洲一区二区| 亚洲精品无码不卡在线播HE| 亚洲精品第一国产综合境外资源| 久久久久久亚洲av无码蜜芽| 欧美亚洲精品一区二区| 亚洲av片在线观看| 日产国产精品亚洲系列| 亚洲裸男gv网站| 亚洲中文字幕第一页在线| 亚洲人成网7777777国产| 亚洲日韩小电影在线观看| 伊人久久大香线蕉亚洲| 中文字幕人成人乱码亚洲电影| 亚洲无av在线中文字幕| 久久精品国产亚洲一区二区| 久久精品夜色国产亚洲av| 亚洲嫩草影院久久精品| 亚洲精品成人网站在线播放| 亚洲精品福利网泷泽萝拉| 亚洲国产精品白丝在线观看| 91丁香亚洲综合社区| 亚洲欧美黑人猛交群| 亚洲av日韩精品久久久久久a| 国产AV无码专区亚洲AV琪琪| 亚洲一本大道无码av天堂| 亚洲中文字幕无码久久2017| 亚洲av永久无码精品表情包| 亚洲成色在线影院| 亚洲欧洲日产国码www| 亚洲午夜久久久精品电影院| 亚洲日本成本人观看| 在线观看亚洲网站| 亚洲无线码一区二区三区| 亚洲AV无码专区电影在线观看| 亚洲男人的天堂在线播放|