Скрипт скачивания защищенного файла PDF с Google Drive

Потребовалось на работе качнуть защищенный PDF с GoogleDrive. Как оказалось такие файлы там хранятся только виде картинок и скачать соответственно можно только сами картинки из кеша браузера (которые туда попадают только при просмотре страницы. Т.е. не весь документ за 1 раз, поэтому надо пролистать все страницы, чтобы они упали в кеш)
Ну и далее надо выполнить в консоли разработчика скрипт:

let jspdf = document.createElement("script");
jspdf.onload = function () {
let pdf = new jsPDF();
let elements = document.getElementsByTagName("img");
for (let i in elements) {
let img = elements[i];
console.log("add img ", img);
if (!/^blob:/.test(img.src)) {
console.log("invalid src");
continue;
}
let can = document.createElement('canvas');
let con = can.getContext("2d");
can.width = img.width;
can.height = img.height;
con.drawImage(img, 0, 0, img.width, img.height);
let imgData = can.toDataURL("image/jpeg", 1.0);
pdf.addImage(imgData, 'JPEG', 0, 0);
pdf.addPage();
}
pdf.save("download.pdf");
};
jspdf.src = 'https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.debug.js';
document.body.appendChild(jspdf);

Есть один косяк с этим скриптом. Если ориентация страницы документа в альбомном виде, то этот альбомный вид масштабируется до портретного. У jsPDF есть метод addPage() который первым строчным аргументом принимает какого формата страница (а0, а1, … а4 … etc) и вторым аргументом принимает ориентацию страницы (portrait/landscape)

Я попытался немного поправить скрипт, чтобы он определял ориентацию страницы по ширине-высоте получаемой картинки, но что-то пошло не так. И хоть страницы альбомного вида появились в документе, но картинки были все равно неверно отмасштабированы, плюс появился глюк: обычная портретная страница обрезанная встала на альбомную.

Я в js не особо силен, и если кто-то сможет поправить скрипт чтобы он работал правильно — буду только рад.
Поделиться ссылкой: