问题是这样的,最近在做一个文件传输的task,传到前端加个签名又传回去。前端pdf库用的是“pdf-lib”
PDF-LIB · Create and modify PDF documents in any JavaScript environment.https://pdf-lib.js.org/#examples很遗憾这个库不支持读取blob,但是或者可能在下载的时候用blob会更好?(等做到后期再说)
接口返回的二进制流,前端转为了arrayBuffer。那么自己项目里接口写的时候也需要返回二进制流。
File类的操作至今还没仔细看过,这次好好研究一下。
这样理解一下吧,FileStream是一个“管道”,插到具体路径下的某个文件上。定义字节流数组byte[]。你可以把它当作一个“杯子”容器。之后“管道”吸取数据,放入“杯子”里。
那么这边做的时候得第一点记住大文件的分片上传。谁能知道第三方报告pdf能有十几页呢。以防万一现场出bug。
第二点,数字签名的添加,数字签名是一个png或者jpg,这个问题不大,pdf-lib支持加一个canvas图层,加文本或者图像都是可以的。
至于为什么不在后端做pdf添加数字签名。因为看了看几个主流的库,spire。itextpdf什么的都要收费,免费的库各种限制。或者Graphic 直接画?(白手造库要我命了)。后来看了看还是前端做吧,视图层的东西还是交给前端吧。
前端的库原理其实都差不多,毕设时候研究过,加一个canvas绘制层。基本上就是确定这个页面的X,Y坐标,然后在Canvas层开始绘制,pdf-lib的方法就很明显,要求你输入xy坐标系。或者更激进一点,公司项目用一下“Fuzzy Anchoring”?那怕是这个task得研究一年。
关于优化。肯定得写好几个接口,第一个接口给用户预览文件,等用户确定选择了,再请求第二个接口实际的资源。第三个接口用于回传文件。暂定这样,等之后再聊一聊需求,看看有没有啥遗漏的。