pdf 添加跨域功能 修复pdf 页码和高亮没启用bug

This commit is contained in:
高雄
2026-04-15 14:40:41 +08:00
parent 171762d676
commit ee2a27501b
2 changed files with 79 additions and 44 deletions

View File

@@ -23083,24 +23083,26 @@ initCom(PDFViewerApplication);
} }
{ {
const HOSTED_VIEWER_ORIGINS = new Set(["null", "http://mozilla.github.io", "https://mozilla.github.io"]); const HOSTED_VIEWER_ORIGINS = new Set(["null", "http://mozilla.github.io", "https://mozilla.github.io"]);
var validateFileURL = function (file) { var validateFileURL = function (file) {
if (!file) { if (!file) {
return; return;
} }
const viewerOrigin = URL.parse(window.location)?.origin || "null"; const viewerOrigin = URL.parse(window.location)?.origin || "null";
if (HOSTED_VIEWER_ORIGINS.has(viewerOrigin)) { if (HOSTED_VIEWER_ORIGINS.has(viewerOrigin)) {
return; return;
} }
const fileOrigin = URL.parse(file, window.location)?.origin; /* 注释掉跨域检查
if (fileOrigin === viewerOrigin) { const fileOrigin = URL.parse(file, window.location)?.origin;
return; if (fileOrigin === viewerOrigin) {
} return;
const ex = new Error("file origin does not match viewer's"); }
PDFViewerApplication._documentError("pdfjs-loading-error", { const ex = new Error("file origin does not match viewer's");
message: ex.message PDFViewerApplication._documentError("pdfjs-loading-error", {
}); message: ex.message
throw ex; });
}; throw ex;
*/
};
var onFileInputChange = function (evt) { var onFileInputChange = function (evt) {
if (this.pdfViewer?.isInPresentationMode) { if (this.pdfViewer?.isInPresentationMode) {
return; return;

View File

@@ -1,55 +1,88 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="zh-CN">
<head> <head>
<meta charset="utf-8"/> <meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0"> <meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0">
<title>PDF预览</title> <title>PDF预览</title>
<#include "*/commonHeader.ftl"> <#include "*/commonHeader.ftl">
<script src="js/base64.min.js" type="text/javascript"></script> <script src="js/base64.min.js" type="text/javascript"></script>
<style>
/* 简单全屏布局,无滚动条 */
html, body {
margin: 0;
padding: 0;
height: 100%;
overflow: hidden;
}
iframe {
width: 100%;
height: 100%;
border: none;
display: block;
}
.img-preview {
position: fixed;
bottom: 20px;
right: 20px;
cursor: pointer;
z-index: 999;
width: 48px;
height: 48px;
}
</style>
</head> </head>
<body> <body>
<#if pdfUrl?contains("http://") || pdfUrl?contains("https://")> <#if pdfUrl?contains("http://") || pdfUrl?contains("https://")>
<#assign finalUrl="${pdfUrl}"> <#assign finalUrl="${pdfUrl}">
<#else> <#else>
<#assign finalUrl="${baseUrl}${pdfUrl}"> <#assign finalUrl="${baseUrl}${pdfUrl}">
</#if> </#if>
<iframe src="" width="100%" frameborder="0"></iframe>
<iframe id="pdfFrame" src="about:blank"></iframe>
<#if "false" == switchDisabled> <#if "false" == switchDisabled>
<img src="images/jpg.svg" width="48" height="48" style="position: fixed; cursor: pointer; top: 40%; right: 48px; z-index: 999;" alt="使用图片预览" title="使用图片预览" onclick="goForImage()"/> <img class="img-preview" src="images/jpg.svg" alt="使用图片预览" title="使用图片预览" onclick="goForImage()"/>
</#if> </#if>
</body>
<script type="text/javascript"> <script type="text/javascript">
var url = '${finalUrl}'; var url = '${finalUrl}';
var kkagent = '${kkagent}'; var kkagent = '${kkagent}';
var baseUrl = '${baseUrl}'.endsWith('/') ? '${baseUrl}' : '${baseUrl}' + '/'; var baseUrl = '${baseUrl}'.endsWith('/') ? '${baseUrl}' : '${baseUrl}' + '/';
if (kkagent === 'true' || !url.startsWith(baseUrl)) { if (kkagent === 'true' || !url.startsWith(baseUrl)) {
url = baseUrl + 'getCorsFile?urlPath=' + encodeURIComponent(Base64.encode(url))+ "&key=${kkkey}"; url = baseUrl + 'getCorsFile?urlPath=' + encodeURIComponent(Base64.encode(url)) + "&key=${kkkey}";
}
document.getElementsByTagName('iframe')[0].src = "${baseUrl}pdfjs/web/viewer.html?file=" + encodeURIComponent(url) + "&disablepresentationmode=${pdfPresentationModeDisable}&disableopenfile=${pdfOpenFileDisable}&disableprint=${pdfPrintDisable}&disabledownload=${pdfDownloadDisable}&disablebookmark=${pdfBookmarkDisable}&disableediting=${pdfDisableEditing}#page=1&pagemode=thumbs";
document.getElementsByTagName('iframe')[0].height = document.documentElement.clientHeight - 10;
/**
* 页面变化调整高度
*/
window.onresize = function () {
var fm = document.getElementsByTagName("iframe")[0];
fm.height = window.document.documentElement.clientHeight - 10;
} }
var viewerUrl = baseUrl + "pdfjs/web/viewer.html?file=" + encodeURIComponent(url);
viewerUrl += "&disablepresentationmode=${pdfPresentationModeDisable}";
viewerUrl += "&disableopenfile=${pdfOpenFileDisable}";
viewerUrl += "&disableprint=${pdfPrintDisable}";
viewerUrl += "&disabledownload=${pdfDownloadDisable}";
viewerUrl += "&disablebookmark=${pdfBookmarkDisable}";
viewerUrl += "&disableediting=${pdfDisableEditing}";
viewerUrl += "&pdfhighlightall=${highlightall}";
viewerUrl += "&watermarktxt=${watermarkTxt}";
viewerUrl += "#page=${page?js_string}";
viewerUrl += "&pagemode=thumbs";
var iframe = document.getElementById('pdfFrame');
iframe.src = viewerUrl;
// 图片预览切换
function goForImage() { function goForImage() {
var url = window.location.href var href = window.location.href;
if (url.indexOf("officePreviewType=pdf") != -1) { if (href.indexOf("officePreviewType=pdf") !== -1) {
url = url.replace("officePreviewType=pdf", "officePreviewType=image"); href = href.replace("officePreviewType=pdf", "officePreviewType=image");
} else { } else {
url = url + "&officePreviewType=image"; href += (href.indexOf('?') === -1 ? '?' : '&') + "officePreviewType=image";
} }
window.location.href = url; window.location.href = href;
} }
/*初始化水印*/ // 水印初始化(保持原有逻辑)
window.onload = function () { window.onload = function () {
initWaterMark(); if (typeof initWaterMark === 'function') {
} initWaterMark();
}
};
</script> </script>
</html> </body>
</html>