日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在一些內部OA或者流轉的文件,或者給一些客戶的報價文件、合同,或者一些醫院出示的給保險機構的病歷資料等,有時候可能都希望快速的使用電子簽章的處理方式來給文件蓋上特定的印章,本篇隨筆介紹基于Vue&Element的前端項目采用第三方組件

vue-drag-resize和圖片轉換Base64的方式實現圖片印章的蓋章處理。

1、圖片轉換為Base64處理

圖片轉換為Base64編碼可以通過在線工具的轉換方式實現圖片轉Base64編碼,網上很多在線的處理,百度一下即可。

如:
https://c.runoob.com/front-end/59/ 或者 https://tool.chinaz.com/tools/imgtobase 試過都可以,非常方便。

如果我們喜歡通過C#代碼進行圖片的轉換也可以使用自己封裝的函數實現處理,如下所示。

電子簽章處理文件和打印基于ABP框架的前端項目Vue&Element

 

Base64 在css中的使用

.demoImg{ background-image: url("data:image/jpg;base64,/9j/4QMZRXhpZgAASUkqAAgAAAAL...."); }

Base64 在html中的使用

<img width="40" height="30" src="data:image/jpg;base64,/9j/4QMZRXhpZgAASUkqAAgAAAAL...." />

我們使用C#代碼轉換的處理代碼如下所示。

        private void btnBase64_Click(object sender, EventArgs e)
        {
            var base64 = ImageHelper.ImageToBase64Str(this.pictureBox1.Image);
            if(chkData.Checked)
            {
                base64 = "data:image/jpeg;base64," + base64;
            }
            this.txtBase64.Text = base64;
        }

而其中調用是通過我們公用類庫中的圖片輔助類進行,詳細轉換代碼如下所示。

        /// <summary>
        /// 從文件中轉換圖片對象到Base64編碼
        /// </summary>
        /// <param name="imageFilePath">圖片文件路徑</param>
        /// <returns></returns>
        public static string ImageToBase64Str(string imageFilePath)
        {
            Image image = Image.FromFile(imageFilePath);
            using (MemoryStream ms = new MemoryStream())
            {
                image.Save(ms, image.RawFormat);//ImageFormat.Jpeg
                byte[] imageBytes = ms.GetBuffer();
                string imgBase64Str = Convert.ToBase64String(imageBytes);

                //釋放資源,讓別的使用
                image.Dispose();
                return imgBase64Str;
            }
        }

        /// <summary>
        /// 轉換圖片對象到Base64編碼
        /// </summary>
        /// <param name="image">Image圖片對象</param>
        /// <returns></returns>
        public static string ImageToBase64Str(Image image)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                image.Save(ms, image.RawFormat);//ImageFormat.Jpeg
                byte[] imageBytes = ms.GetBuffer();
                string imgBase64Str = Convert.ToBase64String(imageBytes);
                return imgBase64Str;
            }
        } 

這樣,我們在前端Vue的項目中,就可以賦值這段圖片Base64代碼到HTML文件中就可以了,如下是前端Vue項目代碼所示(縮減了部分Base64編碼)。

電子簽章處理文件和打印基于ABP框架的前端項目Vue&Element

 

這樣我們就可以在頁面中放置一個Base64編碼的圖片在頁面中了。

電子簽章處理文件和打印基于ABP框架的前端項目Vue&Element

 

2、使用vue-drag-resize組件實現印章圖片的拖動

常規的圖片,放置在頁面中,位置是固定的,如果我們需要拖動印章,那么就需要引入可拖動面板的Vue組件vue-drag-resize來處理它了。

vue-drag-resize是Github上的一個開源組件,地址是:
https://github.com/kirillmurashov/vue-drag-resize

這個組件的使用和其他組件的使用方式一樣,非常方便。

import Vue from 'vue'
import VueDragResize from 'vue-drag-resize'

Vue.component('vue-drag-resize', VueDragResize)

在組件或者頁面中使用的代碼如下所示。

import VueDragResize from 'vue-drag-resize'
export default {
  components: { VueDragResize },

它的HTML代碼如下所示。

<template>
    <div id="App">
        <VueDragResize :isActive="true" :w="200" :h="200" v-on:resizing="resize" v-on:dragging="resize">
            <h3>Hello World!</h3>
            <p>{{ top }} х {{ left }} </p>
            <p>{{ width }} х {{ height }}</p>
        </VueDragResize>
    </div>
</template>

為了把印章圖片可以拖動,我們在HTML中放置印章圖片包含在這個組件面板中。

電子簽章處理文件和打印基于ABP框架的前端項目Vue&Element

 

如下面代碼所示。

電子簽章處理文件和打印基于ABP框架的前端項目Vue&Element

 

把圖片放置在這個組件容器中后,圖片就可以隨意拖動,確認位置后,就可以確定它的位置,我們可以通過記錄圖片的位置X, Y的值并存儲起來,下次直接確定位置也可以。

定義組件的初始X位置。

<vue-drag-resize :x="0">

定義組件的初始Y位置。

<vue-drag-resize :y="0">

例如我們定義了一個報價單,并通過設置,把圖片放置在頁面中,讓使用者可以通過拖動印章的方式,放到合適的位置上去,然后進行打印報價單即可帶有印章的報價單出來了。

電子簽章處理文件和打印基于ABP框架的前端項目Vue&Element

 

這樣就可以實現電子印章的拖動和放置處理了,記住其位置和狀態,下次就可以直接定位到指定的位置上了。

另外,一般文檔都需要打印,關于打印的處理,有很多方式,可以使用print.js(
https://github.com/crabbly/Print.js),也可以使用 vue-print-nb (https://github.com/Power-kxLee/vue-print-nb),甚至復雜的定義可以考慮使用CLODOP組件來處理,不過我們這里可以簡單的內置windows 對象的打印操作方式來處理普通的頁面打印即可。

電子簽章處理文件和打印基于ABP框架的前端項目Vue&Element

 

    print () {
      const print = this.$refs.print.innerHTML
      const printPart = print + csstyle;
      const newTab = window.open('_blank');
      newTab.document.body.innerHTML = printPart;
      newTab.print();
      newTab.close();
    },
電子簽章處理文件和打印基于ABP框架的前端項目Vue&Element

 

打印效果如下所示,采用了對應的CSS樣式處理后,和實際的頁面效果相當。

電子簽章處理文件和打印基于ABP框架的前端項目Vue&Element

 

在項目中,涉及到了html內容打印的需求,調用了瀏覽器的window.print用于打印

顯示不全問題

由于window.print是1:1打印,打印內容過寬時,瀏覽器會自動從左截取掉超寬部分,因此在打印前需將頁面進行調整
打印頁邊距設定為 0mm 時,網頁內最大元素的分辨率:794×1123
因此可以將內容div設置為700px,剩余空間設置為頁邊距

去除瀏覽器默認頁眉頁腳

頁眉打印默認有頁眉頁腳信息,展現到頁面外邊距范圍,我們可以通過去除頁面模型page的外邊距,使得內容不會延伸到頁面的邊緣,再通過設置 body 元素的 margin 來保證 A4 紙打印出來的頁面帶有外邊距

由于window.print打印自帶頁眉頁腳,用于存放打印url,日期時間,頁面名稱等內容,為屏蔽這些內容可使用css進行屏蔽

@media print {
  @page {
    margin: 0;
  }
  body {
    margin: 1cm;
  }
}

只屏蔽頁腳

@page { margin-bottom: 0; }

事件監聽

有兩個事件可以監聽到到打印事件,一個是beforeprint,一個是afterprint,分別表示打印事件觸發前后。
這個事件在 IE6 就已經支持了,兼容大概是 Firefox、IE全支持, Chrome63+支持, Safari暫不支持

我們可在處理事件onbeforeprint() 將一些不需要打印的元素隱藏,和打印后的處理事件 onafterprint()放開隱藏的元素

window.addEventListener('beforeprint', ()=> {
  document.body.innerHTML = '打印前觸發';
});

window.addEventListener('afterprint', ()=> {
  document.body.innerHTML = '打印后觸發';
});

設置打印布局(橫向、縱向、邊距)

 @media print {
    @page {
      // 縱向
      size: portrait; 
 
     // 橫向
      size: landscape;
 
      // 邊距
      margin: 0cm 0cm 0cm 0cm;
    }
  }

 

文章轉自
https://www.cnblogs.com/wuhuacong/p/16033604.html

分享到:
標簽:框架 ABP
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定