最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用vue3-print-nb實(shí)現(xiàn)打印pdf分頁代碼示例

 更新時(shí)間:2024年10月21日 11:44:56   作者:故事與九  
這篇文章主要介紹了使用vue3-print-nb實(shí)現(xiàn)打印pdf分頁的相關(guān)資料,這種方法不僅適用于Vue3項(xiàng)目,也可以在其他前端框架中實(shí)現(xiàn)類似的打印分頁功能,需要的朋友可以參考下

安裝插件

npm install vue3-print-nb --save

vue3 引入

import print from 'vue3-print-nb' // 打印插件
app.use(print)

使用

這里使用的是對(duì)象配置方式

對(duì)象配置方式——在js中定義一個(gè)對(duì)象,對(duì)象中可配置打印區(qū)域相關(guān)屬性,在需要打印的單據(jù)內(nèi)容最外面的div設(shè)置唯一的id,id值為js對(duì)象中的id值,在打印彈框里的打印按鈕設(shè)置自定義屬性v-print,該屬性值為打印區(qū)域的對(duì)象

<a-button type="primary" @click="printing" v-print="printObj">打印</a-button>

const printObj = {
    id: "mypdf", // 這里是要打印元素的ID
    popTitle: "&nbsp", // 打印的標(biāo)題
    extraCss: "", // 打印可引入外部的一個(gè) css 文件
    extraHead: "", // 打印頭部文字
    preview: false, // 是否啟動(dòng)預(yù)覽模式,默認(rèn)是false
    previewTitle: '中銅國際貿(mào)易集團(tuán)有限公司', // 打印預(yù)覽的標(biāo)題
    previewPrintBtnLabel: '預(yù)覽結(jié)束,開始打印', // 打印預(yù)覽的標(biāo)題下方的按鈕文本,點(diǎn)擊可進(jìn)入打印
    zIndex: 10002, // 預(yù)覽窗口的z-index,默認(rèn)是20002,最好比默認(rèn)值更高
    previewBeforeOpenCallback() {
        console.log('正在加載預(yù)覽窗口!')
    },
    previewOpenCallback() { console.log('已經(jīng)加載完預(yù)覽窗口,預(yù)覽打開了!') }, // 預(yù)覽窗口打開時(shí)的callback
    beforeOpenCallback() {
        console.log('開始打印之前!')
    }, // 開始打印之前的callback
    openCallback() {
        console.log('執(zhí)行打印了!')
    }, // 調(diào)用打印時(shí)的callback
    closeCallback() { console.log('關(guān)閉了打印工具!') }, // 關(guān)閉打印的callback(無法區(qū)分確認(rèn)or取消)
    clickMounted() {
        console.log('點(diǎn)擊v-print綁定的按鈕了')
    },
}

分頁分為倆種情況

第一種:打印單據(jù)有2個(gè)以上,打印時(shí)需要自動(dòng)分頁打印,且每一頁內(nèi)容不超出一頁(固定的數(shù)據(jù))

單據(jù)內(nèi)容的最外層的div設(shè)置樣式page-break-before:always,即可在打印時(shí)自動(dòng)分頁

@media print {
    .section {
        page-break-before: always;
        /* 在每個(gè)部分之前始終開始新頁面 */
        // margin: 20px 0; /* 為了使打印頁面更清晰,可以添加一些上下間距 */
        margin-top: 0;
    }
}

第二種:打印單據(jù)有2個(gè)以上,打印時(shí)需要自動(dòng)分頁打印,內(nèi)容連續(xù)且不固定,

如圖所示打印 一行被截?cái)?不滿足需求

自動(dòng)分頁 : 有兩個(gè)高度需要區(qū)分,一個(gè)是html頁面的實(shí)際高度,和生成pdf的頁面高度,

當(dāng)內(nèi)容未超過pdf一頁顯示的范圍,無需分頁

通過class="paging"的容器進(jìn)行分割,考慮到每張A4紙高度固定,所以通過判斷每個(gè)class為paging的容器高度累加,大于紙張高度時(shí),就給上一個(gè)class為paging的容器加上style=“page-break-pageBreakBefore:always”

// 動(dòng)態(tài)計(jì)算 分頁
const PAGE_HEIGHT = 1100 // A4紙高度
const printing = () => {
    const splitDoms = document.getElementsByClassName('paging')
    console.log(splitDoms)
    let startY = 0 // 占用A4紙的高度,從每頁第一個(gè)poetry div的top值開始累加
    for (let i = 0; i < splitDoms.length; i++) {
        const splitDom = splitDoms[i]
        const splitValue = splitDom.getBoundingClientRect()
        console.log(splitDom.getBoundingClientRect())
        if (startY === 0) {
            startY = splitValue.top
        }
        const pageHeight = splitValue.bottom - startY
        // 當(dāng)加上當(dāng)前div的高度大于A4紙高度時(shí),給前一個(gè)div加上分頁標(biāo)識(shí)
        if (pageHeight > PAGE_HEIGHT) {
            console.log(i)
            startY = 0
            if (i > 0) {
                splitDoms[i - 1].style.pageBreakBefore = 'always'; // 給前一個(gè)元素添加分頁符
            }
        }
    }
}

動(dòng)態(tài)計(jì)算后的分頁展示

打印功能完整代碼(安裝好包,導(dǎo)入包后,可直接復(fù)制粘貼使用)

<template>
    <div>
        <a-button type="primary" style="margin-right: 10px;" @click="printing" v-print="printObj">打印</a-button>
        <!-- <a-button type="primary" style="margin-right: 10px;" @click="downPdf">下載PDF</a-button> -->
    </div>

    <div style="overflow-y: auto;padding: 20px;">
        <div class="main" id="mypdf">
            <div class="title fd">客商評(píng)價(jià)明細(xì)表</div>
            <div class="fd">
                供應(yīng)商名稱: <span>xxxxxxxxxxxxxxxxxxx</span> 編號(hào):xxxxxxxxxxxxxxxxx
            </div>
            <table border="1" class="techniques" style="margin-top: 1px;width: 100%;">
                <tr>
                    <td style="width: 130px;text-align: center;">擬開展業(yè)務(wù)</td>
                    <td colspan="3">xxxxxxxxxxxxxxxxxxxxxx</td>
                    <td class="tec" :colspan="5">評(píng)價(jià)明細(xì)情況</td>
                </tr>
                <tr>
                    <!-- <td style="width: 130px;text-align: center;">因素</td> -->
                    <td style="width: 130px;text-align: center;">主要指標(biāo)</td>
                    <td style="width: 100px;text-align: center;">指標(biāo)類型</td>
                    <td style="width: 150px;">評(píng)分標(biāo)準(zhǔn)</td>
                    <td style="width: 100px" class="tec">標(biāo)準(zhǔn)分?jǐn)?shù)</td>
                    <td v-for="item in 5" class="tec">姓名{{ item }}</td>
                </tr>

                <tbody v-for="item in baseList" class="paging" style="height: 1px;">
                    <tr>
                        <!-- <td style="width: 130px;text-align: center;">{{ item.factor }}</td> -->
                        <td style="width: 130px;text-align: center;">{{ item.factor }}</td>
                        <td style="width: 100px;text-align: center;">否決項(xiàng)</td>
                        <td>{{ item.scoringcriteria }}</td>
                        <td style="width: 100px;text-align: center;">
                            <div style="display: flex;">
                                <div style="display: flex; align-items: center;">
                                    <div class="tag">
                                        <!-- <check-outlined class="tagIcon" /> -->
                                    </div>
                                    <div>是</div>
                                </div>
                                <div style="display: flex; align-items: center;">
                                    <div class="tag">
                                        <!-- <check-outlined class="tagIcon" /> -->
                                    </div>
                                    <div>否</div>
                                </div>
                            </div>
                        </td>
                        <td v-for="item in item.peo" class="tec">{{ item }}</td>
                    </tr>
                </tbody>

                <tbody v-for="item in orditemLsit" :key="item.id" class="paging">
                    <tr v-for="(val, index) in item.scoringcriteria" :key="val.id">
                        <td style="width: 130px;text-align: center;" v-if="index === 0"
                            :rowspan="item.scoringcriteria.length">
                            {{ item.factor }}
                        </td>
                        <td style="width: 100px;text-align: center;" v-if="index === 0"
                            :rowspan="item.scoringcriteria.length">
                            5
                        </td>
                        <td style="width: 130px;">{{ val.title }}</td>
                        <td style="width: 100px;" class="tec">{{ val.score }}</td>
                        <template v-for="items in 5">
                            <td class="tec" v-if="index === 0" :rowspan="item.scoringcriteria.length">{{ items }}</td>
                        </template>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>
</template>

<script setup>

let baseList = [
    {
        factor: '公司及董監(jiān)高失信',
        mainindex: '公司及董監(jiān)高是否被列為失信執(zhí)行人員',
        score: '否決項(xiàng)',
        scoringcriteria: '公司及董監(jiān)高被列為失信執(zhí)行人員',
        standardScore: '',
        peo: 5
    },
    {
        factor: '成立年限',
        mainindex: '成立年限',
        score: '否決項(xiàng)',
        scoringcriteria: '公司成立年限小于3年',
        standardScore: '',
        peo: 5
    },
    {
        factor: '信用評(píng)價(jià)',
        mainindex: '第三方征信系統(tǒng)的評(píng)級(jí)',
        score: '否決項(xiàng)',
        scoringcriteria: '償債能力預(yù)警(對(duì)應(yīng)征信報(bào)告的第4級(jí)),如無第三方征信報(bào)告,則可從客商資產(chǎn)質(zhì)量、資產(chǎn)負(fù)債率、營運(yùn)管理、競(jìng)爭(zhēng)力情況等方面進(jìn)行綜合評(píng)價(jià),如資產(chǎn)質(zhì)量較差,償債能力較差,或存在大量訴訟案件或最近2年有重大行政處罰記錄,需警惕',
        standardScore: '',
        peo: 5
    },
    {
        factor: '凈資產(chǎn)',
        mainindex: '最新年度或半年度凈資產(chǎn)',
        score: '否決項(xiàng)',
        scoringcriteria: '最新年度或半年度凈資產(chǎn)總額小于500萬元',
        standardScore: '',
        peo: 5
    },
    {
        factor: '業(yè)務(wù)范圍',
        mainindex: '業(yè)務(wù)范圍',
        score: '否決項(xiàng)',
        scoringcriteria: '有與公司同類自營貿(mào)易業(yè)務(wù)的民營企業(yè)',
        standardScore: '',
        peo: 5
    },
    {
        factor: '經(jīng)營性現(xiàn)金凈流量',
        mainindex: '經(jīng)營性現(xiàn)金凈流量',
        score: '否決項(xiàng)',
        scoringcriteria: '連續(xù)三年經(jīng)營性現(xiàn)金凈流量為負(fù)',
        standardScore: '',
        peo: 5
    },
    {
        factor: '所有者權(quán)益與實(shí)收資本關(guān)系',
        mainindex: '所有者權(quán)益與實(shí)收資本關(guān)系',
        score: '否決項(xiàng)',
        scoringcriteria: '所有者權(quán)益總額連續(xù)三年小于實(shí)收資本金額',
        standardScore: '',
        peo: 5
    },
    {
        factor: '境內(nèi)供應(yīng)商未提供最近三年審計(jì)報(bào)告',
        mainindex: '境內(nèi)供應(yīng)商未提供最近三年審計(jì)報(bào)告',
        score: '否決項(xiàng)',
        scoringcriteria: '境內(nèi)供應(yīng)商未提供最近三年審計(jì)報(bào)告',
        standardScore: '',
        peo: 5
    },
]


let orditemLsit = [
    {
        factor: '成立年限',
        score: '5',
        scoringcriteria: [
            {
                title: '成立年限5年(含)以上',
                score: '5'
            },
            {
                title: '成立年限3年(含)至5年',
                score: '3'
            },
            {
                title: '成立年限3年(不含)以下',
                score: '1'
            },
        ],
        standardScore: '',
        peo: 5
    },
    {
        factor: '實(shí)繳注冊(cè)資本金',
        score: '5',
        scoringcriteria: [
            {
                title: '8000萬元(含) 以上    ',
                score: '5'
            },
            {
                title: '4000萬元(含) 至8000萬元 ',
                score: '4'
            },
            {
                title: '1000萬元(含) 至4000萬元      ',
                score: '3'
            },
            {
                title: '1000萬元(不含)以下至4000萬元      ',
                score: '1'
            },
        ],
        standardScore: '',
        peo: 5
    },
    {
        factor: '企業(yè)性質(zhì)',
        score: '5',
        scoringcriteria: [
            {
                title: '國有A股上市,央企三級(jí)以上公司    以上    ',
                score: '5'
            },
            {
                title: '上市公司,省屬大型國企',
                score: '4'
            },
            {
                title: '國有非上市',
                score: '3'
            },
            {
                title: '其它(非國企、非上市)',
                score: '1'
            },
        ],
        standardScore: '',
        peo: 5
    },
    {
        factor: '企業(yè)性質(zhì)',
        score: '5',
        scoringcriteria: [
            {
                title: '國有A股上市,央企三級(jí)以上公司    以上    ',
                score: '5'
            },
            {
                title: '上市公司,省屬大型國企',
                score: '4'
            },
            {
                title: '國有非上市',
                score: '3'
            },
            {
                title: '其它(非國企、非上市)',
                score: '1'
            },
        ],
        standardScore: '',
        peo: 5
    },
    {
        factor: '企業(yè)性質(zhì)',
        score: '5',
        scoringcriteria: [
            {
                title: '國有A股上市,央企三級(jí)以上公司    以上    ',
                score: '5'
            },
            {
                title: '上市公司,省屬大型國企',
                score: '4'
            },
            {
                title: '國有非上市',
                score: '3'
            },
            {
                title: '其它(非國企、非上市)',
                score: '1'
            },
        ],
        standardScore: '',
        peo: 5
    },
]


const printObj = {
    id: "mypdf", // 這里是要打印元素的ID
    popTitle: "&nbsp", // 打印的標(biāo)題
    extraCss: "", // 打印可引入外部的一個(gè) css 文件
    extraHead: "", // 打印頭部文字
    preview: false, // 是否啟動(dòng)預(yù)覽模式,默認(rèn)是false
    previewTitle: '中銅國際貿(mào)易集團(tuán)有限公司', // 打印預(yù)覽的標(biāo)題
    previewPrintBtnLabel: '預(yù)覽結(jié)束,開始打印', // 打印預(yù)覽的標(biāo)題下方的按鈕文本,點(diǎn)擊可進(jìn)入打印
    zIndex: 10002, // 預(yù)覽窗口的z-index,默認(rèn)是20002,最好比默認(rèn)值更高
    previewBeforeOpenCallback() {
        console.log('正在加載預(yù)覽窗口!')
    },
    previewOpenCallback() { console.log('已經(jīng)加載完預(yù)覽窗口,預(yù)覽打開了!') }, // 預(yù)覽窗口打開時(shí)的callback
    beforeOpenCallback() {
        console.log('開始打印之前!')
    }, // 開始打印之前的callback
    openCallback() {
        console.log('執(zhí)行打印了!')
    }, // 調(diào)用打印時(shí)的callback
    closeCallback() { console.log('關(guān)閉了打印工具!') }, // 關(guān)閉打印的callback(無法區(qū)分確認(rèn)or取消)
    clickMounted() {
        console.log('點(diǎn)擊v-print綁定的按鈕了')
    },
}

const PAGE_HEIGHT = 1100 // A4紙高度
const printing = () => {
    const splitDoms = document.getElementsByClassName('paging')
    console.log(splitDoms)
    let startY = 0 // 占用A4紙的高度,從每頁第一個(gè)poetry div的top值開始累加
    for (let i = 0; i < splitDoms.length; i++) {
        const splitDom = splitDoms[i]
        const splitValue = splitDom.getBoundingClientRect()
        console.log(splitDom.getBoundingClientRect())
        if (startY === 0) {
            startY = splitValue.top
        }
        const pageHeight = splitValue.bottom - startY
        // 當(dāng)加上當(dāng)前div的高度大于A4紙高度時(shí),給前一個(gè)div加上分頁標(biāo)識(shí)
        if (pageHeight > PAGE_HEIGHT) {
            console.log(i)
            startY = 0
            if (i > 0) {
                splitDoms[i - 1].style.pageBreakBefore = 'always'; // 給前一個(gè)元素添加分頁符
            }
        }
    }
}

</script>

<style lang="scss" scoped>
.main {
    width: 900px;
    margin: 0 auto;
}

.title {
    font-size: 19px;
    margin-bottom: 10px;
    line-height: 33px;
    text-align: center;
}

.techniques {
    width: 100%;
    border-color: #000;
    font-family: "宋體", "SimSun", sans-serif;
}

.techniques,
.techniques th,
.techniques td {
    border-collapse: collapse;
    line-height: 22px;
    font-size: 13px
}



.fd {
    font-weight: bold;
}

.tec {
    text-align: center;
}

.tag {
    width: 14px;
    height: 14px;
    border-radius: 2px;
    text-align: center;
    color: #fff;
    border: 1px solid #333;
    font-weight: 700;
    // margin-left: 10px;
    // margin-right: -10px;
    margin: 0 5px;
    position: relative;

    .tagIcon {
        position: absolute;
        font-size: 12px;
        top: 1px;
        left: -20px;
        z-index: 111;
        color: #000;
    }
}

@page {
    size: auto A4 landscape;
    margin-top: 20mm;
}

@media print {
    .section {
        page-break-before: always;
        /* 在每個(gè)部分之前始終開始新頁面 */
        // margin: 20px 0; /* 為了使打印頁面更清晰,可以添加一些上下間距 */
        margin-top: 0;
    }
}
</style>

總結(jié) 

到此這篇關(guān)于使用vue3-print-nb實(shí)現(xiàn)打印pdf分頁的文章就介紹到這了,更多相關(guān)vue3-print-nb打印pdf分頁內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文詳解Vue中nextTick的原理與作用

    一文詳解Vue中nextTick的原理與作用

    Vue的nextTick方法是用于在DOM更新后執(zhí)行回調(diào)的工具函數(shù),它的作用是在當(dāng)前JavaScript執(zhí)行環(huán)境中延遲執(zhí)行回調(diào),以確保在下次DOM更新循環(huán)之前,可以訪問到更新后的DOM,本文就給大家介紹一下Vue nextTick原理與作用,需要的朋友可以參考下
    2023-08-08
  • vue echarts實(shí)現(xiàn)橫向柱狀圖

    vue echarts實(shí)現(xiàn)橫向柱狀圖

    這篇文章主要為大家詳細(xì)介紹了vue echarts實(shí)現(xiàn)橫向柱狀圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Vue2.0使用嵌套路由實(shí)現(xiàn)頁面內(nèi)容切換/公用一級(jí)菜單控制頁面內(nèi)容切換(推薦)

    Vue2.0使用嵌套路由實(shí)現(xiàn)頁面內(nèi)容切換/公用一級(jí)菜單控制頁面內(nèi)容切換(推薦)

    這篇文章主要介紹了Vue2.0使用嵌套路由實(shí)現(xiàn)頁面內(nèi)容切換/公用一級(jí)菜單控制頁面內(nèi)容切換,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • Nuxt.js結(jié)合Serverless構(gòu)建無服務(wù)器應(yīng)用

    Nuxt.js結(jié)合Serverless構(gòu)建無服務(wù)器應(yīng)用

    Nuxt.js是一個(gè)基于Vue.js的框架,結(jié)合Serverless架構(gòu),Nuxt.js可以讓你構(gòu)建高度可擴(kuò)展、成本效益高的無服務(wù)器應(yīng)用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • vue+iview?Table表格多選切換分頁保持勾選狀態(tài)

    vue+iview?Table表格多選切換分頁保持勾選狀態(tài)

    這篇文章主要為大家詳細(xì)介紹了vue+iview?Table表格多選切換分頁保持勾選狀態(tài),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • vuejs 制作背景淡入淡出切換動(dòng)畫的實(shí)例

    vuejs 制作背景淡入淡出切換動(dòng)畫的實(shí)例

    今天小編就為大家分享一篇vuejs 制作背景淡入淡出切換動(dòng)畫的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 詳解vue-cli3多頁應(yīng)用改造

    詳解vue-cli3多頁應(yīng)用改造

    這篇文章主要介紹了詳解vue-cli3多頁應(yīng)用改造,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • vue從倉庫state中取不到數(shù)據(jù)的問題

    vue從倉庫state中取不到數(shù)據(jù)的問題

    這篇文章主要介紹了vue從倉庫state中取不到數(shù)據(jù)的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue如何使用文件流進(jìn)行下載(new Blob)

    vue如何使用文件流進(jìn)行下載(new Blob)

    這篇文章主要介紹了vue如何使用文件流進(jìn)行下載(new Blob),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 使用ElementUI el-upload實(shí)現(xiàn)一次性上傳多個(gè)文件

    使用ElementUI el-upload實(shí)現(xiàn)一次性上傳多個(gè)文件

    在日常的前端開發(fā)中,文件上傳是一個(gè)非常常見的需求,尤其是在用戶需要一次性上傳多個(gè)文件的場(chǎng)景下,ElementUI作為一款非常優(yōu)秀的Vue.js 2.0組件庫,為我們提供了豐富的UI組件,本文介紹了如何使用ElementUI el-upload實(shí)現(xiàn)一次性上傳多個(gè)文件,需要的朋友可以參考下
    2024-08-08

最新評(píng)論

灵川县| 呼伦贝尔市| 中宁县| 左贡县| 肇源县| 嘉定区| 蛟河市| 青冈县| 鸡西市| 东乌珠穆沁旗| 隆回县| 屏东市| 太和县| 铜陵市| 扎鲁特旗| 宁安市| 崇文区| 惠水县| 松滋市| 勐海县| 霞浦县| 土默特左旗| 铅山县| 黑山县| 温泉县| 合川市| 广德县| 车致| 缙云县| 门头沟区| 理塘县| 长宁区| 海口市| 上蔡县| 青岛市| 洪雅县| 霍州市| 湖南省| 阳信县| 灵璧县| 易门县|