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

使用pdf-lib.js實(shí)現(xiàn)拼接兩個pdf文件并添加水印

 更新時間:2024年11月17日 11:21:58   作者:米芝芝  
這篇文章主要為大家詳細(xì)介紹了如何使用pdf-lib.js實(shí)現(xiàn)拼接兩個pdf文件并添加水印,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

安裝依賴

npm install --save pdf-lib

代碼中導(dǎo)入及使用

import { PDFDocument, StandardFonts, rgb } from 'pdf-lib'
// 拼接已上傳的封面pdf 和 pdfmake制作的pdf
const mergedPdf = await PDFDocument.create()
// 封面測試.pdf文件在public文件夾下,也可以使用url
const bytes1 = await this.readFileAsync('封面測試.pdf')
const pdf1 = await PDFDocument.load(bytes1)

// Add a font to the doc
const helveticaFont = await pdf1.embedFont(StandardFonts.Helvetica)

const pdfDocGenerator = await pdfMake.createPdf(docDefinition)

// 獲取pdfmake制作的pdf的arraybuffer
await pdfDocGenerator.getBuffer(async buffer => {
  const pdf2 = await PDFDocument.load(buffer)

  const copiedPagesA = await mergedPdf.copyPages(pdf1, pdf1.getPageIndices())
  copiedPagesA.forEach((page) => {
    // 封面添加名稱信息
    page.drawText('Cover Name: 111', {
      x: page.getWidth() / 2 - (helveticaFont.widthOfTextAtSize('Cover Name: 111', 32) / 2),// 使文字居中
      y: 580,
      size: 32,
      font: helveticaFont,
      color: rgb(0, 0.53, 0.71)
    })
    mergedPdf.addPage(page)
  })
  const copiedPagesB = await mergedPdf.copyPages(pdf2, pdf2.getPageIndices())
  copiedPagesB.forEach((page) => mergedPdf.addPage(page))

  const mergedPdfFile = await mergedPdf.save()
  
  // 下載到本地
  const url = window.URL.createObjectURL(new Blob([mergedPdfFile.buffer]))
  const link = document.createElement('a')
  link.href = url
  link.setAttribute('download', 'test.pdf')
  document.body.appendChild(link)
  link.click()
})
// 獲取文件arraybuffer
readFileAsync(file_url) {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest()
    xhr.open('get', file_url, true)
    xhr.responseType = 'blob'
    xhr.onload = function() {
      if (this.status === 200) {
        const reader = new FileReader()
        reader.onload = () => {
          resolve(reader.result)
        }
        reader.onerror = reject
        reader.readAsArrayBuffer(this.response)
      }
    }
    xhr.send()
  })
},

每一頁加水印

修改上面的代碼

// const mergedPdfFile = await mergedPdf.save()

// 加水印、下載
this.addCanvasWatermark(mergedPdf, '水印water', filename)
// 下載到本地
// const url = window.URL.createObjectURL(new Blob([mergedPdfFile.buffer]))
// const link = document.createElement('a')
// link.href = url
// link.setAttribute('download', filename + '.pdf')
// document.body.appendChild(link)
// link.click()
// 添加  水印
async addCanvasWatermark(pdfDoc, text, filename) {
  // 加載自定義字體,這里用的是pdfmake中自定義的字體
  const fonturl = require('pdfmake/examples/fonts/FZYTK.ttf')
  const fontBytes = await fetch(fonturl).then((res) => res.arrayBuffer())

  // 自定義字體掛載
  pdfDoc.registerFontkit(fontkit)
  const customFont = await pdfDoc.embedFont(fontBytes)

  // 為每頁pdf添加文字水印
  const pages = pdfDoc.getPages()
  // 文字渲染配置
  const drawTextParams = {
    lineHeight: 50,
    font: customFont, // 這里使用的是自定義字體
    size: 12,
    color: rgb(0.46, 0.53, 0.6), // rgb(0.08, 0.08, 0.2),
    rotate: degrees(15),
    opacity: 0.2
  }
  for (let i = 0; i < pages.length; i++) {
    const page = pages[i]

    // 獲取當(dāng)前頁寬高
    const { width, height } = page.getSize()

    // 要渲染的文字內(nèi)容
    // const text = 'water 121314'

    for (let ix = 1; ix < width; ix += 230) { // 水印橫向間隔
      let lineNum = 0
      for (let iy = 50; iy <= height; iy += 110) { // 水印縱向間隔
        lineNum++

        page.drawText(text, {
          x: lineNum & 1 ? ix : ix + 70,
          y: iy,
          ...drawTextParams
        })
      }
    }
  }
  
  // 序列化為字節(jié),并下載到本地
  const pdfBytes = await pdfDoc.save()
  this.download(pdfBytes, filename)
},
// 下載到本地
download(mergedPdfFile, filename) {
  const url = window.URL.createObjectURL(new Blob([mergedPdfFile.buffer]))
  const link = document.createElement('a')
  link.href = url
  link.setAttribute('download', filename + '.pdf')
  document.body.appendChild(link)
  link.click()
}

到此這篇關(guān)于使用pdf-lib.js實(shí)現(xiàn)拼接兩個pdf文件并添加水印的文章就介紹到這了,更多相關(guān)pdf-lib拼接文件并添加水印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • XML文件轉(zhuǎn)化成NSData對象的方法

    XML文件轉(zhuǎn)化成NSData對象的方法

    這篇文章主要介紹了XML文件轉(zhuǎn)化成NSData對象的方法,需要的朋友可以參考下
    2015-08-08
  • layui給下拉框、按鈕狀態(tài)、時間賦初始值的方法

    layui給下拉框、按鈕狀態(tài)、時間賦初始值的方法

    今天小編就為大家分享一篇layui給下拉框、按鈕狀態(tài)、時間賦初始值的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 關(guān)于uniapp中onReachBottomDistance屬性的使用

    關(guān)于uniapp中onReachBottomDistance屬性的使用

    這篇文章主要介紹了關(guān)于uniapp中onReachBottomDistance屬性的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • js中console在一行內(nèi)打印字符串和對象的方法

    js中console在一行內(nèi)打印字符串和對象的方法

    這篇文章主要介紹了js中console在一行內(nèi)打印字符串和對象的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • 詳解javascript中的Error對象

    詳解javascript中的Error對象

    error是指程序中的非正常運(yùn)行狀態(tài),在其他編程語言中稱為“異?!被颉板e誤”,解釋器會為每個錯誤情形創(chuàng)建并拋出一個Error對象,其中包含錯誤的描述信息,這篇文章主要介紹了javascript中的Error對象,需要的朋友可以參考下
    2019-04-04
  • HTML中setCapture、releaseCapture 使用方法淺析

    HTML中setCapture、releaseCapture 使用方法淺析

    本文給大家簡單介紹了下html中的高級拖動技術(shù)setCapture、releaseCapture的使用方法,有需要的小伙伴可以參考下
    2016-09-09
  • 讓網(wǎng)站自動生成章節(jié)目錄索引的多個js代碼

    讓網(wǎng)站自動生成章節(jié)目錄索引的多個js代碼

    這篇文章主要介紹了讓博客園博客自動生成章節(jié)目錄索引的多個js代碼,需要的朋友可以參考下
    2018-01-01
  • 如何使JavaScript休眠或等待

    如何使JavaScript休眠或等待

    在本文中,我將解釋如何使用 setTimeout(),包括如何使用它來制作一個睡眠函數(shù),使JavaScript暫停執(zhí)行并在連續(xù)的代碼行之間等待。
    2021-04-04
  • Nginx上傳文件全部緩存解決方案

    Nginx上傳文件全部緩存解決方案

    Nginx默認(rèn)會對上傳的文件先在本地進(jìn)行緩存,再轉(zhuǎn)發(fā)到應(yīng)用服務(wù)器。請問怎么禁止掉這個緩存,讓Nginx只轉(zhuǎn)發(fā)而不緩存文件?本文給大家詳細(xì)介紹Nginx上傳文件全部緩存解決方案,有需要的朋友來參考下
    2015-08-08
  • JS實(shí)現(xiàn)新浪博客左側(cè)的Blog管理菜單效果代碼

    JS實(shí)現(xiàn)新浪博客左側(cè)的Blog管理菜單效果代碼

    這篇文章主要介紹了JS實(shí)現(xiàn)新浪博客左側(cè)的Blog管理菜單效果代碼,可實(shí)現(xiàn)基于鼠標(biāo)點(diǎn)擊事件動態(tài)操作頁面元素樣式的功能,界面美觀大方,簡潔實(shí)用,需要的朋友可以參考下
    2015-10-10

最新評論

茂名市| 仁化县| 贵德县| 双桥区| 曲靖市| 墨竹工卡县| 丰顺县| 壤塘县| 江陵县| 牡丹江市| 青海省| 阆中市| 东山县| 探索| 玛沁县| 汝城县| 榆社县| 贡觉县| 苏州市| 遵义市| 抚顺县| 宁明县| 营口市| 双流县| 静海县| 沾化县| 琼结县| 二连浩特市| 碌曲县| 辽宁省| 兴国县| 会泽县| 黄大仙区| 东台市| 沂南县| 丽江市| 新宾| 浑源县| 灌南县| 庆元县| 辉县市|