vue预览pdf并添加水印

    <div  id="demo" style="width:100%;margin-top:31px"></div>
FilePDFViewFun() {
        let than = this;
        FilePDFView({ param: this.param }).then(res => {
          this.pdfh5 = new Pdfh5("#demo", {
            data: res.data,
            renderType: "canvas",
          });
          var arr = [];
          this.pdfh5.on("complete", function (status, msg, time) {
            console.log("状态:" + status + ",信息:" + msg + ",耗时:" + time + "毫秒,总页数:" + this.totalNum)
            if (status == 'success') {
              let div = document.getElementsByClassName("pageContainer")
              than.$nextTick(() => {
                for (let i = 0; i < div.length; i++) {
                  arr.push(div[i].getElementsByTagName("img")[0].src)
                  let text = '姓名20230328';
                  let dome1 = div[i]
                  let dom = div[i].getElementsByTagName("img")[0];
                  var rotateAngle = Math.PI / 6;
                  var labels = new Array();
                  labels.push(text);
                  let pageWidth = dom.clientWidth
                  let pageHeight = dom.clientHeight
                  let canvas = document.createElement('canvas');
                  let canvasWidth = canvas.width = pageWidth;
                  let canvasHeight = canvas.height = pageHeight;
                  var context = canvas.getContext('2d');
                  //修改字号
                  context.font = "14px Arial";
                  context.translate(pageWidth / 2, pageHeight / 2 - 250);
                  context.rotate(-rotateAngle);
                  context.translate(-pageWidth / 2 - 5, -pageHeight / 2);
                  let textWidth = Math.max(...labels.map(item => context.measureText(item).width));
                  //设置y轴间距
                  let lineHeight = 15, fontHeight = 12, positionY, i
                  i = 0, positionY = 0
                  while (positionY <= pageHeight) {
                    positionY = positionY + lineHeight * 5
                    i++
                  }
                  canvasWidth += Math.sin(rotateAngle) * (positionY + i * fontHeight) // 给canvas加上画布向左偏移的最大距离
                  canvasHeight = 2 * canvasHeight
                  for (positionY = 0, i = 0; positionY <= canvasHeight; positionY = positionY + lineHeight * 5) {
                    context.translate(-(Math.sin(rotateAngle) * (positionY + i * fontHeight)), 0);
                    //设置x轴左右宽度
                    for (let positionX = 0; positionX < canvasWidth; positionX += 1.5 * textWidth) {
                      let spacing = 0;
                      labels.forEach(item => {
                        context.fillText(item, positionX, positionY + spacing);
                        spacing = spacing + lineHeight;
                      })
                    }
                    context.translate(Math.sin(rotateAngle) * (positionY + i * fontHeight), 0);
                    context.restore();
                    i++
                  }
                  let dataUrl = canvas.toDataURL('image/png');
                  let waterMarkPage = document.createElement('div');
                  waterMarkPage.id = "waterMark"
                  let style = waterMarkPage.style;
                  style.position = 'absolute';
                  style.overflow = "hidden";
                  style.left = 0;
                  style.top = 0;
                  style.opacity = '0.1';
                  style.background = "url(" + dataUrl + ")";
                  style.zIndex = 999;
                  style.pointerEvents = "none";
                  style.width = '100%';
                  style.height = pageHeight + 'px';
                  dome1.appendChild(waterMarkPage);
                }
              })
              than.pages = arr
              than.imgBooklist = true;
            }
          })
        });
      }
  

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 Vue.jsPDF.js 来实现全屏查看 PDF添加水印的功能。 首先,你需要在 Vue.js 中引入 PDF.js,并创建一个 Vue 组件,用于加载和显示 PDF 文件。你可以使用以下代码来实现: ```vue <template> <div ref="pdfViewer"></div> </template> <script> import pdfjs from 'pdfjs-dist' export default { mounted() { const pdfViewer = this.$refs.pdfViewer const pdfUrl = '/path/to/pdf/file.pdf' pdfjs.getDocument(pdfUrl).promise.then(pdf => { const viewer = pdfViewer.getElementsByClassName('pdfViewer')[0] const page = pdf.getPage(1) const viewport = page.getViewport({ scale: 1 }) const canvas = document.createElement('canvas') const ctx = canvas.getContext('2d') const renderContext = { canvasContext: ctx, viewport: viewport } viewer.appendChild(canvas) canvas.width = viewport.width canvas.height = viewport.height page.render(renderContext) }) } } </script> ``` 接下来,你可以使用 `fullscreen API` 来实现全屏查看功能。你可以使用以下代码来实现: ```vue <template> <div ref="pdfViewer" @click="toggleFullScreen"></div> </template> <script> import pdfjs from 'pdfjs-dist' export default { data() { return { isFullScreen: false } }, mounted() { const pdfViewer = this.$refs.pdfViewer const pdfUrl = '/path/to/pdf/file.pdf' pdfjs.getDocument(pdfUrl).promise.then(pdf => { const viewer = pdfViewer.getElementsByClassName('pdfViewer')[0] const page = pdf.getPage(1) const viewport = page.getViewport({ scale: 1 }) const canvas = document.createElement('canvas') const ctx = canvas.getContext('2d') const renderContext = { canvasContext: ctx, viewport: viewport } viewer.appendChild(canvas) canvas.width = viewport.width canvas.height = viewport.height page.render(renderContext) }) }, methods: { toggleFullScreen() { const element = this.$refs.pdfViewer if (!this.isFullScreen) { if (element.requestFullscreen) { element.requestFullscreen() } else if (element.webkitRequestFullscreen) { element.webkitRequestFullscreen() } else if (element.mozRequestFullScreen) { element.mozRequestFullScreen() } else if (element.msRequestFullscreen) { element.msRequestFullscreen() } this.isFullScreen = true } else { if (document.exitFullscreen) { document.exitFullscreen() } else if (document.webkitExitFullscreen) { document.webkitExitFullscreen() } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen() } else if (document.msExitFullscreen) { document.msExitFullscreen() } this.isFullScreen = false } } } } </script> ``` 最后,你可以在 PDF 文件添加水印。你可以使用以下代码来实现: ```vue <template> <div ref="pdfViewer"></div> </template> <script> import pdfjs from 'pdfjs-dist' export default { mounted() { const pdfViewer = this.$refs.pdfViewer const pdfUrl = '/path/to/pdf/file.pdf' pdfjs.getDocument(pdfUrl).promise.then(pdf => { const viewer = pdfViewer.getElementsByClassName('pdfViewer')[0] const page = pdf.getPage(1) const viewport = page.getViewport({ scale: 1 }) const canvas = document.createElement('canvas') const ctx = canvas.getContext('2d') const renderContext = { canvasContext: ctx, viewport: viewport } viewer.appendChild(canvas) canvas.width = viewport.width canvas.height = viewport.height page.render(renderContext).promise.then(() => { ctx.font = '50px Arial' ctx.fillStyle = 'rgba(255, 255, 255, 0.5)' ctx.textAlign = 'center' ctx.fillText('Watermark', canvas.width / 2, canvas.height / 2) }) }) } } </script> ``` 以上就是使用 Vue.jsPDF.js 实现全屏查看 PDF添加水印的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值