#jspdf-autotable
#jspdf-автотаблица
Вопрос:
Здравствуйте, я пытаюсь настроить свой PDF-документ. Я использую Javascript непосредственно для его создания.
doc.autoTable({
head: [['Name', 'Email', 'Country']],
body: [
['${MyVariable1}', '${MyVariable2}', '${MyVariable3}'],
],
})
Но теперь одна из моих переменных имеет содержимое HTML… как я могу добавить его в тело и прочитать как HTML?
Возможно ли это?
Заранее спасибо
Ответ №1:
Это невозможно реализовать с jspdf autotable
помощью библиотеки. Но я создал другое возможное решение, которое решает вашу проблему.
Сначала вам нужно создать свою таблицу. Я использовал jquery, но вы можете использовать для этого ванильный js:
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
</body>
<footer>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
var response = [
{
"Name":"test",
"Email":"test@example.com",
"Country":"Canada"
},
{
"Name":"test2",
"Email":"test2@example.com",
"Country":"<div style='color: red'>USA</div>"
}
];
$(function() {
var $table = $('<table>');
var $tbody = $('<tbody>');
var $thead = $('<thead>');
$.each(['Name', 'Email', 'Country'], function(i, item) {
$thead.append(
$('<th>').html(item),
)
});
$table.append($thead);
$.each(response, function(i, item) {
$('<tr>').append(
$('<td>').html(item.Name),
$('<td>').html(item.Email),
$('<td>').html(item.Country)
).appendTo($tbody);
});
$table.append($tbody)
$.ajax({
type: "POST",
url: 'http://localhost:3000/convert',
data: {
htmlBody: $table.prop('outerHTML')
},
complete: function (status) {
window.open('http://localhost:3000/download')
},
dataType: 'json'
});
});
</script>
</footer>
</html>
После этого вы можете создать простой сервер node js, который преобразует ваш HTML-код в pdf:
var express = require('express');
var cors = require('cors');
var app = express();
var port = 3000
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
var pdf = require('html-pdf');
var fs = require('fs');
app.post('/convert', function(req, res, next) {
pdf.create(req.body.htmlBody).toStream(function(err, stream){
stream.pipe(fs.createWriteStream('./test.pdf'));
res.send(200)
});
});
app.get("/download", function (req, res) {
res.download("./test.pdf");
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
});
Комментарии:
1. Спасибо за ваш ответ… в этом случае я бы предпочел изменить всю структуру своего кода и сделать его полным HTML и продолжать использовать jspdf autotable… дело в том, что у меня есть большой большой PDF-файл … и только одна переменная содержит HTML-код, поэтому мне было интересно, есть ли какие-либо решения… Еще раз спасибо!!