This is an internal documentation. There is a good chance you’re looking for something else. See Disclaimer.
Wkhtmltopdf (WebKit)¶
Wkhtmltopdf is an HTML to PDF converter that’s based on the WebKit rendering engine. It is used to create the majority of the PDFs in Nice. In particular, wkhtmltopdf is used for all reports that use an output template where the file format is to “PDF (WebKit)”.
Implementation¶
Within Nice, the class WkHtmlToPdfConverter is responsible for calling wkhtmltopdf (a simple binary). The binary itself is shipped in the wkhtmltopdf-binary package.
Debugging¶
Since Nice 2.24 there is a property called nice2.conversion.wkhtmltopdf.keepTemporaryFiles
.
If set to true
, the intermediate HTML files used to generate a report are kept in the
filesystem permanently.
Enable the property like this:
oc set env -c nice dc/nice nice2.conversion.wkhtmltopdf.keepTemporaryFiles=true
Once enabled, a message is logged for every report generated that looks like this:
2019-11-29 12:55:47 INFO - thread: qtp2013329401-745, logger: nice2.conversion.WkHtmlToPdfConverter
Keeping temporary files after generating a report as requested by the *nice2.conversion.wkhtmltopdf.keepTemporaryFiles* property.
report title: Education history
command args: --quiet --title Education\ history --margin-left 0 --margin-right 0 --margin-top 40.0 --margin-bottom 30.0 --disable-smart-shrinking --page-height 297.0 --page-width 210.0 --disable-local-file-access --allow /tmp/1575028546531-0 --allow /tmp/pd4ml/font --header-html /tmp/1575028546531-0/html-to-pdf-header15648480545421830450.htm --footer-html /tmp/1575028546531-0/html-to-pdf-footer9581000101621298200.htm /tmp/1575028546531-0/html-to-pdf-body2944549560328742079.htm /tmp/1575028546531-0/html-to-pdf-out1697885744425284296.pdf
files:
body (html): /tmp/1575028546531-0/html-to-pdf-body2944549560328742079.htm
header (html): /tmp/1575028546531-0/html-to-pdf-header15648480545421830450.htm
footer (html): /tmp/1575028546531-0/html-to-pdf-footer9581000101621298200.htm
output (pdf): /tmp/1575028546531-0/html-to-pdf-out1697885744425284296.pdf
The html files can now be copied locally for analysis:
oc cp ${POD_NAME}:/tmp/1575028546531-0/ .
Or, alternatively, you can run wkhtmltopdf in the container to investigate possible conversion issues:
# extract wkhtmltopdf binary
unzip -o -d /tmp/ lib/modules/nice2-conversion-module-1.0-SNAPSHOT/lib/ch.tocco.wkhtmltopdf.binary/wkhtmltopdf-binary-*-linux.jar ch/tocco/wkhtmltopdf/binary/wkhtmltopdf
# run wkhtmltopdf
/tmp/ch/tocco/wkhtmltopdf/binary/wkhtmltopdf ${ARGS_FROM_INFO_MESSAGE}
${ARGS_FROM_LOG_MESSAGE} are the arguments listed as command args in the log output above. Arguments are escaped for use in the shell. So, just copy and paste.
Once debugging has been completed the property set earlier can be removed again:
oc set env -c nice dc/nice nice2.conversion.wkhtmltopdf.keepTemporaryFiles-