国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Demo: 實現(xiàn)PDF加水印以及自定義水印樣式

這篇具有很好參考價值的文章主要介紹了Demo: 實現(xiàn)PDF加水印以及自定義水印樣式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實現(xiàn)PDF加水印以及自定義水印樣式

Demo: 實現(xiàn)PDF加水印以及自定義水印樣式,vue,js基礎語法,HTML+CSS+JS,pdf,javascript,前端,vue.js文章來源地址http://www.zghlxwxcb.cn/news/detail-802424.html

<template>
    <div>
        <button @click="previewHandle">預覽</button>
        <button @click="downFileHandle">下載</button>
        <el-input v-model="watermarkText" />
        <el-input v-model.number="watermarkrotate" />
        <iframe id="log_frame" class="log-iframe" frameborder="0" :src="pdfPreviewUrl"></iframe>
    </div>
</template>
  
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { degrees, PDFDocument, rgb, StandardFonts } from "pdf-lib";
import fontkit from '@pdf-lib/fontkit'

const pdfFileEnd = ref('http://111.229.162.189:8003/file/construction/2024_01_08/三高共管對接接口(5)_14ba6d68.pdf')
const pdfPreviewBlob = ref()
const pdfPreviewUrl = ref('/pdf/web/viewer.html?file=http://111.229.162.189:8003/file/construction/2024_01_08/三高共管對接接口(5)_14ba6d68.pdf')

const watermarkText = ref('2024-01-17') // 水印文字
const watermarkrotate = ref(45) // 水印旋轉(zhuǎn)角度

// PDF 下載
const addWatermark = async (rotate) => {
    /*2.獲取pdf文件的arrarybuffer文件流
     可請求后臺接口返回的base64文件流,然后轉(zhuǎn)成arrayBuffer類型
     可訪問前端項目中的本地文件,不能直接訪問服務器鏈接文件,會有跨域問題*/
    try {
        // 1.通過url獲取pdf文件的arrarybuffer文件流
        const existingPdfBytes = await fetch(pdfFileEnd.value).then((res) => res.arrayBuffer());
        // 2.將arraybuffer數(shù)據(jù)轉(zhuǎn)成pdf文檔
        const pdfDoc = await PDFDocument.load(existingPdfBytes);
        // 3.1  內(nèi)置字體(不支持中文), 如果水印中不包含中文可直接用內(nèi)置字體(不支持中文)
        // const fontkitFile = await pdfDoc.embedFont(StandardFonts.Helvetica);
        // 3.2 自定義字體,如不需要使用自定義字體可以將這一段全部注釋掉,也不用下載自定義字體文件和自定義字體工具fontkit
        // 將自己下載好的.ttf文件放置項目中,然后訪問文件路徑(不支持訪問本地文件)
        // const fontBytes = await fetch("@/assets/DS-DIGIT.TTF").then((res) => res.arrayBuffer());
        // pdfDoc.registerFontkit(fontkit); // 自定義字體掛載、fontkit為自定義字體注冊工具
        // const fontkitFile = await pdfDoc.embedFont(fontBytes);
        //  4. 為每頁pdf添加文字水印
        const pages = pdfDoc.getPages();
        for (let i = 0; i < pages.length; i++) {
            const noPage = pages[i];
            const { width, height } = noPage.getSize();
            for (let i = 0; i < 10; i++) {
                for (let j = 0; j < 3; j++) {
                    noPage.drawText(watermarkText.value, {
                        x: 230 * j + 36,
                        y: (height / 4) * i + 20,
                        size: 20,
                        // font: fontkitFile, //字體(內(nèi)置/自定義)
                        color: rgb(0.46, 0.53, 0.6),
                        rotate: degrees(rotate),
                        opacity: 0.3,
                    });
                }
            }
        }
        //5. 保存pdf文件的unit64Arrary文件流
        const pdfBytes = await pdfDoc.save();
        pdfPreviewBlob.value = pdfBytes
        // const blob = new Blob([pdfBytes], { type: 'application/pdf' });
        // const url = window.URL.createObjectURL(blob);
        // pdfPreviewUrl.value = '/pdf/web/viewer.html?file=' + url
        // saveByteArray("水印PDF.pdf", pdfBytes);
    } catch (error) {
        console.log("文件下載失?。?);
    }
}
// 預覽文件
const previewHandle = async () => {
    console.log(typeof(watermarkrotate.value));
    await addWatermark(watermarkrotate.value)
    const blob = new Blob([pdfPreviewBlob.value], { type: 'application/pdf' });
    const url = window.URL.createObjectURL(blob);
    pdfPreviewUrl.value = '/pdf/web/viewer.html?file=' + url
}
// 下載文件
const downFileHandle = () => {
    var blob = new Blob([pdfPreviewBlob.value], { type: "application/pdf" });
    var link = document.createElement("a");
    link.href = window.URL.createObjectURL(blob);
    link.download = '水印pdf';
    link.click();
}

onMounted(() => {
    addWatermark()
})
</script>

<style lang="scss" scoped>
.log-iframe {
    width: 800px;
    height: 520px;
}
</style>

到了這里,關(guān)于Demo: 實現(xiàn)PDF加水印以及自定義水印樣式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關(guān)文章

  • Demo: 給圖片添加自定義水印并下載

    Demo: 給圖片添加自定義水印并下載

    給圖片添加自定義水印并下載

    2024年01月17日
    瀏覽(15)
  • Print.js實現(xiàn)打印pdf,HTML,圖片(可設置樣式可分頁)

    目錄 一.安裝及引入Print.js 二.介紹 三.常用配置 四.具體使用 一.安裝及引入Print.js 1.安裝 2.在需要使用的文件引入 二.介紹 Print.js有四種打印類型:\\\'pdf\\\'、\\\'html\\\'、\\\'image\\\'、\\\'json\\\'。 它的基本用法是調(diào)用printJS()并傳入?yún)?shù) 三.常用配置 Print.js接受一個對象作為參數(shù),在這里你可以配置

    2024年02月06日
    瀏覽(25)
  • 前端vue基于html2canva jspdf 實現(xiàn)前端頁面加水印 并導出頁面PDF

    前端vue基于html2canva jspdf 實現(xiàn)前端頁面加水印 并導出頁面PDF

    隨著技術(shù)的發(fā)展,開發(fā)的復雜度也越來越高,傳統(tǒng)開發(fā)方式將一個系統(tǒng)做成了整塊應用,經(jīng)常出現(xiàn)的情況就是一個小小的改動或者一個小功能的增加可能會引起整體邏輯的修改,造成牽一發(fā)而動全身。通過組件化開發(fā),可以有效實現(xiàn)單獨開發(fā),單獨維護,而且他們之間可以隨

    2024年02月03日
    瀏覽(28)
  • PDF添加水印以及防止被刪除、防止編輯與打印

    PDF添加水印以及防止被刪除、防止編輯與打印

    方法記錄如下: 1、添加水??; 2、打印輸出成一個新的pdf; 3、將pdf頁面輸出成一張張的圖片:(福昕pdf操作步驟如下) 4、將圖片組裝成一個新的pdf:(福昕pdf操作步驟如下) ?5、對新生成的pdf設置權(quán)限: 打開Adobe Acrobat Pro,保護--使用密碼進行保護,設置密碼??舍槍Σ?/p>

    2024年02月15日
    瀏覽(20)
  • 原生小程序如何使用pdf.js實現(xiàn)查看pdf,以及關(guān)鍵詞檢索高亮

    原生小程序如何使用pdf.js實現(xiàn)查看pdf,以及關(guān)鍵詞檢索高亮

    前往 pdf.js 的 官網(wǎng) 下載庫文件,下哪個版本都可以,后者適用于舊版瀏覽器,所以我下載的是后者 下載完成后,因為微信小程序打包的限制,我將庫文件放到項目的后臺系統(tǒng)了,在h5端處理會比在小程序端處理方便,最后就用web-view標簽嵌入到小程序即可; 2.1、目錄結(jié)構(gòu) 2

    2024年02月01日
    瀏覽(16)
  • Vue中使用pdf.js實現(xiàn)在線預覽pdf文件流

    以下是在Vue中使用pdf.js實現(xiàn)在線預覽pdf文件流的步驟: 在需要使用的組件中,使用以下代碼引入pdf.js: 使用pdf.js的 getDocument() 方法加載pdf文件流??梢詫⑽募髯鳛锽lob對象傳遞給該方法。例如,可以使用axios從服務器獲取pdf文件流: 在 loadPdf() 方法中,使用 getDocument() 方法

    2024年02月09日
    瀏覽(96)
  • 微信小程序:自定義多選框樣式,實現(xiàn)多選、全選功能,以及使用css實現(xiàn)選中打鉤效果
  • sheetJs / xlsx-js-style 純前端實現(xiàn)導出 excel 表格及自定義單元格樣式

    sheetJs / xlsx-js-style 純前端實現(xiàn)導出 excel 表格及自定義單元格樣式

    xlsx 地址:https://www.npmjs.com/package/xlsx SheetJs 地址:https://docs.sheetjs.com/docs/ xlsx-js-style 地址:https://www.npmjs.com/package/xlsx-js-style !cols 設置列寬 cols 為一個對象數(shù)組,依次表示每一列的寬度 wpx 字段表示以像素為單位,wch 字段表示以字符為單位 hidden 如果為真,則隱藏該列 !rows 設

    2024年02月06日
    瀏覽(27)
  • Vue中使用qrcode實現(xiàn)渲染二維碼中間添加自定義logo-demo

    Vue中使用qrcode實現(xiàn)渲染二維碼中間添加自定義logo-demo

    我們首先創(chuàng)建一個新的 canvas 元素,用于容納生成的二維碼。然后,使用 QRCode.toCanvas 方法將二維碼生成到新的 canvas 元素中。 接下來,在 logo.onload 事件處理程序中,我們創(chuàng)建一個 Image 對象來加載logo圖像,并在二維碼中間繪制logo。最后,將生成的二維碼轉(zhuǎn)換為數(shù)據(jù)URL,并將

    2024年02月10日
    瀏覽(42)
  • vue2 使用pdf.js 實現(xiàn)pdf預覽,并可復制文本

    vue2 使用pdf.js 實現(xiàn)pdf預覽,并可復制文本

    ? ? ? ? 需求:pdf預覽,并且可以選中pdf的內(nèi)容進行復制。? ? ? ?? ????????在ruoyi的vue前端項目中用到,參考了網(wǎng)上不少文章,因為大部分沒給具體的pdf.js版本,導致運行過程中報各種api 錯誤,經(jīng)過嘗試以下版本可用,故記錄一下: ? ? ? ? 安裝依賴: ? ? ? ? vue 頁面

    2024年01月19日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包