1. Project Clover database Mon Dec 22 2025 14:59:38 CST
  2. Package org.europa.together.application

File OpenPdfRenderer.java

 

Coverage histogram

../../../../img/srcFileCovDistChart10.png
0% of files have more coverage

Code metrics

4
44
15
1
176
144
19
0.43
2.93
15
1.27

Classes

Class Line # Actions
OpenPdfRenderer 29 44 0% 19 0
1.0100%
 

Contributing tests

This file is covered by 12 tests. .

Source view

1    package org.europa.together.application;
2   
3    import java.io.File;
4    import java.io.FileNotFoundException;
5    import java.io.FileOutputStream;
6    import java.io.IOException;
7    import java.io.OutputStream;
8    import java.util.ArrayList;
9    import java.util.List;
10    import org.europa.together.application.internal.PdfDocument;
11    import org.europa.together.application.internal.PdfReplacedElementFactory;
12    import org.europa.together.business.Logger;
13    import org.europa.together.business.PdfRenderer;
14    import org.europa.together.domain.LogLevel;
15    import org.europa.together.utils.StringUtils;
16    import org.jsoup.Jsoup;
17    import org.jsoup.nodes.Document;
18    import org.openpdf.text.pdf.PdfStamper;
19    import org.springframework.stereotype.Repository;
20    import org.xhtmlrenderer.layout.SharedContext;
21    import org.xhtmlrenderer.pdf.ITextRenderer;
22   
23    /**
24    * Implementation of a simple PDF Renderer.
25    * <br>
26    * https://knpcode.com/java-programs/generating-pdf-java-using-openpdf-tutorial/#HelloWorldOpenPDF
27    */
28    @Repository
 
29    public class OpenPdfRenderer implements PdfRenderer {
30   
31    private static final long serialVersionUID = 11L;
32    private static final Logger LOGGER = new LogbackLogger(OpenPdfRenderer.class);
33   
34    //A4
35    private String format = "size: 21cm 29.7cm; margin: 20mm 20mm;";
36   
37    private String title = "";
38    private String subject = "";
39    private String author = "";
40    private String keywords = "";
41   
 
42  7 toggle @Override
43    public PdfDocument loadDocument(final File pdfDocument)
44    throws IOException {
45  4 if (!pdfDocument.exists()) {
46  1 throw new FileNotFoundException();
47    }
48  3 return new PdfDocument(pdfDocument.getAbsolutePath());
49    }
50   
 
51  2 toggle @Override
52    public void writeDocument(final PdfDocument pdf, final String destination)
53    throws IOException, FileNotFoundException {
54  2 PdfStamper pdfStamper = new PdfStamper(pdf, new FileOutputStream(destination));
55  2 pdfStamper.close();
56    }
57   
 
58  1 toggle @Override
59    public PdfDocument removePage(final PdfDocument pdf, final int... pages)
60    throws IOException {
61  1 PdfDocument newPDF = new PdfDocument(pdf);
62  1 int pagesTotal = newPDF.getNumberOfPages();
63  1 List<Integer> allPages = new ArrayList<>(pagesTotal);
64  6 for (int i = 1; i <= pagesTotal; i++) {
65  5 allPages.add(i);
66    }
67  1 for (Integer page : pages) {
68  3 allPages.remove(page);
69    }
70  1 newPDF.selectPages(allPages);
71  1 LOGGER.log("Document contains " + newPDF.getNumberOfPages() + " Pages",
72    LogLevel.DEBUG);
73  1 return newPDF;
74    }
75   
 
76  4 toggle @Override
77    public void renderDocumentFromHtml(final String file, final String template)
78    throws FileNotFoundException, IOException {
79  4 StringBuilder html = new StringBuilder();
80  4 html.append("<html>")
81    .append("<head>")
82    .append("<meta charset=\"UTF-8\" />")
83    .append("<title>").append(
84    StringUtils.escapeXmlCharacters(getTitle())).append("</title>")
85    .append("<meta name=\"author\" content=\"").append(
86    StringUtils.escapeXmlCharacters(getAuthor())).append("\" />")
87    .append("<meta name=\"subject\" content=\"").append(
88    StringUtils.escapeXmlCharacters(getSubject())).append("\" />")
89    .append("<meta name=\"keywords\" content=\"").append(
90    StringUtils.escapeXmlCharacters(getKeywords())).append("\" />")
91    .append("<style>")
92    .append("@page {").append(format).append("}")
93    .append("</style>")
94    .append("</head>")
95    .append("<body>")
96    .append(template)
97    .append("</body></html>");
98   
99  4 Document document = Jsoup.parse(html.toString(), "UTF-8");
100  4 document.outputSettings().syntax(Document.OutputSettings.Syntax.xml);
101  4 LOGGER.log("test", LogLevel.DEBUG);
102  4 try (OutputStream os = new FileOutputStream(file)) {
103  3 ITextRenderer renderer = new ITextRenderer();
104  3 SharedContext sharedContext = renderer.getSharedContext();
105  3 sharedContext.setPrint(true);
106  3 sharedContext.setInteractive(false);
107    //IMAGE
108  3 sharedContext.setReplacedElementFactory(new PdfReplacedElementFactory());
109  3 sharedContext.getTextRenderer().setSmoothingThreshold(0);
110   
111  3 renderer.setDocumentFromString(createWellFormedHtml(html.toString()));
112  3 renderer.layout();
113  3 renderer.createPDF(os);
114    }
115    }
116   
117    //<editor-fold defaultstate="collapsed" desc="Getter / Setter">
 
118  4 toggle @Override
119    public void setAuthor(final String author) {
120  4 this.author = author;
121    }
122   
 
123  4 toggle @Override
124    public void setKeywords(final String keywords) {
125  4 this.keywords = keywords;
126    }
127   
 
128  4 toggle @Override
129    public void setSubject(final String subject) {
130  4 this.subject = subject;
131    }
132   
 
133  4 toggle @Override
134    public void setTitle(final String title) {
135  4 this.title = title;
136    }
137   
 
138  1 toggle @Override
139    public void setFormat(final String format) {
140  1 this.format = format;
141    }
142   
 
143  5 toggle @Override
144    public String getAuthor() {
145  5 return author;
146    }
147   
 
148  5 toggle @Override
149    public String getKeywords() {
150  5 return keywords;
151    }
152   
 
153  5 toggle @Override
154    public String getSubject() {
155  5 return subject;
156    }
157   
 
158  5 toggle @Override
159    public String getTitle() {
160  5 return title;
161    }
162   
 
163  1 toggle @Override
164    public String getFormat() {
165  1 return format;
166    }
167    //</editor-fold>
168   
 
169  3 toggle private String createWellFormedHtml(final String html) {
170  3 Document content = Jsoup.parse(html, "UTF-8");
171  3 content.outputSettings().syntax(
172    Document.OutputSettings.Syntax.xml);
173  3 return content.html();
174    }
175   
176    }