From 90823d1176986c87fce2a4e00fb8a6ef2405a28d Mon Sep 17 00:00:00 2001 From: Miguel Pellicer Date: Tue, 28 Nov 2023 12:00:06 +0100 Subject: [PATCH] SAK-49456 Lessons upgrade pdf-js from 2.9.359 to 4.0.189 (#12096) --- .../tool/producers/ShowPageProducer.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lessonbuilder/tool/src/java/org/sakaiproject/lessonbuildertool/tool/producers/ShowPageProducer.java b/lessonbuilder/tool/src/java/org/sakaiproject/lessonbuildertool/tool/producers/ShowPageProducer.java index 6309d447a2f5..93ce0849d726 100644 --- a/lessonbuilder/tool/src/java/org/sakaiproject/lessonbuildertool/tool/producers/ShowPageProducer.java +++ b/lessonbuilder/tool/src/java/org/sakaiproject/lessonbuildertool/tool/producers/ShowPageProducer.java @@ -2118,7 +2118,20 @@ else if(!lengthOk(height) && lengthOk(width) && ("px".equals(width.unit) || "".e boolean isPDF = simplePageBean.isPDFType(i); if (isPDF) { - String pdfSRC = String.format("/library/webjars/pdf-js/2.9.359/web/viewer.html?file=%s", movieUrl); + try { + // The PDF URL has to be encoded, some URLs can contain characters resulting in the PDF not loading properly. + // https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#can-i-specify-a-different-pdf-in-the-default-viewer + movieUrl = URLEncoder.encode(movieUrl, "UTF-8") + .replaceAll("\\+", "%20") + .replaceAll("\\%21", "!") + .replaceAll("\\%27", "'") + .replaceAll("\\%28", "(") + .replaceAll("\\%29", ")") + .replaceAll("\\%7E", "~"); + } catch (Exception ex) { + log.warn("Error encoding the PDF url, the PDF might not load in the UI. {}", ex.getMessage()); + } + String pdfSRC = String.format("/library/webjars/pdf-js/4.0.189/web/viewer.html?file=%s", movieUrl); item2 = UIOutput.make(tableRow, "pdfEmbed").decorate(new UIFreeAttributeDecorator("src", pdfSRC)).decorate(new UIFreeAttributeDecorator("alt", messageLocator.getMessage("simplepage.mm_player").replace("{}", abbrevUrl(i.getURL())))); } else if (useEmbed) { item2 = UIOutput.make(tableRow, "movieEmbed").decorate(new UIFreeAttributeDecorator("src", movieUrl)).decorate(new UIFreeAttributeDecorator("alt", messageLocator.getMessage("simplepage.mm_player").replace("{}", abbrevUrl(i.getURL()))));