Skip to content

Commit d90c6eb

Browse files
committed
first page as blurred jpeg, TIL: some css properties seem to affect the z-index https://stackoverflow.com/a/57327698/1359903, applying blur hid everything else under it.
1 parent 684e305 commit d90c6eb

4 files changed

Lines changed: 20 additions & 16 deletions

File tree

TODO.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
- [x] set response header on donwload
2929

3030
- [ ] send 404 for unknown links and don't log
31-
- [ ] generate preview page as blury jpeg. extracting the first page from the PDF does not reduce file size much
31+
- [x] generate preview page as blurry jpeg. extracting the first page from the PDF does not reduce file size much
3232
- [ ] set proper filename for download
3333

3434
- [ ] circle e2e test

src/main/java/com/headissue/servlet/SeePdfs.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import jakarta.servlet.http.HttpServletRequest;
1616
import jakarta.servlet.http.HttpServletResponse;
1717
import jakarta.servlet.http.Part;
18+
import java.awt.image.BufferedImage;
1819
import java.io.*;
1920
import java.nio.file.Files;
2021
import java.nio.file.NoSuchFileException;
@@ -27,9 +28,11 @@
2728
import java.util.Base64;
2829
import java.util.Collection;
2930
import java.util.Map;
31+
import javax.imageio.ImageIO;
3032
import org.apache.pdfbox.Loader;
31-
import org.apache.pdfbox.multipdf.PageExtractor;
3233
import org.apache.pdfbox.pdmodel.PDDocument;
34+
import org.apache.pdfbox.rendering.ImageType;
35+
import org.apache.pdfbox.rendering.PDFRenderer;
3336
import org.eclipse.jetty.http.MimeTypes;
3437
import org.slf4j.Logger;
3538
import org.slf4j.LoggerFactory;
@@ -165,8 +168,8 @@ private void writePreviewPage(HttpServletResponse resp, String accessId, AccessR
165168
accessId,
166169
"accessRule",
167170
accessRule,
168-
"base64Pdf",
169-
firstPageAsBase64String(pdfPath),
171+
"base64Jpeg",
172+
firstPageAsBase64Jpeg(pdfPath),
170173
"formKey",
171174
formKeyService.getFormKey()),
172175
resp.getWriter());
@@ -181,17 +184,16 @@ private void writeExpiredPage(HttpServletResponse resp, AccessRule accessRule)
181184
.apply(Map.of("accessRule", accessRule), resp.getWriter());
182185
}
183186

184-
private static String firstPageAsBase64String(Path pdfPath) throws IOException {
185-
String base64Pdf;
187+
private static String firstPageAsBase64Jpeg(Path pdfPath) throws IOException {
188+
String base64Jpeg;
186189
try (PDDocument load = Loader.loadPDF(pdfPath.toFile())) {
187-
PageExtractor pageExtractor = new PageExtractor(load, 1, 1);
188-
try (PDDocument pdDocument = pageExtractor.extract()) {
189-
ByteArrayOutputStream baos = new ByteArrayOutputStream();
190-
pdDocument.save(baos);
191-
base64Pdf = Base64.getEncoder().encodeToString(baos.toByteArray());
192-
}
190+
PDFRenderer pdfRenderer = new PDFRenderer(load);
191+
BufferedImage bim = pdfRenderer.renderImageWithDPI(0, 300, ImageType.RGB);
192+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
193+
ImageIO.write(bim, "JPEG", baos);
194+
base64Jpeg = Base64.getEncoder().encodeToString(baos.toByteArray());
193195
}
194-
return base64Pdf;
196+
return base64Jpeg;
195197
}
196198

197199
private static String readPart(Part req) throws IOException {

src/main/resources/static/docs/preview.hbs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
</head>
4343
<body onload="document.getElementById('id-form').style.opacity=1">
4444
<main>
45-
<div id="id-form">
45+
<div id="id-form" style="z-index: 999">
4646
<div>
4747
<p>
4848
Please enter your email to get access to the document.
@@ -75,8 +75,9 @@
7575
</div>
7676

7777
</div>
78-
<div style="max-height: 100vh; overflow: hidden">
79-
{{> organism/pdfCanvas.hbs}}
78+
<div style="max-height: 100vh; overflow: hidden; display: flex; flex-direction: column; align-items: center;">
79+
<img style="display:block; height:100vh; -webkit-filter: blur(2px); filter: blur(2px);"
80+
src="data:image/jpeg;base64, {{base64Jpeg}}"/>
8081
</div>
8182
</main>
8283
<div style=" position: absolute;

src/main/resources/static/molecule/footer.hbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
padding: 1rem;
1515
position: relative;
1616
margin-top: auto;
17+
z-index: 999;
1718
}
1819
footer a {
1920
color: #eb5d10;

0 commit comments

Comments
 (0)