vue2使用pdfjs-dist和jsPDF生成pdf文件

vue2使用pdfjs-dist和jsPDF生成pdf文件

1、安装依赖

powershell 复制代码
npm install pdfjs-dist@2.6.347

2、引入依赖

javascript 复制代码
import { jsPDF } from 'jspdf'
javascript 复制代码
// 使用require方式导入pdfjs-dist v2.5.207,高版本报错(import导入会报错:GlobalWorkerOptions undefined)
this.pdfjsLib = require('pdfjs-dist/build/pdf')
this.pdfjsLib.GlobalWorkerOptions.workerSrc = './pdf.worker.js'// 将pdfjs-dist/build/pdf.worker.js文件复制到public下

3、使用

javascript 复制代码
/**
 * 使用pdfjs-dist将每一页pdf转为图片(canvas->图片数据url)
 * 使用jspdf将图片合并为新的pdf(pdf-lib不支持图片直接转为pdf页面)
 */
const pdfDoc = await this.pdfjsLib.getDocument(pdfBytes).promise
const outputPdf = new jsPDF(true)
let i = 1
for (i = 1; i <= pdfDoc.numPages; i++) {
  const page = await pdfDoc.getPage(i)

  const viewport = page.getViewport({ scale: 1.9 })
  const canvas = document.createElement('canvas')
  const context = canvas.getContext('2d')
  canvas.width = viewport.width
  canvas.height = viewport.height

  // Render PDF page into canvas
  await page.render({ canvasContext: context, viewport }).promise

  // Add canvas as image to PDF
  const imgData = canvas.toDataURL('image/png')
  if (i > 1) {
    outputPdf.addPage()
  }
  outputPdf.addImage(imgData, 'PNG', 0, 0, 210, 297, undefined, 'FAST') // A4 size

  canvas.remove() // Clean up
}

// Save the new PDF
const pdfblob = outputPdf.output('blob')
const url = window.URL.createObjectURL(pdfblob)

// 下载到本地
// 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()

4、注意

1)pdfjs-dist安装低版本,高版本报错

2)如需压缩图片

new jsPDF(true)

outputPdf.addImage(imgData, 'PNG', 0, 0, 210, 297, undefined, 'FAST')

3)如果将多个图像添加到一个文档中,请使用

javascript 复制代码
outputPdf.addImage(imgData, 'PNG', 0, 0, 210, 297, undefined, 'FAST')

而不是

javascript 复制代码
outputPdf.addImage(imgData, 'PNG', 0, 0, 210, 297, '', 'FAST')

否则第一张图片将替换所有其他图片

相关推荐
DevOpenClub7 小时前
网页证据如何长期复核:快照、静态 HTML 与 PDF 归档链路
前端·pdf·html
拆房老料9 小时前
LibreOffice 26.8 发布后,再看 BaseMetas FileView 的 Office 转 PDF 技术路线
pdf·word·开源软件·ppt·格式工厂
开开心心就好10 小时前
手机悬屏翻译工具外语游戏漫画APP全覆盖
android·前端·javascript·python·游戏·pdf·html
redfred11 小时前
Koodo Reader 使用教程:开源电子书阅读器 epub/pdf/mobi/azw3 全格式 多端同步 AI翻译 笔记高亮
人工智能·pdf·开源
Metaphor69211 小时前
如何在 Python 环境中裁剪 PDF 页面
python·pdf
开开心心就好11 小时前
手机精确倒计时工具悬浮窗口秒数实时显示
android·前端·javascript·jupyter·智能手机·pdf·html
jayson.h1 天前
python——pdf编辑
前端·python·pdf
MaiTube&Maipdf1 天前
MaiPDF 在线分享
pdf
Metaphor6921 天前
使用 Python 快速拆分 PDF 文件
python·pdf
MaiTube&Maipdf1 天前
.maipdf 文件 + 系统级拒绝截屏 + 交付后仍可吊销
安全·pdf