96SEO 2026-02-20 09:06 4
因为babel默认不会转化node_modules中的包但是pdfjs-dist用了es6的东东

转化pdfjs-dist之所以分开写是因为pdfjs-dist里面有很多es6的语法但是我们只需要转化pdfjs-dist里面的web文件夹下的js文件resolve(node_modules/pdfjs-dist/web/pdf_viewer.js),resolve(node_modules/pdfjs-dist/build/pdf.js),resolve(node_modules/pdfjs-dist/build/pdf.worker.js),resolve(node_modules/pdfjs-dist/build/pdf.worker.entry.js)
classleft-title我的印章/divdraggablev-modelmainImagelist:group{
}:sortfalseendendtransition-group
//li/transition-group/draggable/el-colel-col
clickprevPage上一页/el-buttonel-button
clicknextPage下一页/el-buttonel-button
}}页/el-buttonel-input-numberstylemargin:
5pxclassbtn-outline-darkv-modelpageNum:min1:maxnumPageslabel输入页码/el-input-numberel-button
clickcutover跳转/el-button/divcanvas
clickremoveSignature删除签章/el-buttonel-button
clickclearSignature清除所有签章/el-buttonel-button
clicksubmitSignature提交所有签章信息/el-button/div/el-colel-col
classright-item-title文件主题/divdiv
classright-item-title发起方/divdiv
classright-item-title截止时间/divdiv
}}/div/div/div/div/el-col/el-row/div
pdfjs-dist/es5/build/pdf.worker.entry;
require(pdfjs-dist/es5/build/pdf.js);
pdfjsLib.GlobalWorkerOptions.workerSrc
this.canvasEle.getObjects()[0])
[require(/assets/img/projectCenter/sign.png),
require(/assets/img/projectCenter/seal.png)];that.taskInfo
};this.setPdfArea();},mounted()
this.$message.error(已经显示最小比例);//
this.renderPage(this.pageNum);//
this.$message.error(已经显示最大比例);//
this.renderPage(this.pageNum);//
this.pdfDoc.getPage(num).then((page)
viewport.height;_this.canvas.width
finishrenderTask.promise.then(()
pendingthis.renderPage(_this.pageNumPending);_this.pageNumPending
null;}});});},queueRenderPage(num)
{this.renderPage(num);}},prevPage()
{return;}this.pageNum--;},nextPage()
{return;}this.pageNum;},cutover()
渲染pdf到时还会盖章信息在渲染时同时显示出来不应该在切换页码时才显示印章信息showpdf(pdfUrl)
JSON.parse(localStorage.getItem(signs));
{this.addSeal(datas[index].sealUrl,datas[index].left,datas[index].top,datas[index].index);}}}this.canvas
document.getElementById(the-canvas);this.ctx
this.canvas.getContext(2d);pdfjsLib.getDocument({
this.pdfDoc.numPages;this.renderPage(this.pageNum).then(()
this.canvas.height});});this.commonSign(this.pageNum,
document.querySelector(#elesign).style.width
document.querySelector(#ele-canvas);let
document.querySelector(.pCenter);canvaEle.width
(this.whDatas.height)*(this.scale);canvaEle.height
this.whDatas.height;this.canvasEle
document.querySelector(.canvas-container);container.style.position
不能将图片拖拽到绘图区域外this.canvasEle.on(object:moving,
obj.getBoundingRect().top);obj.left
obj.getBoundingRect().left);}//
Math.min(obj.top,obj.canvas.height
obj.getBoundingRect().top);obj.left
Math.min(obj.left,obj.canvas.width
obj.getBoundingRect().left);}});},//
//图片缩小一this.canvasEle.add(oImg);});},//
{this.canvasEle.remove(this.canvasEle.getActiveObject());},//
this.canvasEle.remove(this.canvasEle.clear());
JSON.parse(localStorage.getItem(signs));
{this.addSeal(datas[index].sealUrl,datas[index].left,datas[index].top,datas[index].index);}}},//
JSON.parse(localStorage.getItem(signs));
this.mainImagelist[val.index],index:
signDatas;}localStorage.setItem(signs,
console.log(JSON.parse(caches));return
{this.canvasEle.remove(this.canvasEle.clear());
清空页面所有签章localStorage.removeItem(signs);
{this.addSeal(this.mainImagelist[e.newDraggableIndex],e.originalEvent.layerX,e.originalEvent.layerY,e.newDraggableIndex);},//
res.data.data.pdfurl;this.$nextTick(()
接口返回的应该还有盖章信息不只是pdf});}},watch:
console.log(this.whDatas);loading.close();this.renderFabric();this.canvasEvents();let
document.querySelector(#ele-canvas);eleCanvas.style
{this.commonSign(this.pageNum);this.queueRenderPage(this.pageNum);}}
absolute;top:30%;left:49%;z-index:
url(~/assets/img/projectCenter/tuo.png);background-repeat:
classcontract-signature-viewdiv
clickremoveSignature删除签章/el-buttonel-button
clickclearSignature清空签章/el-buttonel-button
clicksubmitSignature提交签章/el-button/div/divdiv
classtext将示例印章标识拖到文件相应区域即可获取签章位置/p/div!--
--draggablev-modelmainImagelist:group{
}:sortfalseendendtransition-group
mainImagelist:keyitem.imgclassitemstyletext-align:
//li/transition-group/draggable/aside!--
classslider-boxel-sliderclasssliderv-modelscale:min0.5:max2:step0.1:show-tooltipfalsechangesliderChange/span
--el-inputclassinput-boxv-model.numberpageNum:maxdefaultNumPageschangecutover/span
classele-canvas/canvas/div/divi
pdfjs-dist/es5/build/pdf.worker.entry;
require(pdfjs-dist/es5/build/pdf.js);
pdfjsLib.GlobalWorkerOptions.workerSrc
各页pdf的canvas-layoutcanvasLayoutTopList:
隐藏的input用来提交数据shadowInputValue:
require(/assets/img/projectCenter/contract-sign-img.png)
require(/assets/img/projectCenter/seal.png)
}];this.setPdfArea();},mounted()
decodeURIComponent(pdfStr.split()[1]);this.pdfUrl
./static/text.pdf;this.$nextTick(()
this.pdfDoc.numPages;this.defaultNumPages
this.pdfDoc.numPages;this.$nextTick(()
document.querySelectorAll(.the-canvas);this.canvas.forEach((item)
{this.ctx.push(item.getContext(2d));});//
{this.renderFabric();this.canvasEvents();},
设置pdf宽高缩放比例渲染pdfrenderPage(num)
this.pdfDoc.getPage(num).then((page)
viewport.height;this.canvas[num
viewport};page.render(renderContext);});},//
document.querySelectorAll(.canvas-layout);//
循环遍历canvasLayoutDom.forEach((item)
{this.canvasLayoutTopList.push({
item.querySelector(.ele-canvas);//
item.querySelector(.the-canvas);//
pCenter.clientWidth;canvasEle.height
创建fabric对象并存储this.canvasEle.push(new
item.querySelector(.canvas-container);container.style.position
translateX(-50%);container.style.top
document.querySelector(.out-view);//
开启监听窗口滚动this.outViewScroll();},//
{this.outViewDom.addEventListener(scroll,
{this.outViewDom.removeEventListener(scroll,
this.outViewDom.scrollTop;const
this.canvasLayoutTopList.map((item)
增加一个最大值topList.push(Number.MAX_SAFE_INTEGER);for
scale滑块,重新渲染整个pdfsliderChange()
this.outViewScrollClose();this.whDatas
}];this.getSignatureJson();setTimeout(()
this.pdfDoc.numPages;this.$nextTick(()
document.querySelectorAll(.the-canvas);this.canvas.forEach((item)
{this.ctx.push(item.getContext(2d));});//
{this.renderFabric();this.canvasEvents();},
签章拖拽边界处理不能将图片拖拽到绘图区域外canvasEvents()
obj.getBoundingRect().top);obj.left
obj.getBoundingRect().left);}//
Math.min(obj.top,obj.canvas.height
obj.getBoundingRect().top);obj.left
Math.min(obj.left,obj.canvas.width
obj.getBoundingRect().left);}//
console.log(obj.cacheKey,obj.cacheKey);const
this.coordinateList.slice(1).findIndex((coord)
this.scale);});this.getSignatureJson();});});},//
e.originalEvent.target.parentElement.parentElement;const
this.canvasLayoutTopList.findIndex((item)
Math.ceil(e.originalEvent.layerX
Math.ceil(e.originalEvent.layerY
findIndex);this.addSeal({sealUrl:
this.mainImagelist[e.newDraggableIndex].img,left,top,index:
true});this.canvasEle[pageNum].add(oImg);//
this.coordinateList.filter((item)
this.canvasEle[pageNum].getObjects()[length];//
Math.ceil(currentSignInfo[item]
currentSignInfo.cacheKey;obj.sealUrl
${this.mainImagelist[index].name}${this.coordinateList.length};obj.page
1;this.coordinateList.push(obj);this.getSignatureJson();},//
this.coordinateList.slice(1);//
[];signatureList.forEach((item)
item[key];});arr.push(obj);});//
滚动到指定位置this.outViewDom.scrollTop
this.canvasLayoutTopList[this.pageNum
滚动到指定位置this.outViewDom.scrollTop
this.canvasLayoutTopList[this.pageNum
滚动到指定位置this.outViewDom.scrollTop
this.canvasLayoutTopList[this.pageNum
{item.discardActiveObject().renderAll();});},//
this.$message.error(请选择要删除的签章);//
this.$message.error(只能选择删除一个签章,请重新选择);}//
findItem[0].getActiveObject();const
this.coordinateList.findIndex((item)
删除选中的签章findItem[0].remove(activeObj);//
删除选中的签章的信息this.coordinateList.splice(findIndex,
1);this.getSignatureJson();},//
{item.clear();});this.coordinateList
}];this.getSignatureJson();},//
{console.log(this.coordinateList,
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback