I’ve had some document that I couldn’t read on Android phone or iPad showing error because of read only mode, that the mobile devices could not handle. I wanted to read it on other devices than the PC, so I wrote a little ‘hack’ in JS.
Note 1: It was tested on Chrome Browser.
Note 2: It converts pages to jpg images. I think it could be done preserving text, but he didn’t have more time for this and jpg solution was sufficient.
Note 3: If you’re getting only part of the document visible, try zooming out your browser and then run the script.
Step by step:
- Open the document in Google Docs
- Scroll to the bottom of the document, so all the pages are present
- Open Developer Tools on separate window and choose the Console tab
- Paste the code below (and hit enter)
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'; /* had to set it like this, because disqus was breaking the link.. */
document.body.appendChild(jspdf);
- Now the PDF should be downloaded
What it does? It iterates trough the document checking for images (Google Drive stores pages as images) then writes it’s contents to a PDF.
Leave a comment if it works for you.