diff --git a/server/src/main/java/cn/keking/service/FileHandlerService.java b/server/src/main/java/cn/keking/service/FileHandlerService.java index 4aa8b56a96b3153779e8e946a5cff945af22580c..8aabc8ebcd7ba5aa0019af38ef34c4ae606789df 100644 --- a/server/src/main/java/cn/keking/service/FileHandlerService.java +++ b/server/src/main/java/cn/keking/service/FileHandlerService.java @@ -534,6 +534,24 @@ public class FileHandlerService implements InitializingBean { return attribute; } + /** + * 获取请求的page参数 + * + * @param req req + * @return 页码 + */ + public int getPageAttribute(HttpServletRequest req) { + int page = 1; + String pageParam= req.getParameter("page"); + + // 内容存在且纯整数 + if(StringUtils.hasText(pageParam) && pageParam.matches("-?\\d+")) { + page = Integer.parseInt(pageParam); + } + + return page; + } + /** * 获取缓存的文件名 * diff --git a/server/src/main/java/cn/keking/service/impl/OfficeFilePreviewImpl.java b/server/src/main/java/cn/keking/service/impl/OfficeFilePreviewImpl.java index f2e66e71dd89b1a2fa5fe5bf712f009d4644f5f6..5ec002a78e78f594cd64acf3bbaa5d4913116d4f 100644 --- a/server/src/main/java/cn/keking/service/impl/OfficeFilePreviewImpl.java +++ b/server/src/main/java/cn/keking/service/impl/OfficeFilePreviewImpl.java @@ -137,6 +137,9 @@ public class OfficeFilePreviewImpl implements FilePreview { } model.addAttribute("imgUrls", imageUrls); model.addAttribute("currentUrl", imageUrls.get(0)); + if(model.getAttribute("page") != null) + model.addAttribute("page", model.getAttribute("page")); + if (officePreviewTypeImage.equals(officePreviewType)) { // PPT 图片模式使用专用预览页面 return (isPPT ? PPT_FILE_PREVIEW_PAGE : OFFICE_PICTURE_FILE_PREVIEW_PAGE); diff --git a/server/src/main/java/cn/keking/web/controller/OnlinePreviewController.java b/server/src/main/java/cn/keking/web/controller/OnlinePreviewController.java index bd324d576402dd4f1537e4feefbcbf8e52f281d8..394dbe489a2ad4b667e8b1220597b72771bc5187 100644 --- a/server/src/main/java/cn/keking/web/controller/OnlinePreviewController.java +++ b/server/src/main/java/cn/keking/web/controller/OnlinePreviewController.java @@ -10,6 +10,7 @@ import cn.keking.utils.KkFileUtils; import cn.keking.utils.WebUtils; import com.fasterxml.jackson.databind.ObjectMapper; import fr.opensagres.xdocreport.core.io.IOUtils; +import jodd.util.StringUtil; import org.apache.commons.codec.binary.Base64; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.DefaultRedirectStrategy; @@ -75,6 +76,10 @@ public class OnlinePreviewController { } FileAttribute fileAttribute = fileHandlerService.getFileAttribute(fileUrl, req); //这里不在进行URL 处理了 model.addAttribute("file", fileAttribute); + + int page = fileHandlerService.getPageAttribute(req); + model.addAttribute("page", page); + FilePreview filePreview = previewFactory.get(fileAttribute); logger.info("预览文件url:{},previewType:{}", fileUrl, fileAttribute.getType()); fileUrl =WebUtils.urlEncoderencode(fileUrl); diff --git a/server/src/main/resources/static/js/lazyload.js b/server/src/main/resources/static/js/lazyload.js index e36cf62b67c1248d83ae9f13cb020fe92d5a860e..c1bfbddbf3ff67df4840ad199b30a8217beb6cc1 100644 --- a/server/src/main/resources/static/js/lazyload.js +++ b/server/src/main/resources/static/js/lazyload.js @@ -65,3 +65,10 @@ function refresh(fn, remaining, context, args, previous, now) { previous = now; } } + +function slideToPage(page) { + // console.log(page) + // window.location.hash="#page"+page; + const targetElement = document.querySelector("#page"+page); + targetElement?.scrollIntoView({ behavior: 'auto'}); +} diff --git a/server/src/main/resources/web/officePicture.ftl b/server/src/main/resources/web/officePicture.ftl index e9d69032c9192e16928f63673f09f35f8320e55d..07a75a133face940e3b84375b7a54fe70e575915 100644 --- a/server/src/main/resources/web/officePicture.ftl +++ b/server/src/main/resources/web/officePicture.ftl @@ -30,10 +30,10 @@ -
+
<#list imgUrls as img>
- loading + loading
@@ -46,7 +46,11 @@ initWaterMark(); checkImgs(); }; + /*初始化到指定页码*/ + slideToPage(${page}); + window.onscroll = throttle(checkImgs); + function changePreviewType(previewType) { var url = window.location.href; if (url.indexOf("officePreviewType=image") !== -1) { diff --git a/server/src/main/resources/web/pdf.ftl b/server/src/main/resources/web/pdf.ftl index 845ac8caab9502299798088490721262c9447e9b..26233bd2d6da84a26313497d8b910af9fb0c7492 100644 --- a/server/src/main/resources/web/pdf.ftl +++ b/server/src/main/resources/web/pdf.ftl @@ -26,7 +26,9 @@ if (!url.startsWith(baseUrl)) { url = baseUrl + 'getCorsFile?urlPath=' + encodeURIComponent(Base64.encode(url)); } - 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}"; + 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=${page}"; document.getElementsByTagName('iframe')[0].height = document.documentElement.clientHeight - 10; /** * 页面变化调整高度 @@ -37,7 +39,7 @@ } function goForImage() { - var url = window.location.href + var url = window.location.href; if (url.indexOf("tifPreviewType=pdf") != -1) { url = url.replace("tifPreviewType=pdf", "tifPreviewType=jpg");