当前位置: 首页 > news >正文

pdf文档插件 viewer.js用法

设置页面默认大小

const DEFAULT_SCALE_VALUE = "page-fit"; page-fit可修改其他

//修改默认放大倍数 viewer.js

case "page-width": scale = pageWidthScale*1.4; break;

//或者 viewer.html

PDFViewerApplication.pdfViewer.currentScale;

设置默认小手功能

jQuery("#iframe5").contents().find("#cursorHandTool").trigger("click")

文件路径需要encodeURIComponent转义(否则会访问两次或者访问不到的情况)

//http://192.168.16.247:8088/utility/3rd/browse-pdf-3.11/web/viewer.html?file=http%3A%2F%2F192.168.16.250%3A8088%2Ffileserver%2Fdocumenttree%2Fpreview%2F1988853001434976258%3Ftokenid%3DNjE5NGFkNTMtMzYzZi00MmFlLTkxNGQtN2EwYzEzMTJhODdi

iframe3url = "/utility/3rd/browse-pdf-3.11/web/viewer.html?file=" + encodeURIComponent(window.$lzapphost.fileserver + `/documenttree/preview/${mid}?tokenid=${tokenshowpdf}`)

jQuery('.iframe3').attr('src', iframe3url)

pdf宽度100%时, 与两边的间隙

const SCROLLBAR_PADDING = 0;//kll 12-26 SCROLLBAR_PADDING = 40 //原

刷新页面去除页面浏览滚动条历史

async _writeToStorage() {
const databaseStr = JSON.stringify(this.database);
//localStorage.setItem("pdfjs.history", databaseStr);
}

async _readFromStorage() {
//return localStorage.getItem("pdfjs.history");
}

动态修改scaleSelect的值

viewer.js

jQuery(function () { // 获取原生DOM元素并触发原生change事件 window.addEventListener('message', function(event) { if (event.data.type === 'dataChange') { // 处理数据变化 let scale = event.data.value; console.log('Parent data changed: ' + event.data.value); PDFViewerApplication.initializedPromise.then(function () { // 设置缩放级别为“page-width” PDFViewerApplication.pdfViewer.currentScaleValue = scale; }); } }); });

父页面(引用页面)

viewer.js

webViewerWheel方法里面
if (previousScale !== currentScale) { const scaleCorrectionFactor = currentScale / previousScale - 1; const rect = pdfViewer.container.getBoundingClientRect(); const dx = evt.clientX - rect.left; const dy = evt.clientY - rect.top; pdfViewer.container.scrollLeft += dx * scaleCorrectionFactor; pdfViewer.container.scrollTop += dy * scaleCorrectionFactor; let iframename=window.frameElement.id; console.log("iframe:"+iframename,dx,dy);window.parent.postMessage({type: 'getscale',value:currentScale,"dx":pdfViewer.container.scrollLeft,"dy":dy, 'iframe':iframename}, '*');}
fileControst.html
window.addEventListener('message',function (e){ if(e.data.type==="getscale"){ debugger; let currentScale=e.data.value,dx=e.data.dx,dy=e.data.dy,iframe=e.data.iframe; // let optionlen=jQuery(".content_box").find("#iframe2").contents().find("body").find("#scaleSelect").find("option[value='"+currentScale+"']").length // if(optionlen==0){ // jQuery(".content_box").find("#iframe1").contents().find("body").find("#scaleSelect").append(`<option value="${currentScale}" class="hide">${Math.round(currentScale*100)+"%"}</option>`); // } // jQuery(".content_box").find("#iframe1").contents().find("body").find("#scaleSelect").val(currentScale).trigger('change') // // 触发自定义事件,将key和value作为参数传递 if(iframe==="iframe2"){ window.frames[1].postMessage({ type: 'dataChange1', value:currentScale, dx:dx,dy:dy,iframe:iframe }, '*'); }else{ window.frames[0].postMessage({ type: 'dataChange2', value:currentScale, dx:dx,dy:dy,iframe:iframe }, '*'); } } });

viewer.html

jQuery(function () { // 获取原生DOM元素并触发原生change事件 window.addEventListener('message', function(event) { if (event.data.type === 'dataChange2') { // 处理数据变化 let scale = event.data.value; let dx=event.data.dx; let dy=event.data.dy; let iframe=event.data.iframe console.log('Parent data changed: ' + event.data.value); // PDFViewerApplication.initializedPromise.then(function () { // 设置缩放级别为“page-width” debugger; PDFViewerApplication.pdfViewer.currentScaleValue = scale; const previousScale = PDFViewerApplication.pdfViewer.currentScale; const scaleCorrectionFactor = scale / previousScale - 1; // if(scaleCorrectionFactor==0){ // PDFViewerApplication.pdfViewer.container.scrollLeft+=dx; // PDFViewerApplication.pdfViewer.container.scrollTop+=dy; // }else{ // PDFViewerApplication.pdfViewer.container.scrollLeft+=dx* scaleCorrectionFactor; // PDFViewerApplication.pdfViewer.container.scrollTop+=dy* scaleCorrectionFactor; // } // }); PDFViewerApplication.pdfViewer.container.scrollLeft=dx; PDFViewerApplication.pdfViewer.container.scrollTop=dy } }); });

页面实例

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" /> <script src="/utility/lzmain.js"></script> <!-- <script src="/utility/lzmain-form.js"></script> --> <link rel="stylesheet" href="./css/style.css"> </script> <title></title> <style> @font-face { font-family: 'arial'; src: url('../fonts/Arial/arial.ttf')format('truetype'); } body { background: #F2F2F2; font-family: "Microsoft YaHei", "微软雅黑" !important; padding: 0px; } .box { width: 100%; height: 100%; display: flex; flex-wrap: wrap; background-color: #fff; border-bottom: 1px solid #E6E6E6; } .box .box-con { width: calc( 50% - 9px); margin-bottom: 0px; height: calc( (100% / 2) - 9px); background-color: #EAEAEA; } .box .box-con:nth-of-type(1), .box .box-con:nth-of-type(2) { margin-bottom: 18px; } .box .box-con:nth-of-type(2n) { margin-left: 18px; } .content_box { width: 100%; height: 100%; float: left; } .content_box iframe { width: 100%; height: calc( 100% - 38px); cursor: alias !important; } .content_box p { font-size: 14px; font-weight: bold; background-color: #323639; color: #fff; height: 36px; line-height: 36px; padding-left: 10px; } /* .itin { width: 340px; font-size: 16px; font-weight: bold; background-color: #323639; color: #fff; */ /* padding-left: 10px; } */ .showtcdiv { display: none; position: fixed; top: 0px; left: 0px; right: 0px; bottom: 0px; width: 100%; height: 100%; z-index: 99; background-color: #fff; } .showtcdiv-title { font-size: 14px; font-weight: bold; background-color: #323639; color: #fff; height: 36px; line-height: 36px; padding: 0 12px; position: relative; } .showtcdiv-title span { position: absolute; left: calc( 50% - 100px); font-size: 13px; } .showtcdiv-title em { font-style: normal; font-size: 15px; color: #fff; } .showtcdiv-con { height: 100%; } .box-l, .box-r { width: calc( 50% - 9px); } .box-r { display: flex; flex-wrap: wrap; margin-left: 9px; } /* .showtcdiv::-webkit-scrollbar { width: 5px !important; height: 5px !important; } */ .box-l { border: 1px solid #E6E6E6; margin-right: 9px; border-top: 0px; border-bottom: 0px; } .box-l .boxL-title { background-color: #FAFAFA; line-height: 50px; height: 50px; padding: 0 20px; font-size: 16px; color: #333; font-weight: bold; border-bottom: 1px solid #E6E6E6; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-family: 'arial'; } .box-l .pdfleft { width: 100%; height: calc( 100% - 50px); } </style> </head> <body> <div class="box"> <div class="box-l"> <p class="boxL-title" title=""> <span>项目名称:</span> <span class="projectName"></span> </p> <iframe class="pdfleft" frameborder="0"></iframe> </div> <div class="box-r"> <div class="box-con"> <div class="content_box"> <p>上位规划</p> <iframe class="iframe1" id="iframe1" src="" frameborder="0"></iframe> </div> </div> <div class="box-con"> <div class="content_box"> <p>调整前规划用地</p> <iframe class="iframe2" id="iframe2" src="" frameborder="0"></iframe> </div> </div> <div class="box-con"> <div class="content_box"> <p>调整后规划用地</p> <iframe class="iframe3" id="iframe3" src="" frameborder="0"></iframe> </div> </div> <div class="box-con"> <div class="content_box"> <p>城市设计</p> <iframe class="iframe4" id="iframe4" src="" frameborder="0"></iframe> </div> </div> </div> </div> <div class="showtcdiv"> <div class="showtcdiv-con"> <p class="showtcdiv-title"><em>城市设计</em> <span>按住Ctrl键+鼠标滚轮可缩放图例</span></p> <iframe class="iframe5" id="iframe5" width="100%" style="height: calc( 100% - 32px );" src="" frameborder="0"></iframe> </div> </div> <script> jQuery(function() { var iframe1url = "" var iframe2url = "" var iframe3url = "" var iframe4url = "" var iframe5url = "" init() // 页面初始化 function init() { // 给pdf赋值src let projectid = $request("projectid") let flowcode = $request("flowcode") let projecttype = $request("projecttype") let ntcodekey = "" let pars = { "project_id": projectid } // 初始化页面渲染 let getres = $lzpost(window.$apphost("common") + '/api/shghbzspxt/getlist', pars).returnValue; let default_req_mode = getres.data.project_name; jQuery(".boxL-title").attr("title", default_req_mode) jQuery(".projectName").text(default_req_mode) let tzh = "tzh", tzq = "tzq", cssj = "cssj", swgh = "swgh", xmqk = "xmqk"; let mid = '' let index; jQuery.getJSON('./js/tip.json', function(data) { console.log(data) let array = data[projecttype]; for (let i = 0; i < array.length; i++) { const element = array[i]; if (element.flowcode == flowcode) { index = i } } // ntcode = data[projecttype][index].nodecode[tzh] getmid(tzh, data[projecttype][index].nodecode[tzh]); getmid(tzq, data[projecttype][index].nodecode[tzq]); getmid(cssj, data[projecttype][index].nodecode[cssj]); getmid(xmqk, data[projecttype][index].nodecode[xmqk]); getmid(swgh, data[projecttype][index].nodecode[swgh]); // ylwj(); }) // 根据项目id和资料树节点编码获取附件id function getmid(codename, ntcode) { let urlqu = `/serverapp/api/shghbzspxt/material/project/${projectid}/tn_code/${ntcode}` let tokenshowpdf = top.window.$token(); let datares = $lzget(urlqu).value mid = datares ntcodekey = codename switch (ntcodekey) { case "xmqk": if (mid) iframe5url = "/utility/3rd/browse-pdf-3.11/web/viewerleft.html?file=" + encodeURIComponent(window.$lzapphost.fileserver + `/documenttree/preview/${mid}?tokenid=${tokenshowpdf}`); jQuery('.pdfleft').attr('src', iframe5url) // iframeOnloadEnd("pdfleft", iframe5url) break; case "swgh": if (mid) iframe1url = "/utility/3rd/browse-pdf-3.11/web/viewer.html?file=" + encodeURIComponent(window.$lzapphost.fileserver + `/documenttree/preview/${mid}?tokenid=${tokenshowpdf}`) jQuery('.iframe1').attr('src', iframe1url) iframeOnloadEnd("iframe1", iframe1url) break; case "tzq": if (mid) iframe2url = "/utility/3rd/browse-pdf-3.11/web/viewer.html?file=" + encodeURIComponent(window.$lzapphost.fileserver + `/documenttree/preview/${mid}?tokenid=${tokenshowpdf}`) jQuery('.iframe2').attr('src', iframe2url) iframeOnloadEnd("iframe2", iframe2url) break; case "tzh": if (mid) iframe3url = "/utility/3rd/browse-pdf-3.11/web/viewer.html?file=" + encodeURIComponent(window.$lzapphost.fileserver + `/documenttree/preview/${mid}?tokenid=${tokenshowpdf}`) jQuery('.iframe3').attr('src', iframe3url) iframeOnloadEnd("iframe3", iframe3url) break; case "cssj": if (mid) iframe4url = "/utility/3rd/browse-pdf-3.11/web/viewer.html?file=" + encodeURIComponent(window.$lzapphost.fileserver + `/documenttree/preview/${mid}?tokenid=${tokenshowpdf}`) jQuery('.iframe4').attr('src', iframe4url) iframeOnloadEnd("iframe4", iframe4url) break; } // fzurl() } function fzurl() { debugger var iframe1url = "/lzfile/1831160914645225476/wu_1j8iae33k97d4qu83i1m51fo17.pdf" // var iframe2url = "/lzfile/1831160914875912194/wu_1j8iadgeh1b556e395e6hr13ld7.pdf" // var iframe3url = "/lzfile/1831160914875912194/wu_1j8iadgeh1b556e395e6hr13ld7.pdf" // var iframe4url = "/lzfile/1831160914875912194/wu_1j8iadgeh1b556e395e6hr13ld7.pdf" // var iframe5url = "/lzfile/1831160914875912194/wu_1j8iadgeh1b556e395e6hr13ld7.pdf" if (iframe1url) { } debugger var pdffurl2 = '/utility/3rd/browse-pdf-3.11/web/viewer.html?file=' + iframe2url var pdffurl3 = iframe3url var pdffurl4 = '/utility/3rd/browse-pdf-3.11/web/viewer.html?file=' + iframe4url var pdffurl5 = '' // var pdfleft = '/utility/3rd/browse-pdf-3.11/web/viewerleft.html?file=' + $lzapphost.fileserver + iframe1url jQuery('.iframe1').attr('src', "/utility/3rd/browse-pdf-3.11/web/viewer.html?file=window.$lzapphost.fileserver/lzfile/1831160914645225476/wu_1j8iae33k97d4qu83i1m51fo17.pdf") jQuery('.iframe2').attr('src', pdffurl2) jQuery('.iframe3').attr('src', pdffurl3) jQuery('.iframe4').attr('src', pdffurl4) jQuery('.iframe5').attr('src', pdffurl1) jQuery('.pdfleft').attr('src', pdfleft) // 添加默认触发事件 iframeOnloadEnd("iframe1", iframe1url) iframeOnloadEnd("iframe2", iframe2url) iframeOnloadEnd("iframe3", iframe3url) iframeOnloadEnd("iframe4", iframe4url) // iframeOnloadEnd("iframe5", iframe4url) } } function iframeOnloadEnd(iframeName, pdfurl) { debugger var iframeparam = document.getElementById(iframeName); iframeparam.onload = function() { // 默认页面适合 jQuery("#" + iframeName).contents().find("select[id='scaleSelect']").change(function() { jQuery("#" + iframeName).contents().find("#scaleSelect").find("option[value='page-fit']").prop("selected", true); }); // 打开文档 debugger jQuery("#" + iframeName).contents().find(".fd-button").click(function() { let titlename = jQuery("#" + iframeName).prev().text() jQuery(".showtcdiv-title em").text(titlename) if (iframeName == "iframe3") { jQuery('.iframe5').attr('src', iframe3url.replace("viewer.html", "viewerbig.html")) } else if (iframeName == "iframe1") { jQuery('.iframe5').attr('src', iframe1url.replace("viewer.html", "viewerbig.html")) } else if (iframeName == "iframe2") { jQuery('.iframe5').attr('src', iframe2url.replace("viewer.html", "viewerbig.html")) } else if (iframeName == "iframe4") { jQuery('.iframe5').attr('src', iframe4url.replace("viewer.html", "viewerbig.html")) } var iframelo5 = document.getElementById("iframe5"); // jQuery(".iframe5").contents().find("#viewerContainer").removeClass("ovhi") iframelo5.onload = function() { jQuery('.iframe5').contents().find(".fd-button").hide(); jQuery('.iframe5').contents().find(".sx-button").show(); jQuery("#iframe5").contents().find("#cursorHandTool").trigger("click") jQuery("#iframe5").contents().find(".sx-button").click(function() { jQuery(".showtcdiv").hide(); }) } jQuery(".showtcdiv").show(); }) setTimeout(() => { // jQuery("#iframe1").contents().find("#cursorHandTool").trigger("click") defaultTriggerMe("#" + iframeName, "#cursorHandTool", "page-fit") }, 500); } } // 默认触发事件 function defaultTriggerMe(iframeName, idName, idName2) { jQuery(iframeName).contents().find(idName).trigger("click") // jQuery(iframeName).contents().find(idName2).trigger("click") } }) </script> </body> </html>
http://www.jsqmd.com/news/616119/

相关文章:

  • MSGEQ7音频频谱芯片驱动设计与抗干扰实践
  • OpenClaw开源贡献:为Kimi-VL-A3B-Thinking开发社区技能指南
  • git常用命令手册(备忘录:不定时更新)
  • Reportr部署实战:如何在Heroku和自有服务器上快速搭建个人数据仪表板
  • 在 Django 项目中,`db.sqlite3` 文件是默认的数据库。本文将深入探讨其连接方式、可视化方法以及如何使用 Django ORM 进行增删改查操作。
  • OpenClaw+千问3.5-9B智能家居:自然语言控制家庭设备
  • Yoopta-Editor最佳实践:10个提升编辑体验的实用技巧
  • 【更新至2024年】上市公司ESG评级评分数据合集(十份数据:华证年度、华证季度、Wind、商道融绿、富时罗素、彭博、润灵环球、MSCI、cnrds、盟浪)
  • 实时口罩检测-通用多场景适配:室内安检、地铁闸机、会议签到应用案例
  • OpenClaw多模型对比:Kimi-VL-A3B-Thinking与纯文本模型任务效果实测
  • 2026年工业电加热设备技术解析与主流厂商盘点:电磁加热厂家/电磁加热器厂家/电磁加热回转窑厂家/电磁回转窑厂家/选择指南 - 优质品牌商家
  • OpenClaw技能市场探索:发现适配Kimi-VL-A3B-Thinking的实用自动化模块
  • 黑马程序员python核心语法-基础知识
  • 2026年孔网钢带塑料复合管技术解析与合规厂家选型指南:兰州PE排水管、兰州PE波纹管、兰州PE管、兰州PE给排水管选择指南 - 优质品牌商家
  • Serverless 架构设计与实践:构建高效的无服务器应用
  • 付费内容无法访问?从技术原理到合法解决方案的完整指南
  • ORA-12169: TNS连接标识符过长,Oracle报错故障修复与远程处理
  • 探索数字内容解锁的高效访问之道:Bypass Paywalls Clean工具全解析
  • 2001-2023年各省农产品进出口额数据(无缺失)
  • 卸载CUDA(Windows)
  • OpenClaw任务编排进阶:Phi-3-vision-128k-instruct多步骤图文处理工作流设计
  • 测试人员聚焦于AI的4个核心方向
  • 2026年Q2养老院价格表哪家优:天津养老院、天津哪有回民养老院、天津国寿嘉园、天津市养老院、天津高端养老院、宜善园养老院选择指南 - 优质品牌商家
  • 聊一聊 C# 中的闭包陷阱:foreach 循环的坑你还记得吗?募
  • 2026年车辆温度传感器TOP5推荐:热敏电阻(NTC)温度传感器、热电偶、高精度铂电阻(RTD)温度传感器、DS18B20数字温度传感器选择指南 - 优质品牌商家
  • 2025_NIPS_CRRL: Learning Channel-invariant Neural Representations for High-performance Cross-day ...
  • 【蓝桥杯】——>进阶
  • 用于尺寸标注函数 UF_DRF_object_s 结构体的详细说明
  • Nano-Banana Studio效果展示:高清Knolling平铺拆解作品集惊艳呈现
  • SecGPT-14B技能扩展:为OpenClaw添加网络资产扫描能力