Skip to content

Instantly share code, notes, and snippets.

@dpaluy
Last active April 26, 2025 03:25
Show Gist options
  • Save dpaluy/74258794f7930401cc27262e0ea794dd to your computer and use it in GitHub Desktop.
Save dpaluy/74258794f7930401cc27262e0ea794dd to your computer and use it in GitHub Desktop.
Download view only protected PDF from Google Drive

Step by step guide to downloading protected PDF from Google Drive

  1. Open the document in Google Docs
  2. Scroll to the bottom of the document, so all the pages are present
  3. Open Developer Tools on separate window and choose the Console tab
  4. Paste the code
  5. Have fun!
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);
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);
@kmiharu09
Copy link

@kmiharu09 - of all the methods I tried, the following was the one that worked. Just use the below chrome extension and set the time delay for screenshot for every page to 1000ms, to provide sufficient time for the page to load completely. Good luck!

https://chromewebstore.google.com/detail/document-preview-exporter/npapjbliocdhineglcjkmmmaddpgeono

this one worked for me

https://github.com/mhsohan/How-to-download-protected-view-only-files-from-google-drive-

but i had to clear cookies and cache and use firefox. I also zoomed to 120% on pdf. It worked. The pdf was almost 1600 pages.

@LilaSmith11
Copy link

Thanks for sharing.

@deirvlon
Copy link

It is awesome solution!
While i was using this script I noticed that pdf provided is low resolution,I come up with new script to save high quality
images of each page

(function() {
   let elements = document.getElementsByTagName("img");

   for (let i = 0; i < elements.length; i++) {
       let img = elements[i];
       console.log("Processing img ", img);

       // Create a canvas to draw the image
       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/png");

       // Create a download link
       let link = document.createElement('a');
       link.href = imgData;
       link.download = `image_${i + 1}.png`;
       document.body.appendChild(link);
       link.click();
       document.body.removeChild(link);

       console.log(`Image ${i + 1} downloaded`);
   }
})();

@Hanito666
Copy link

let trustedURL;
if (window.trustedTypes && trustedTypes.createPolicy) {
const policy = trustedTypes.createPolicy('myPolicy', {
createScriptURL: (input) => {
return input;
}
});
trustedURL = policy.createScriptURL('https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js');
} else {
trustedURL = 'https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js';
}

// Load the jsPDF library using the trusted URL.
let jspdf = document.createElement("script");
jspdf.onload = function () {
// Generate a PDF from images with "blob:" sources.
let pdf = new jsPDF();
let elements = document.getElementsByTagName("img");
for (let i = 0; i < elements.length; i++) {
let img = elements[i];
if (!/^blob:/.test(img.src)) {
continue;
}
let canvasElement = document.createElement('canvas');
let con = canvasElement.getContext("2d");
canvasElement.width = img.width;
canvasElement.height = img.height;
con.drawImage(img, 0, 0, img.width, img.height);
let imgData = canvasElement.toDataURL("image/jpeg", 1.0);
pdf.addImage(imgData, 'JPEG', 0, 0);
if (i !== elements.length - 1) {
pdf.addPage();
}
}

// Download the generated PDF.
pdf.save("download.pdf");

};
jspdf.src = trustedURL;
document.body.appendChild(jspdf);

This actually works!

@sardarmohsinsaghir
Copy link

Its missing pages why?

@demon19851027
Copy link

Скрипт прикольный, но если в PDF присутствуют ссылки, то они не доступны!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment