Pdfkit Does Not Style PDFs

pdfkit does not load css and JavaScript

To generate URLs for static files, use the special 'static' endpoint name: http://flask.pocoo.org/docs/0.10/quickstart/#static-files

<link href="{{ url_for('static', filename='css/bootstrap.css') }}" rel="stylesheet" >
<link href="{{ url_for('static', filename='css/bootstrap-theme.css') }}" rel="stylesheet">

Update:
Using _external=True may also fix the issue by providing an absolute url. eg:

<link href="{{ url_for('static', filename='css/bootstrap.css', _external=True) }}" rel="stylesheet" >

pdfkit generates small scaled pdfs

The problem was about setting the dpi parameter for pdfkit.

So if you encounter the same problem, just set the dpi according to your need. For me, this what I was needed

options = {
'page-size': 'A4',
'dpi': 400
}

Pdfkit Html to pdf not working as expected in python

I finally manage to get the summary next to the requests. You have to use a table in your html. Here is an example below. It is working, the width of the two columns are not perfect, so you can just play around with the width paramaters (I removed it from the html for now):

<html>
<h1> Performance report for date: 2018-05-27 </h1> <br><br> <div style="display: flex;
flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px;">
<table style="width:100%">
<tr>
<th>
<div style=" position: relative;
width: 100%;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
flex: 0 0 75%;
max-width: 60%;

">
<div style="background-color: #fff; position: relative;
margin-bottom: 1.5rem;
border: 0;
border-radius: 0.2rem;
box-shadow: 0 0 2px rgba(0, 0, 0, 0.15);
margin-left: auto !important;
margin-right: auto !important;
padding-top: 0 !important;">
<div style=" padding: 0.75rem 1.25rem;
border-bottom: 1px solid transparent;
font-weight: 500;background: #F0F8FF;">Requests (%)</div>
<div style="padding: 1.25rem;padding-left: 0.5rem !important;padding-right: 0 !important;">
<img src="cid:request_offload">
</div>
</div>
</th>
<th>
</div>
<div style="position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;flex: 0 0 25%;
max-width: 20%;">
<div style="background-color: #fff; position: relative;
margin-bottom: 1.5rem;
border: 0;
border-radius: 0.2rem;
box-shadow: 0 0 2px rgba(0, 0, 0, 0.15);
margin-left: auto !important;
margin-right: auto !important;
padding-top: 0 !important;">
<div style=" padding: 0.75rem 1.25rem;
border-bottom: 1px solid transparent;
font-weight: 500;background: #F0F8FF;">Summary</div>
<div style="padding: 1.25rem;padding-left: 1rem !important;
padding-right: 1rem !important;height: 245px; box-sizing: border-box;">
<div style="display: flex;
flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px;">
<div style=" position: relative;
width: 100%;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;">
<div style="display: flex;
flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px;">
<div style="position: relative;
width: 100%;
min-height: 1px;
padding-right: 15px;
padding-left: 15px; font-size: 14px;
font-weight: bold; flex: 0 0 50%;
max-width: 50%;">Total:</div>
<div style="position: relative;
width: 100%;
min-height: 1px;
padding-right: 15px;
padding-left: 15px; flex: 0 0 50%;
max-width: 50%;">1.03B </div>
</div>
<div style=" display: flex; flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px; margin-bottom: 1rem !important;margin-top: 1rem !important;"></div>
<div style="display: flex;
flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px;">
<div style="position: relative;
width: 100%;
min-height: 1px;
padding-right: 15px;
padding-left: 15px; font-size: 14px;
font-weight: bold; flex: 0 0 50%;
max-width: 50%;">Peak:</div>
<div style="position: relative;
width: 100%;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;flex: 0 0 50%;
max-width: 50%;">2.48 %</div>
</div>
<div style="display: flex; margin-top: 0 !important;
flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px;">
<div style="position: relative;
width: 100%;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;flex: 0 0 100%;
max-width: 100%;">
<small style="color: #808080;font-weight: normal !important;
font-size: 85% !important;">at Sun, 27 May 2018 00:50:00 -0000</small>
</div>
</div>
<div style=" display: flex; flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px; margin-bottom: 1rem !important;margin-top: 1rem !important;"></div>
<div style="display: flex;
flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px;">
<div style="position: relative;
width: 100%;
min-height: 1px;
padding-right: 15px;
padding-left: 15px; font-size: 14px;
font-weight: bold; flex: 0 0 50%;
max-width: 50%;">Least:</div>
<div style="position: relative;
width: 100%;
min-height: 1px;
padding-right: 15px;
padding-left: 15px; flex: 0 0 50%;
max-width: 50%;">0.45 %</div>
</div>
<div style="display: flex; margin-top: 0 !important;
flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px;">
<div style="position: relative;
width: 100%;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;flex: 0 0 100%;
max-width: 100%;">
<small style="color: #808080;font-weight: normal !important;
font-size: 85% !important;">at Sun, 27 May 2018 13:15:00 -0000</small>
</div>
</div>
<div style=" display: flex; flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px; margin-bottom: 1rem !important;margin-top: 1rem !important;"></div>
</div>
</div>
</div>
</div>

</div>
</div>
</th>
</tr>
</table>
</html>

Two rendered empty PDFs are not identical

I believe that the bytes may be slightly different due to the creation time being factored into the Buffer somehow. When I used mockdate(https://www.npmjs.com/package/mockdate) to fix 'now', I ended up getting consistent Buffers.



Related Topics



Leave a reply



Submit