bug图

效果图

标题

1 电子签章不显示

1. 1 修改node_modules/pdfjs-dist/build/pdf.worker.js

注释下图选定代码

1.2 修改node_modules/pdfjs-dist/es5/build/pdf.worker.js

注释下图选定代码

2.文字乱码

2.1 修改node_modules/vue-pdf/src/pdfjsWrapper.js

将原来的iframe 改为 div

并设置id 【后面解决空白页问题用到这个id,通过 css 设为 display:none】

3. 每一页多一个空白页

3.1 同上 修改node_modules/vue-pdf/src/pdfjsWrapper.js

修改如下css

完整 pdfjsWrapper.js

import {PDFLinkService} from 'pdfjs-dist/es5/web/pdf_viewer';var pendingOperation = Promise.resolve();export default function (PDFJS) {function isPDFDocumentLoadingTask(obj) {return typeof (obj) === 'object' && obj !== null && obj.__PDFDocumentLoadingTask === true;// or: return obj.constructor.name === 'PDFDocumentLoadingTask';}function createLoadingTask(src, options) {var source;if (typeof (src) === 'string')source = {url: src};else if (src instanceof Uint8Array)source = {data: src};else if (typeof (src) === 'object' && src !== null)source = Object.assign({}, src);elsethrow new TypeError('invalid src type');// source.verbosity = PDFJS.VerbosityLevel.INFOS;// source.pdfBug = true;// source.stopAtErrors = true;if (options && options.withCredentials)source.withCredentials = options.withCredentials;var loadingTask = PDFJS.getDocument(source);loadingTask.__PDFDocumentLoadingTask = true; // since PDFDocumentLoadingTask is not publicif (options && options.onPassword)loadingTask.onPassword = options.onPassword;if (options && options.onProgress)loadingTask.onProgress = options.onProgress;return loadingTask;}function PDFJSWrapper(canvasElt, annotationLayerElt, emitEvent) {var pdfDoc = null;var pdfPage = null;var pdfRender = null;var canceling = false;canvasElt.getContext('2d').save();function clearCanvas() {canvasElt.getContext('2d').clearRect(0, 0, canvasElt.width, canvasElt.height);}function clearAnnotations() {while (annotationLayerElt.firstChild)annotationLayerElt.removeChild(annotationLayerElt.firstChild);}this.destroy = function () {if (pdfDoc === null)return;// Aborts all network requests and destroys worker.pendingOperation = pdfDoc.destroy();pdfDoc = null;}this.getResolutionScale = function () {return canvasElt.offsetWidth / canvasElt.width;}this.printPage = function (dpi, pageNumberOnly) {if (pdfPage === null)return;// 1in == 72pt// 1in == 96pxvar PRINT_RESOLUTION = dpi === undefined ? 150 : dpi;var PRINT_UNITS = PRINT_RESOLUTION / 72.0;var CSS_UNITS = 96.0 / 72.0;var printContainerElement = document.createElement('div');printContainerElement.setAttribute('id', 'print-container')function removePrintContainer() {printContainerElement.parentNode.removeChild(printContainerElement);}new Promise(function (resolve, reject) {printContainerElement.frameBorder = '0';printContainerElement.scrolling = 'no';printContainerElement.width = '0px;'printContainerElement.height = '0px;'printContainerElement.style.cssText = 'position: absolute; top: 0; left: 0';window.document.body.appendChild(printContainerElement);resolve(window);}).then(function (win) {win.document.title = '';return pdfDoc.getPage(1).then(function (page) {var viewport = page.getViewport({scale: 1});win.document.head.appendChild(win.document.createElement('style')).textContent ='@supports ((size:A4) and (size:1pt 1pt)) {' +'.print-canvas { display: none }' +'@media print {' +'* { margin: 0 ;padding: 0}' +'@page { margin: 3mm; size: ' + ((viewport.width * PRINT_UNITS) / CSS_UNITS) + 'pt ' + ((viewport.height * PRINT_UNITS) / CSS_UNITS) + 'pt; }' +'.print-canvas { page-break-before: avoid; page-break-after: always; page-break-inside: avoid; display: block }' +'body > *:not(#print-container) { display: none; }' +'}'return win;})}).then(function (win) {var allPages = [];for (var pageNumber = 1; pageNumber <= pdfDoc.numPages; ++pageNumber) {if (pageNumberOnly !== undefined && pageNumberOnly.indexOf(pageNumber) === -1)continue;allPages.push(pdfDoc.getPage(pageNumber).then(function (page) {var viewport = page.getViewport({scale: 1});var printCanvasElt = printContainerElement.appendChild(win.document.createElement('canvas'));printCanvasElt.setAttribute('class', 'print-canvas')printCanvasElt.width = (viewport.width * PRINT_UNITS);printCanvasElt.height = (viewport.height * PRINT_UNITS);return page.render({canvasContext: printCanvasElt.getContext('2d'),transform: [ // Additional transform, applied just before viewport transform.PRINT_UNITS, 0, 0,PRINT_UNITS, 0, 0],viewport: viewport,intent: 'print'}).promise;}));}Promise.all(allPages).then(function () {win.focus(); // Required for IEif (win.document.queryCommandSupported('print')) {win.document.execCommand('print', false, false);} else {win.print();}removePrintContainer();}).catch(function (err) {removePrintContainer();emitEvent('error', err);})})}this.renderPage = function (rotate) {if (pdfRender !== null) {if (canceling)return;canceling = true;pdfRender.cancel();return;}if (pdfPage === null)return;var pageRotate = (pdfPage.rotate === undefined ? 0 : pdfPage.rotate) + (rotate === undefined ? 0 : rotate);var scale = canvasElt.offsetWidth / pdfPage.getViewport({scale: 1}).width * (window.devicePixelRatio || 1);var viewport = pdfPage.getViewport({scale: scale, rotation: pageRotate});emitEvent('page-size', viewport.width, viewport.height, scale);canvasElt.width = viewport.width;canvasElt.height = viewport.height;pdfRender = pdfPage.render({canvasContext: canvasElt.getContext('2d'),viewport: viewport});annotationLayerElt.style.visibility = 'hidden';clearAnnotations();var viewer = {scrollPageIntoView: function (params) {emitEvent('link-clicked', params.pageNumber)},};var linkService = new PDFLinkService();linkService.setDocument(pdfDoc);linkService.setViewer(viewer);pendingOperation = pendingOperation.then(function () {var getAnnotationsOperation =pdfPage.getAnnotations({intent: 'display'}).then(function (annotations) {PDFJS.AnnotationLayer.render({viewport: viewport.clone({dontFlip: true}),div: annotationLayerElt,annotations: annotations,page: pdfPage,linkService: linkService,renderInteractiveForms: false});});var pdfRenderOperation =pdfRender.promise.then(function () {annotationLayerElt.style.visibility = '';canceling = false;pdfRender = null;}).catch(function (err) {pdfRender = null;if (err instanceof PDFJS.RenderingCancelledException) {canceling = false;this.renderPage(rotate);return;}emitEvent('error', err);}.bind(this))return Promise.all([getAnnotationsOperation, pdfRenderOperation]);}.bind(this));}this.forEachPage = function (pageCallback) {var numPages = pdfDoc.numPages;(function next(pageNum) {pdfDoc.getPage(pageNum).then(pageCallback).then(function () {if (++pageNum <= numPages)next(pageNum);})})(1);}this.loadPage = function (pageNumber, rotate) {pdfPage = null;if (pdfDoc === null)return;pendingOperation = pendingOperation.then(function () {return pdfDoc.getPage(pageNumber);}).then(function (page) {pdfPage = page;this.renderPage(rotate);emitEvent('page-loaded', page.pageNumber);}.bind(this)).catch(function (err) {clearCanvas();clearAnnotations();emitEvent('error', err);});}this.loadDocument = function (src) {pdfDoc = null;pdfPage = null;emitEvent('num-pages', undefined);if (!src) {canvasElt.removeAttribute('width');canvasElt.removeAttribute('height');clearAnnotations();return;}// wait for pending operation endspendingOperation = pendingOperation.then(function () {var loadingTask;if (isPDFDocumentLoadingTask(src)) {if (src.destroyed) {emitEvent('error', new Error('loadingTask has been destroyed'));return}loadingTask = src;} else {loadingTask = createLoadingTask(src, {onPassword: function (updatePassword, reason) {var reasonStr;switch (reason) {case PDFJS.PasswordResponses.NEED_PASSWORD:reasonStr = 'NEED_PASSWORD';break;case PDFJS.PasswordResponses.INCORRECT_PASSWORD:reasonStr = 'INCORRECT_PASSWORD';break;}emitEvent('password', updatePassword, reasonStr);},onProgress: function (status) {var ratio = status.loaded / status.total;emitEvent('progress', Math.min(ratio, 1));}});}return loadingTask.promise;}).then(function (pdf) {pdfDoc = pdf;emitEvent('num-pages', pdf.numPages);emitEvent('loaded');}).catch(function (err) {clearCanvas();clearAnnotations();emitEvent('error', err);})}annotationLayerElt.style.transformOrigin = '0 0';}return {createLoadingTask: createLoadingTask,PDFJSWrapper: PDFJSWrapper,}
}

vue-pdf 打印文字空白、每一页多一个空白页、电子签章不显示相关推荐

  1. android 多个标签页,Android一个标签页的实现

    最近要实现一个类似于下面的页面 想着每次都要自己重新写,太麻烦了,这里记录一下自己写的自定义的view.一开始本来准备用ConstraintLayout的,但是这货addview的时候总有bug,就用 ...

  2. Flutter PDF Android 电子签章不显示问题

    当我们Flutter 加载带电子签章的PDF的时候,会发现Android 页面的签章不会显示,而iOS的可以完美展示出来. 我试了很多PDF的插件都不行. 那目前只剩一个方法,那就是在展示的地方,判断 ...

  3. QT实现PDF打印文字+图片。亲测可用!!!

    //在同一个文件中插入文字和图片,保存在E盘QPrinter printer_text;printer_text.setOutputFormat(QPrinter::PdfFormat);//保存文件 ...

  4. PDF预览电子签章无法显示问题

    1.找到pdf.worker.js 2.找到截图中js并注销即可预览 3.预览效果如下

  5. vue里面使用pdfjs-dist+fabric实现pdf电子签章!!!

    2022.9.6 一.需求 最近领导提了一个新需求:仿照e签宝,实现pdf电子签章! 最终实现效果图 这是做出来的效果图,当然还有很多待修改 二.思路 然后我就去看了下人家e签宝的操作界面,左侧是印章 ...

  6. Java实现PDF打印的解决方案

    1.Java Print Service Java Print Service是Java自带的打印框架,所在的包javax.print.PrintService;. 实现PDF打印的代码流程如下 // ...

  7. vue-pdf 在线预览pdf(pdf地址或base64pdf)解决电子签章显示问题

    使用vue-pdf在线预览pdf 并使得带有电子签章的pdf能够正常预览出来 1.安装vue-pdf ` npm install vue-pdf npm install pdfjs-dist //或者 ...

  8. Vue PDF文件预览打印vue-pdf

    Vue PDF文件预览vue-pdf 最近做项目,遇到预览PDF这个功能,在网上找了找,大多推荐的是pdf.js,不过在Vue中还是想偷懒直接npm组件,最后找到了一个还不错的Vue-pdf 组件,G ...

  9. 安卓实现文本以pdf格式保存,导出时中文出现的空白问题,以及打印pdf文档

    1.实现以pdf格式保存时,需要下载iTextpdf.jar,导入项目中: 下载链接:http://www.pc6.com/softview/SoftView_438379.html 2.在Andro ...

最新文章

  1. 【 FPGA 】FIR滤波器开篇之传统抽头延迟线FIR滤波器实现介绍
  2. 从零开始入门 K8s | 理解 RuntimeClass 与使用多容器运行时
  3. 部署linux的环境,Jenkins安装与配置
  4. 电脑设置 win10 文件夹如何设置黑色描边?文件夹图片如何显示缩略图?
  5. Nginx搭建RTMP服务器+FFmpeg实现海康威视摄像头预览
  6. 亲测有用的音乐推荐网站
  7. MFC 直线 虚线 折线 圆 椭圆 矩形 弧形
  8. 微软ASP.NET AJAX框架剖析
  9. 剑指offer——11.旋转数组的最小数字
  10. 近邻模块︱apple.Turicreate中相似判定Nearest Neighbors(四)
  11. My third homework
  12. 手游图片素材提取_游戏资源提取工具(ExtractData日本游戏看内涵图)V2.5.38.966官方版下载 - 下载吧...
  13. 使用Java写入Excel下拉选择框选项过多不显示问题
  14. iOS 音乐播放器demo讲解
  15. 速算扣除法php,关于速算扣除数法的计税方法 这两点必须知道
  16. Ubuntu 16.04安装中文字体
  17. Opencv在图片上写文字(hello)
  18. excel表的下载模板
  19. Yep MKdocs编辑器
  20. Android 仿QQ 聊天消息拖拽效果

热门文章

  1. vi编辑器基础命令合集与yim初级使用
  2. nyoj 1328 派队方案
  3. 周礼键君:中国福建省建瓯市之《闽郡八音字典》修订版
  4. 工业4.0细谈MES制造执行系统
  5. x264参数设置详解(x264 settings)
  6. 导览讲解 | 二维码语音讲解有什么优势?
  7. deepin 20安装后系统没有声音解决方案(亲测有效)
  8. 网址短连接 short url
  9. 三极管一键开关机电路详解 and二极管/MOS管防反接保护电路
  10. MatrikonOPC与西门子S7300系列PLC以太网通讯