You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PDF.js Canvas中鼠标像素坐标转换为PDF点?

问题

我用PDF.js在网页Canvas中渲染PDF,通过鼠标拖拽获取客户端X位置的代码如下:

var rect = canvas.getBoundingClientRect();
return e.clientX - rect.left

这个代码返回的是像素单位的位置。现在需要用PDF.js在PDF中渲染图形,库要求X位置必须是PDF Points单位,但目前只能拿到Canvas中鼠标在渲染PDF上的X像素位置,示例代码如下:

const button = form.createTextField("ctrl_22");
button.addToPage( firstPage, {
    x: 200 // 这里需要是POINTS单位
  })

请问有没有方法把获取到的clientX转换为PDF点?

解决方案

可以转换,核心是找到Canvas渲染PDF时的缩放比例,用像素位置除以该比例就能得到PDF Points,具体步骤如下:

  • 获取PDF.js的渲染缩放因子
    PDF.js渲染页面时会有明确的缩放比例,你可以从初始化渲染的配置中直接获取,或者从已渲染的页面实例中读取:

    // 方式1:从初始化渲染的配置中获取(假设你设置了scale变量)
    const scale = 1.5;
    // 方式2:从已渲染的页面实例中获取当前缩放比例
    const currentScale = page.viewport.scale;
    
  • 计算像素位置到PDF Points的转换
    用你已经拿到的Canvas内X像素位置,除以缩放因子即可得到对应的PDF Points:

    var rect = canvas.getBoundingClientRect();
    const canvasX = e.clientX - rect.left;
    const pdfPointX = canvasX / currentScale;
    
  • 应用转换结果
    把计算后的pdfPointX传入图形渲染代码即可:

    const button = form.createTextField("ctrl_22");
    button.addToPage(firstPage, {
        x: pdfPointX // 已转换为PDF Points单位
    })
    

注意:如果Canvas存在额外的页面滚动偏移、自身内边距/外边距,要确保canvasX是完全相对于PDF渲染区域的准确像素位置,避免转换出现误差。

内容的提问来源于stack exchange,提问作者user2404597

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:05:12