Как сделать PDF из javascript
Иногда бывает необходимо сохранить в PDF, данные с HTML или какой-то результат вычислений js. Такой вариант вполне подойдет тем, кто не хочет лезть в изучение серверных технологий, позволяющих сделать тоже самое. Итак, описание способа ниже:
Чтобы сохранить данные в PDF с корректной поддержкой кириллицы, лучше использовать библиотеку pdfmake, которая:
- поддерживает кириллицу (при подключении шрифта);
- легко работает с таблицами и JSON-данными;
- не требует серверной части.
Подключение (через CDN)
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/pdfmake.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/vfs_fonts.js"></script>
Создадим HTML-таблицу с данными:
<table id="myTable78">
<tr>
<th>Имя</th>
<th>Город</th>
</tr>
<tr>
<td>Алексей</td>
<td>Москва</td>
</tr>
<tr>
<td>Ольга</td>
<td>Санкт-Петербург</td>
</tr>
</table>
| Имя | Город |
|---|---|
| Алексей | Москва |
| Ольга | Санкт-Петербург |
Добавим кнопку
<button onclick="exportTableToPDF()">Сохранить в PDF</button>
<script>
function exportTableToPDF() {
const table = document.getElementById('myTable78');
const body = [];
for (let row of table.rows) {
const rowData = [];
for (let cell of row.cells) {
rowData.push(cell.innerText);
}
body.push(rowData);
}
const docDefinition = {
content: [
{ text: 'Таблица пользователей', style: 'header' },
{
table: {
body: body
}
}
],
styles: {
header: {
fontSize: 18,
bold: true,
margin: [0, 0, 0, 10]
}
},
defaultStyle: {
font: 'Roboto'
}
};
pdfMake.createPdf(docDefinition).download("table.pdf");
}
</script>
Тесты и проверки
Скачать пример 1
Скачать zip-архивДругой пример собираем PDF из данных JSON
Предположим у нас откуда-то приходят данные в формате JSON или они получаются в процессе обработки нашего скрипта. Для примера будет так, что как будто они у нас есть.
Создадим кнопку
<button onclick="generatePDFfromJSON()">Создать PDF из JSON</button>
Добавим JS
<script>
const jsonData = [
{ name: "Алексей", city: "Москва", age: 32 },
{ name: "Ольга", city: "Санкт-Петербург", age: 28 },
{ name: "Иван", city: "Новосибирск", age: 45 }
];
function generatePDFfromJSON() {
const body = [
['Имя', 'Город', 'Возраст']
];
jsonData.forEach(item => {
body.push([item.name, item.city, item.age.toString()]);
});
const docDefinition = {
content: [
{ text: 'Список пользователей из JSON', style: 'header' },
{
table: {
headerRows: 1,
body: body
}
}
],
styles: {
header: {
fontSize: 18,
bold: true,
margin: [0, 0, 0, 10]
}
},
defaultStyle: {
font: 'Roboto'
}
};
pdfMake.createPdf(docDefinition).download("users-from-json.pdf");
}
</script>
Скачать пример 2
Скачать zip-архив