Skip to content

Instantly share code, notes, and snippets.

@dpaluy
Last active July 20, 2024 06:28
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);
@kartymail
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

@DP9Hb
Copy link

DP9Hb commented Jun 9, 2024

I've had an experience with a view only PDF journal with lots of text and pictures in which the pages had different orientations (portrait and landscape) 51 pages in total, so I couldn't download this pdf in any easy way as it was cut on some pages due to this.

So the way that worked for me:

  1. Used the GoFullPage extension for your browser. Make sure you zoomed the document to get good resolution and sharp text. I saved as one long PNG file.
  2. Used Photoshop
  • Drop file in Photoshop
  • Tap C (Crop tool). uncheck "Delete cropped pixels" option first in upper row!
  • Make the area the size of the page you want to save
  • Tap Enter to crop the visual canvas to the size of the area.
  • Scroll with the Move tool (V) to fit the page
  • Save page with Ctrl+Shift+Alt+S - dialogue box appears with option to save file. Again, this allows you to choose where you want to save, and each subsequent page will be saved in that directory - all you have to do is name the file.
    And yes, I had to do this for all pages.
  1. Combined all the files into one PDF (I use the IlovePDF site for this). JPG to PDF option

There may be an easier way to save PDF view only file with different page orientations, but this is what worked for me.

@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`);
   }
})();

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