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 or Use the Shortcut (Shift + Control + J )
- 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.
0 Comments