Функция на JavaScript для экспорта указанной таблицы со страницы сайта в PDF-файл с помощью библиотеки Pdfmake. Сохраняет текст на кириллице.
Функция экспорта таблицы в PDF
Функция на JavaScript для экспорта таблицы с HTML-страницы в PDF-файл:
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
function generatePDF() { const table = document.getElementById("myTable"); const rows = table.querySelectorAll("tr"); // Извлечение данных из таблицы const body = []; rows.forEach((row, rowIndex) => { const cells = row.querySelectorAll(rowIndex === 0 ? "th" : "td"); const rowData = Array.from(cells).map(cell => cell.innerText); body.push(rowData); }); // Определение структуры и стилей PDF-документа const docDefinition = { content: [ { text: 'Экспорт таблицы', style: 'header' }, { table: { headerRows: 1, // Mark the first row as a header body: body }, layout: 'lightHorizontalLines' // Optional table layout } ], styles: { header: { fontSize: 18, bold: true, margin: [0, 0, 0, 10] }, tableHeader: { // Style for table headers bold: true, fontSize: 12, color: 'black' } }, defaultStyle: { fontSize: 10 } }; // Применение стиля к первой строке таблицы docDefinition.content[1].table.body[0] = docDefinition.content[1].table.body[0].map(text => ({ text: text, style: 'tableHeader' })); // Генерация и загрузка PDF-файла pdfMake.createPdf(docDefinition).download("table.pdf"); } |
Этот скрипт предполагает наличие таблицы с ID myTable
на html-странице. Когда пользователь нажимает кнопку, таблица с html-страницы сохраняется в PDF-файл с именем по умолчанию table.pdf
, который автоматически загружается на устройство.
HTML-страница для тестирования
Пример HTML-страницы для тестирования функции на JavaScript для экспорта таблицы в PDF-файл:
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 35 36 37 38 39 40 41 42 |
<!DOCTYPE html> <html lang="ru-RU"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Экспорт HTML-таблицы в PD</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.5/pdfmake.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.5/vfs_fonts.js"></script> <script src="C:\Test\export-table-pdf.js" defer></script> </head> <body> <h1>Экспорт HTML-таблицы в PDF</h1> <table id="myTable" border="1" style="border-collapse: collapse; width: 100%;"> <thead> <tr> <th>Категория</th> <th>Группа</th> <th>Товар</th> </tr> </thead> <tbody> <tr> <td>Смартфоны и планшеты</td> <td>Смартфоны</td> <td>Смартфон Xiaomi Redmi Note 13</td> </tr> <tr> <td>Техника для кухни</td> <td>Стиральные машины</td> <td>Стиральная машина LG F2J3NS2W</td> </tr> <tr> <td>Инструменты для ремонта</td> <td>Шуруповерты</td> <td>Дрель-шуруповерт METABO BS 18</td> </tr> </tbody> </table> <br> <button onclick="generatePDF()">Скачать PDF</button> </body> </html> |
Использование библиотеки Pdfmake позволяет экспортировать в PDF-файл текст из таблицы на кириллице.
Тестирование экспорта таблицы
Для тестирования функции на JavaScript для экспорта таблицы в PDF-файл необходимы следующие действия:
- Создайте папку
Test
в каталогеC:
. - Создайте в папке
Test
текстовый файл с именемexport-table-pdf.js
и вставьте в него код функции. - Создайте в папке
Test
текстовый файл с именемexample-export-table-pdf.html
и вставьте в него код HTML-страницы для тестирования.
Теперь вы можете открыть файл example-export-table-pdf.html
(он откроется в браузере по умолчанию), нажать кнопку Скачать PDF
и увидеть результат работы.
Приведенный код для экспорта таблицы в PDF-файл успешно протестирован на странице сайта WordPress. Главное, подобрать уникальный ID для таблицы, которая должна быть сохранена в PDF.
Ну и конечно же, для тестирования на WordPress или на других CMS, необходимо убрать из приведенного примера кода лишние html-теги, которые уже присутствуют на странице, сгенерированной CMS.
Еще один вариант экспорта
Этот код позволяет не выносить функцию JavaScript в отдельный файл и дает возможность задавать параметры экспорта непосредственно на HTML-странице:
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
<!DOCTYPE html> <html lang="ru-RU"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Экспорт HTML-таблицы в PDF</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.5/pdfmake.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.5/vfs_fonts.js"></script> </head> <body> <h1>Экспорт HTML-таблицы в PDF</h1> <table id="myTable" border="1" style="border-collapse: collapse; width: 100%;"> <thead> <tr> <th>Категория</th> <th>Группа</th> <th>Товар</th> </tr> </thead> <tbody> <tr> <td>Смартфоны и планшеты</td> <td>Смартфоны</td> <td>Смартфон Xiaomi Redmi Note 13</td> </tr> <tr> <td>Техника для кухни</td> <td>Стиральные машины</td> <td>Стиральная машина LG F2J3NS2W</td> </tr> <tr> <td>Инструменты для ремонта</td> <td>Шуруповерты</td> <td>Дрель-шуруповерт METABO BS 18</td> </tr> </tbody> </table> <br> <button id="downloadPdfButton">Download PDF</button> <script> // Привязка функции generatePDF к событию click кнопки downloadPdfButton document.getElementById("downloadPdfButton").addEventListener("click", generatePDF); function generatePDF() { const table = document.getElementById("myTable"); const rows = table.querySelectorAll("tr"); // Извлечение данных из таблицы const body = []; rows.forEach((row, rowIndex) => { const cells = row.querySelectorAll(rowIndex === 0 ? "th" : "td"); const rowData = Array.from(cells).map(cell => ({ text: cell.innerText, style: rowIndex === 0 ? "tableHeader" : "tableBody" })); body.push(rowData); }); // Определение структуры и стилей PDF-документа const docDefinition = { content: [ { text: 'Table Export', style: 'header' }, { table: { headerRows: 1, // Specify the first row as a header body: body }, layout: 'lightHorizontalLines' // Optional: adds gridlines for the table } ], styles: { header: { fontSize: 18, bold: true, margin: [0, 0, 0, 10] }, tableHeader: { // Style for the table header row bold: true, fontSize: 12, color: 'black' }, tableBody: { // Style for the table body rows fontSize: 10, color: 'black' } } }; // Генерация и загрузка PDF-файла с именем table.pdf pdfMake.createPdf(docDefinition).download("table.pdf"); } </script> </body> </html> |
Чтобы этот код работал на странице сайта WordPress, между тегами <script> </script>
не должно быть пропущенных строк.
Ну и конечно же, для тестирования на WordPress или на других CMS, необходимо убрать из приведенного примера кода лишние html-теги, которые уже присутствуют на странице, сгенерированной CMS.
Смотрите также, как экспортировать текст в текстовый файл и как экспортировать текст в PDF-файл.