Как использовать bootstrap с xhtml2pdf?
Мне нужно динамически отображать PDF файлы в веб-приложении Django.
Я понимаю, что есть 2 варианта :
Рендеринг файла html-шаблона, затем преобразование его в PDF-файл.
Я использовал библиотеку Python xhtml2pdf.
Проблема в том, что в шаблоне, который я хочу использовать, есть bootstrap, а он не поддерживается xhtml2pdf. Фактически не поддерживается javascript, и генерируемые PDF ужасны.
Я должен сам писать html / css, чего я не хочу.
Как решить эту проблему?
Есть ли альтернативная библиотека?- Преобразование веб-страницы в PDF файл напрямую
У меня тоже была такая проблема. Я решил эту проблему с помощью html2canvas и jspdf.
Вот мой код. И используйте его, модифицируя под себя.
// on click
<script src="{% static '/js/html2canvas.min.js' %}"></script>
<script src="{% static '/js/jspdf.min.js' %}"></script>
<script>
const page = document.getElementById('element that you want to make pdf')
$('#{{save_btn_id}}').click(function () {
html2canvas(page).then(async function (canvas) {
// convert canvas to image
let imgData = canvas.toDataURL('image/png');
let imgWidth = 190; // image width (mm)
let pageHeight = imgWidth * 1.414;
let imgHeight = canvas.height * imgWidth / canvas.width;
let heightLeft = imgHeight;
let margin = 10;
let doc = new jsPDF('p', 'mm');
let position = 0;
doc.addImage(imgData, 'PNG', margin, position, imgWidth, imgHeight);
heightLeft -= pageHeight;
// if page > 1
while (heightLeft >= 20) {
position = heightLeft - imgHeight;
doc.addPage();
doc.addImage(imgData, 'PNG', margin, position, imgWidth, imgHeight);
heightLeft -= pageHeight;
}
doc.save('{{file_name}}-{{docNum}}.pdf');
})
</script>