pdfjs-dist实现pdf预览偶现空白不报错问题解决

const calculateFitScale = (pageWidth, pageHeight) => {
  const canvas = canvasRef.value;
  if (!canvas) return 1;

  const container = document.getElementById("pdf-container");
  if (!container) return 1;

  const containerWidth = container.clientWidth;
  const containerHeight = container.clientHeight;

  if (containerWidth === 0 || containerHeight === 0) {
    return 1;
  }  // 关键代码

  // 计算适应宽度的scale
  const scaleWidth = containerWidth / pageWidth;
  //const scaleHeight = containerHeight / pageHeight;

  // 取平方根使缩放更合理(避免过度缩放)
  return Math.sqrt(scaleWidth);
  // return Math.min(scaleWidth); // 取最小值
};

问题出现情况: 在预览第一张图的时候通常都是成功的,后面的图偶尔会在cavnas中空白渲染,经排查就是初始化渲染的时候,计算适应容器的缩放比例这里出错了,关键解决代码如下:

if (containerWidth === 0 || containerHeight === 0) {

    return 1;

  }

读取pdf容器的宽高的时候读取到0 ,导致渲染了宽高为0的画布。

pdfjs-dist是一个用于在网页上展示PDF文件的JavaScript库。它通过将PDF文件解析并渲染到canvas元素上来实现PDF的打开和展示。下面是使用pdfjs-dist实现PDF打开的示例代码: 首先,你需要在HTML文件中引入pdfjs-dist库: ```html <script src="path/to/pdfjs-dist/build/pdf.js"></script> ``` 然后,你可以使用以下代码来加载并展示PDF文件: ```javascript // 获取PDF文件的URL var pdfUrl = 'path/to/your/pdf/file.pdf'; // 获取用于展示PDF的canvas元素 var canvas = document.getElementById('pdf-canvas'); // 设置PDF渲染的参数 var options = { // 设置PDF渲染的缩放比例 scale: 1.5, }; // 加载PDF文件 PDFJS.getDocument(pdfUrl).then(function(pdf) { // 获取PDF的第一页 return pdf.getPage(1); }).then(function(page) { // 获取PDF页面的宽度和高度 var viewport = page.getViewport(options.scale); // 设置canvas的大小 canvas.width = viewport.width; canvas.height = viewport.height; // 渲染PDF页面到canvas上 var renderContext = { canvasContext: canvas.getContext('2d'), viewport: viewport, }; return page.render(renderContext); }).catch(function(error) { // 处理错误 console.error('Error: ' + error); }); ``` 在上面的代码中,你需要将`path/to/pdfjs-dist/build/pdf.js`替换为pdfjs-dist库的实际路径,将`path/to/your/pdf/file.pdf`替换为你要打开的PDF文件的实际路径,将`pdf-canvas`替换为用于展示PDF的canvas元素的ID。 这样,当你加载包含上述代码的HTML文件时,就可以实现使用pdfjs-dist打开和展示PDF文件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值