1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.html2pdf.service.impl;
35
36 import java.io.IOException;
37 import java.io.OutputStream;
38 import java.util.HashMap;
39 import java.util.Map;
40
41 import org.apache.pdfbox.pdmodel.PDDocument;
42
43 import com.openhtmltopdf.pdfboxout.PdfRendererBuilder;
44
45 import fr.paris.lutece.plugins.html2pdf.service.IPdfBuilder;
46 import fr.paris.lutece.plugins.html2pdf.service.PdfConverterServiceException;
47 import fr.paris.lutece.plugins.html2pdf.utils.FontBuilder;
48 import fr.paris.lutece.plugins.html2pdf.utils.PDDocumentUtils;
49
50 public class OpenHtmlToPdfBuilder implements IPdfBuilder
51 {
52
53 public static final String KEY_FONT_PATH = "PathFont";
54 public static final String KEY_PRODUCER = "Producer";
55 public static final String BASE_DOCUMENT_URI = "/";
56
57 protected boolean _isEditable = true;
58 protected String _strHtml;
59 private PDDocument _doc = null;
60
61 private static PdfRendererBuilder _pdfRendererbuilder = new PdfRendererBuilder( );
62
63 @Override
64 public IPdfBuilder withHtmlContent( String strHtml )
65 {
66 this._strHtml = strHtml;
67 return this;
68 }
69
70 @Override
71 public OpenHtmlToPdfBuilder notEditable( )
72 {
73 this._isEditable = false;
74 return this;
75 }
76
77 @Override
78 public OpenHtmlToPdfBuilder withOptions( Map<String, String> mapOptions )
79 {
80
81 if ( mapOptions.containsKey( KEY_FONT_PATH ) )
82 {
83 FontBuilder.addFontToRender( _pdfRendererbuilder, mapOptions.get( KEY_FONT_PATH ) );
84 }
85
86
87 _pdfRendererbuilder.useFastMode( );
88
89 return this;
90 }
91
92 @Override
93 public void render( OutputStream out ) throws PdfConverterServiceException
94 {
95
96 try
97 {
98
99 _pdfRendererbuilder.withHtmlContent( _strHtml, BASE_DOCUMENT_URI );
100
101
102 _doc = PDDocumentUtils.convertToPDDocument( _pdfRendererbuilder );
103
104
105 if ( !_isEditable )
106 {
107 PDDocumentUtils.convertToNotEditablePdf( _doc );
108 }
109
110
111 _doc.save( out );
112 _doc.close( );
113 }
114 catch( IOException e )
115 {
116 throw new PdfConverterServiceException( e.getMessage( ), e );
117 }
118
119 }
120
121 @Override
122 public String getName( )
123 {
124 return "OpenHtml2Pdf Builder";
125 }
126
127 @Override
128 public IPdfBuilder reset( )
129 {
130 this._isEditable = true;
131 this._strHtml = null;
132 return this;
133 }
134
135 }