#javascript #jspdf #jszip
#javascript #jspdf #jszip
Вопрос:
Я использую jsPDF для создания нескольких PDF-файлов. Есть ли у меня способ сохранить все PDF-файлы в виде одного ZIP-файла через JSZip?
Ответ №1:
Для тех, кто приходит сюда, чтобы найти более прямой ответ на этот вопрос, у меня есть этот пример:
var zip = new JSZip();
angular.forEach ($scope.students, function (student) {
//The createFile() function returns a jsPDF
var doc = createFile(student);
if (typeof doc !== 'undefined') {
try {
zip.file(student.name '.pdf', doc.output('blob'));
}
catch {
console.error('Something went wrong!');
}
}
});
zip.generateAsync({type:'blob'}).then(function(content) {
saveAs(content, 'reports.zip');
});
По сути, zip.file() добавляет новый файл в zip-файл с помощью (name, data) . Вы добавляете документ jsPDF в виде большого двоичного объекта, вызывая doc.output(‘blob’) . Не забудьте добавить «.pdf» в конце имени.
Затем вы создаете zip-файл, вызывая функцию zip.generateAsync(), и сохраняете его, когда он завершает генерацию.
В этом примере я использовал jsPDF, JSZip и FileSaver.js
Комментарии:
1. Вау. Это было решение, которое я искал. У меня отлично работает. Обновление правильного ответа.
Ответ №2:
Помогает ли это? https://gist.github.com/noelvo/4502eea719f83270c8e9
var zip = new JSZip();
var count = 0;
var zipFilename = "zipFilename.zip";
var urls = [
'http://image-url-1',
'http://image-url-2',
'http://image-url-3'
];
urls.forEach(function(url){
var filename = "filename";
// loading a file and add it in a zip file
JSZipUtils.getBinaryContent(url, function (err, data) {
if(err) {
throw err; // or handle the error
}
zip.file(filename, data, {binary:true});
count ;
if (count == urls.length) {
var zipFile = zip.generate({type: "blob"});
saveAs(zipFile, zipFilename);
}
});
});
Комментарии:
1. Как мне использовать выходные данные из jsPDF для этой функции? В настоящее время я использую
doc.save('pdfName');
для загрузки pdf.