pdf.js清晰度提升办法

直接下载了pdfjs-dist依赖来展示pdf

解决方案

1.优先放大scale的参数,一般把1变为2,如果不够可以继续变大,大部分就能解决

这个方法缺点:如果展示pdf的位置不够大,scale越大,pdf中字体越细,锐度提高,如果展示pdf位置足够大,可以完美解决不够清楚的问题

2.在build/pdf.js文件,寻找DEFAULT_RANGE_CHUNK_SIZE配置项,并修改为65536*16

效果不明显,看不太出来

3.对canvas画布进行缩放 ,修改devicePixelRatio这个参数,将它扩大。

效果明显,如果屏幕分辨率100%情况展示正常,但是如果改变屏幕分辨率,会出现渲染不全的问题,一页只渲染出来一部分


    //渲染某一页PDF
    render(pageNum){
      const that = this;
      console.log(pageNum)
      this.pdfDoc.getPage(pageNum).then(function(page) {
        // 创建新的canvas
        const canvas = document.createElement(`canvas`);
        const context = canvas.getContext("2d");
        let devicePixelRatio = window.devicePixelRatio || 1;
        console.log(window.devicePixelRatio)
        let backingStoreRatio =
          context.webkitBackingStorePixelRatio ||
          context.mozBackingStorePixelRatio ||
          context.msBackingStorePixelRatio ||
          context.oBackingStorePixelRatio ||
          context.backingStorePixelRatio ||
          1
        that.pixelRatio = devicePixelRatio / backingStoreRatio;
        // console.log('devicePixelRatio:',devicePixelRatio,',backingStoreRatio:',backingStoreRatio,',pixelRatio:',that.pixelRatio);
        if (that.pixelRatio !== 1) that.transform = [that.pixelRatio, 0, 0, that.pixelRatio, 0, 0]
        var viewport = page.getViewport({ scale: that.scale, });
        canvas.width = viewport.width * that.pixelRatio;
        canvas.height = viewport.height * that.pixelRatio;
        canvas.style.width = viewport.width  + 'px';
        canvas.style.height = viewport.height + 'px';
        var renderContext = {
            canvasContext: context,
            viewport: viewport,
            transform: that.transform,
        };
        console.log(canvas)
        page.render(renderContext);
        
      });
      
    }

提高PDF预览的清晰度_jspdf分辨率_易de的博客-CSDN博客

4.DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT的参数,将它扩大,pdf显示小,不够清晰。有一个重要的原因是默认dpi为96,然后网页一般使用dpi为72。

pc端改变不大

dpi:DPI(Dots Per Inch,每英寸点数)是一个量度单位,用于点阵数码影像,指每一英寸长度中,取样、可显示或输出点的数目。 DPI是打印机、鼠标等设备分辨率的度量单位。是衡量打印机打印精度的主要参数之一,一般来说,DPI值越高,表明打印机的打印精度越高。 DPI是指每英寸的像素,也就是扫描精度。DPI越低,扫描的清晰度越低,由于受网络传输速度的影响,web上使用的图片都是72dpi,但是冲洗照片不能使用这个参数,必须是300dpi或者更高350dpi。例如要冲洗4*6英寸的照片,扫描精度必须是300dpi,那么文件尺寸应该是(4*300)*(6*300)=1200像素*1800像素。

代码调整:

var CSS_UNITS = 96.0/ 72.0;

var renderContext = {
                transform: [CSS_UNITS, 0, 0, CSS_UNITS, 0, 0],
                canvasContext: ctx,
                viewport: viewport
            };

transform:就是和缩放相关的参数
function renderPage(num) {
        // Using promise to fetch the page
        pdfDoc.getPage(num).then(function(page) {
            var viewport = page.getViewport(scale);
            var CSS_UNITS = 96.0 / 72.0;
            canvas.height = Math.floor(viewport.height * CSS_UNITS);
            canvas.width = Math.floor(viewport.width * CSS_UNITS) ;

            // Render PDF page into canvas context
            var renderContext = {
                transform: [CSS_UNITS, 0, 0, CSS_UNITS, 0, 0],
                canvasContext: ctx,
                viewport: viewport
            };
            var renderTask = page.render(renderContext);
        });
    }

pdf.js 入门使用指南2-显示篇_pdfjs getviewport_只看远方的博客-CSDN博客

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
pdf.jspdf.worker.js是两个 JavaScript 文件,用于在网页中呈现 PDF 文件。pdf.js 提供了解析 PDF 文件的主要功能,而pdf.worker.js提供了在解析过程中必要的工作线程。 pdf.js的特点在于,它使得在网页中呈现PDF文件变得非常容易。pdf.js 基于 HTML5 技术和 WebGL,可以在各种现代浏览器中呈现PDF文件。pdf.js还支持许多PDF文件的高级特性,例如交互式表单,内部链接,嵌入式JavaScript等。这使得PDF在网页中的呈现更加具有交互性和可操作性。 pdf.worker.js的作用在于,它提供了解析PDF文件所必须的工作线程。这些工作线程可以在后台执行,并且可以处理PDF文件的各种特性。此外,pdf.worker.js还可以提高PDF文件的打开速度和响应速度,因为它使得对PDF文件的解析变得更加高效。 虽然pdf.jspdf.worker.js提供了许多便利,但是它们仍然有一些局限性。由于它们是基于Web技术开发的,因此在处理大型和复杂的PDF文件时可能会存在性能问题。另外,由于它们是在网页中呈现PDF文件,因此缺乏PDF文件的一些安全性能,例如数字签名和安全访问控制等。 总之,pdf.jspdf.worker.js是非常实用的JavaScript文件,可用于在网页中呈现PDF文件。它们提供了许多高级特性和便利,但仍然存在一些局限性。对于大多数用户来说,使用这两个文件仍然是一个非常好的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值