首页 > 编程语言 >pdf.js源码分析-textLayer中的坐标计算

pdf.js源码分析-textLayer中的坐标计算

时间:2024-05-07 17:13:47浏览次数:27  
标签:tx top 位置 js textLayer 源码 pdf left

pdf.js中显示pdf内容和选择pdf文字属于不同的层,一个是canvas绘制,一个是使用dom进行布局,那么接下来先看一下在textLayer中的文字节点div是怎么计算每段文字的布局位置的吧。

首先找到pdf.js源码中的text_layer.js文件,然后得到下面方法appendText方法,下面的解释是在字体没有发生旋转时候,正常横向文本的一个解释


  // 创建字符串的div
  const textDiv = document.createElement("span");
  // 根据字体计算出字体的ascent,也就是字体上悬线的位置,也就是字母的上边缘位置
  const fontAscent = fontHeight * getAscent(fontFamily);
  

  // 计算textlayer中字符串div的位置left和top,这里tx表示一个位移的matrix矩阵,其中tx[4]表示x轴位置,tx[5]表示y轴位置
  let left, top;
  if (angle === 0) {
    left = tx[4];
    // matrix中ty的位置实际高度,减去字体的ascent的高度
    top = tx[5] - fontAscent;
  } else {
    left = tx[4] + fontAscent * Math.sin(angle);
    top = tx[5] - fontAscent * Math.cos(angle);
  }

  // 将left和top的位置计算为百分比,其中_pageWidth, _pageHeight表示document的viewport的宽度和高度,也就是绘制当前pdf页面的宽度高度
    divStyle.left = `${((100 * left) / task._pageWidth).toFixed(2)}%`;
    divStyle.top = `${((100 * top) / task._pageHeight).toFixed(2)}%`;

以上便是在pdf.js中text_layer的字符串位置计算获取方法

标签:tx,top,位置,js,textLayer,源码,pdf,left
From: https://www.cnblogs.com/xxss0903/p/18177700

相关文章

  • 多个开源的js补环境框架测试
    原文链接:https://mp.weixin.qq.com/s/uEMFGpE5bqmTvzSgX2twvA前言在做js逆向时肯定会遇到补环境的情况,看到github开源了好几个补环境用的框架,这篇文章做个测试,看看哪个比较好用。https://github.com/pysunday/sdenvhttps://github.com/bnmgh1/node-sandboxhttps://github.co......
  • FiddlerCore源码
    这是FiddlerCore5.0.2版本源码,支持.netframework和.netcore,百分百c#源码,功能全而且免费,无功能限制,还修复了多处bug。介绍:FiddlerCore可捕获和修改HTTP和HTTPS流量,而无需任何FiddlerUI。特点:HTTP和HTTPS流量捕获和修改。用于内容过滤和修改的强大对象模型。存......
  • Fastjson反序列化漏洞
    目录漏洞原理复现Fastjson1.2.24Fastjson1.2.47漏洞分析Fastjson是阿里巴巴开源的一个Java库,用于将Java对象转换为JSON字符串(序列化),以及将JSON字符串转换为Java对象(反序列化),漏洞编号CVE-2017-18349。漏洞原理Fastjson引入了autoType功能,允许在反序列化过程中通过@type......
  • 2024 js预编译
    1、一切未声明定义的变量(没有var)是全局变量属于window全局域2、全局声明定义的变量是全局变量属于window全局域functiontest(){vara=b=123}test()//console.log(a)//报错aisnotdefinedconsole.log(window.a)//undefinedconso......
  • 【Python-Json】自定义类输入json序列化、json的读取与写入
    AI问答Questionjson支持numpy数组么Answer不幸的是,标准的JSON格式不直接支持NumPy数组.JSON是一种用于存储和交换数据的文本格式,它有限的数据类型只包括对象(object)、数组(array)、数字(number)、字符串(string)、布尔值(true/false)、空值(null)等.因此,无法直接将......
  • JUC源码解析:深入解读偏向锁
    JUC源码解析:深入解读偏向锁本文使用jdk8几种锁状态介绍先介绍一下锁状态吧看偏向锁这一栏,它的内存存储了线程ID和Epoch,这一点尤为关键,意味着偏向锁没有内存可以存储对象头的hashCode,而其他锁是有地方存的.。也就意味着,,当锁对象被隐式(父类)或显试调用了has......
  • JS实现图表日期分类按色显示
    预想要达成的效果图: 关键步聚: js代码如下function(){vardate=newDate(this);if(date.getDay()==0||date.getDay()==6){return"<fontcolor='red'>"+date.getDate()+"</font>"}else{returndate.getD......
  • Js中valueOf和toString区别和使用
    对于number、string、Boolean、object、symbol数据类型调用valueOf方法,得到的都是数据本身(null、undefined两种类型上的原型链上没有valueOf方法)点击查看代码vara=1;varaa=a.valueOf();console.log(aa==a);//truevarb='a';......
  • jemeter中json提取器
    1、A接口中的单个参数提取,之后用于其他接口a.在需要提取字段的接口上右击添加----后置处理器-----jsonextractor b.填写json提取器的数据1.名称:随便填写,方便自己记录信息,必传2.applyto:应用范围,使用默认的即可(仅对当前元件生效)......
  • dayjs 根据选择的日期获取当前周的周一到周天
    //设置表头日期constsetHeadDate=(val:any)=>{constnowDay=dayjs(val).day()//这周的第一天letstr:any=nullif(nowDay){//非周天,即当周str=dayjs(val).startOf('week').add(1,'day')}else{//周天,先减去一天,当作是上周的,然后......