本周工作思考
PDF 文件支持超链接
PDF文件目前在Web端上实现思路是解释PDf文件格式,利用Web端渲染方式,目前我们用到了三种渲染方式,Canvas, SVG 和 Image的方式,很多伙伴可能会问什么不是直接用HTML渲染,答案其实比较简单,就是目前常规的HTML标签无法完全描述复杂的PDF格式,特别是PDF中的高级用法,诸如不规则图形,图文混排,以及一些特效。不过,从另一个角度说Canvas 和 Image 也算是 HTML标签。
在以上三种渲染方式中,除了SVG,其他两种的都是单纯的渲染展示,交互需要额外的支持。这次优化的实现上考虑到简单性,采用一种方式适用这种三种方式。PDF.js 支持 annotation 方式,annotation 是一个修改PDF机制,它有不同的语言实现,JavaScript语言中常用的是 PDF.js。也有专门用于PDF修改的,比如 PDF-annotation.js这类小众的类库。配合其他类库,它们都能实现PDF的在线编辑。
超链接的交互动作相对简单,从我们的 标签交付惯例上,我们一般只是使用点击跳转的交互。这次在方案上,没有采用专门的 pdf annotation 库,在PDF.js基础上使用 annotation Layer 层实现了对 标签的定位,渲染和交互动作。
简单来说,就是在 Canvas 外遮罩一个透明的Div,其大小和Canvas中的Pdf的Viewport相同,通过PDF.js的节点遍历方法,找到annotation的Link节点,读取节点的位置信息,转换到外层的Div上坐标系上,然后使用Link的 Rect 信息(Box信息,长宽)在Div上增加一个不带内容 A 标签,设置其Href 和 Display。