From 08a09e29f16a6419e10ab3af2efbeda69cb84694 Mon Sep 17 00:00:00 2001 From: Gerald Palfinger Date: Tue, 11 Jan 2022 10:51:08 +0100 Subject: Change placeholder image output from PNG to JPG Microsoft Word's "print to pdf" function lowers the quality of png images used in a word document. This leads to a failure on pdf-as placeholder detection using the resulting pdf document. --- .../web/servlets/PlaceholderGeneratorServlet.java | 29 ++++++++-------------- 1 file changed, 11 insertions(+), 18 deletions(-) (limited to 'pdf-as-web') diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/PlaceholderGeneratorServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/PlaceholderGeneratorServlet.java index a35269d2..1036ef0b 100644 --- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/PlaceholderGeneratorServlet.java +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/PlaceholderGeneratorServlet.java @@ -15,7 +15,6 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.commons.io.IOUtils; import org.apache.http.HttpStatus; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,9 +28,6 @@ import at.gv.egiz.pdfas.web.helper.QRCodeGenerator; public class PlaceholderGeneratorServlet extends HttpServlet implements PlaceholderExtractorConstants { - /** - * - */ private static final long serialVersionUID = -5854130802422496977L; public static final String PARAM_ID = "id"; @@ -55,10 +51,9 @@ public class PlaceholderGeneratorServlet extends HttpServlet implements Placehol this.doProcess(req, resp); } - protected void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - + protected void doProcess(HttpServletRequest req, HttpServletResponse resp) throws IOException { if(!WebConfiguration.isQRPlaceholderGenerator()) { - logger.info("QR Placeholder is disabled by configuration (see {})" + WebConfiguration.PLACEHOLDER_GENERATOR_ENABLED); + logger.info("QR Placeholder is disabled by configuration (see {})", WebConfiguration.PLACEHOLDER_GENERATOR_ENABLED); resp.sendError(HttpStatus.SC_NOT_FOUND); return; } @@ -74,7 +69,7 @@ public class PlaceholderGeneratorServlet extends HttpServlet implements Placehol if(id != null && !id.isEmpty()) { id = id.replaceAll("[^0-9]", ""); - if(id != null && !id.isEmpty()) { + if(!id.isEmpty()) { try{ if(id.length()> 5) id = id.substring(0,5); @@ -99,9 +94,9 @@ public class PlaceholderGeneratorServlet extends HttpServlet implements Placehol } } - filename = filename + ".png"; + filename = filename + ".jpg"; - logger.info("generating qr placeholder for '{}' as {}", buildString, filename); + logger.info("Generating QR placeholder for '{}' as {}", buildString, filename); //if(id != null || profile != null) { // We need to generate the image @@ -152,7 +147,7 @@ public class PlaceholderGeneratorServlet extends HttpServlet implements Placehol try { QRCodeGenerator.generateQRCode(buildString, baos, qrSize); } catch (WriterException e) { - logger.warn("Failed to generate QR Code for placeholder generationg", e); + logger.warn("Failed to generate QR Code for placeholder generation", e); resp.sendError(HttpStatus.SC_INTERNAL_SERVER_ERROR); return; } @@ -160,9 +155,8 @@ public class PlaceholderGeneratorServlet extends HttpServlet implements Placehol baos.close(); BufferedImage qr = ImageIO.read(new ByteArrayInputStream(baos.toByteArray())); - BufferedImage off_Image = - new BufferedImage(width, height, - BufferedImage.TYPE_INT_ARGB); + BufferedImage off_Image = new BufferedImage(width, height, + BufferedImage.TYPE_INT_RGB); //use TYPE_INT_ARGB for png, TYPE_INT_RGB for jpg Graphics g = off_Image.getGraphics(); g.setColor(new Color(255,255,255,1)); @@ -188,7 +182,6 @@ public class PlaceholderGeneratorServlet extends HttpServlet implements Placehol int start = (height - textHeight) / 2; if(profile != null && profile.endsWith("_EN")) { - g.drawString("placeholder for the", qrSize + ( 3 * border), start + lineSpace); g.drawString("electronic signature", qrSize + ( 3 * border), start + (2 * lineSpace)); } else { @@ -196,7 +189,6 @@ public class PlaceholderGeneratorServlet extends HttpServlet implements Placehol g.drawString("elektronische Signatur", qrSize + ( 3 * border), start + (2 * lineSpace)); } if(id != null && !id.isEmpty()) { - Font nrFont = new Font(Font.SANS_SERIF, Font.BOLD | Font.ITALIC, 10); g.setFont(nrFont); @@ -204,12 +196,13 @@ public class PlaceholderGeneratorServlet extends HttpServlet implements Placehol } logger.info("serving qr placeholder for '{}'", buildString); - resp.setContentType("image/png"); + resp.setContentType("image/jpeg"); resp.setHeader("Cache-Control", "private, no-store, no-cache, must-revalidate"); resp.setHeader("Pragma", "no-cache"); resp.setHeader ("Content-Disposition", "attachment; filename=\""+filename+"\""); - ImageIO.write(off_Image, "PNG", resp.getOutputStream()); + // Use JPG (instead of PNG) as output format to avoid placeholder being not recognised after printing to PDF in Microsoft Word + ImageIO.write(off_Image, "JPG", resp.getOutputStream()); return; /*} else { // just use the template -- cgit v1.2.3