Я успешно отправляю запрос get
, который генерирует pdf на сервере, который я сейчас хочу отправить обратно клиенту и загрузить в браузер.Используемая мной генерирующая библиотека npm pdf называется html-pdf и имеет следующие параметры:
pdf.create(html).toFile([filepath, ]function(err, res){
console.log(res.filename);
});
pdf.create('<h1>Hi</h1>').toBuffer(function(err, buffer){
console.log('This is a buffer:', Buffer.isBuffer(buffer));
});
Когда я использую опцию toFile
, файл генерируется правильно,однако, когда я использую опцию toBuffer
и отправляю ее обратно пользователю, полученный pdf будет пустым.
Я отправляю буфер пользователю из моего обработчика ajax следующим образом:
module.exports = function(req, res) {
pdf.create(html).toBuffer(function(err, buffer){
res.setHeader('Content-Disposition', 'attachment; filename=panda.pdf');
res.setHeader('Content-Type', 'application/pdf');
res.send(buffer)
});
};
, который получен на клиенте здесь:
$.get('generatePdf', function(data, status) {
const url = window.URL.createObjectURL(new Blob([data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'file.pdf');
document.body.appendChild(link);
link.click();
})
По какой-то причине загруженный PDF-файл пуст.Кто-нибудь знает, что я могу делать неправильно?
Мой загруженный файл поврежден в соответствии с этим онлайновый валидатор pdf со следующими ошибками:
Результат Документ делаетне соответствует PDF / A.Подробности Проверка файла "file (8) .pdf" на уровень соответствия pdf1.4
Ключевое слово 'xref' не найдено или таблица внешних ссылок искажена.Файл трейлера словаря отсутствует или недействителен.Ключ «Длина» объекта потока неверен.Ошибка в потоке Flate: ошибка данных.Документ не соответствует запрашиваемому стандарту.Формат файла (заголовок, трейлер, объекты, внешние ссылки, потоки) поврежден.Документ не соответствует стандарту PDF 1.4.