Domanda Google Drive scaricare e stampare documenti di sola lettura

Stato
Discussione chiusa ad ulteriori risposte.

cirippo

Utente Silver
5 Gennaio 2010
34
13
1
65
Ultima modifica:
Ciao a tutti! Come da titolo avrei bisogno di scaricare e stampare documenti da Google Drive impostati come sola lettura (no download, no stampa direttamente da drive). O meglio, avrei bisogno di un metodo più efficace di quello che uso già e che vi spiegherò più brevemente possibile.



Metodo 1 (codice JavaScript)

Apro il documento di mio interesse, ad esempio questo, apro ispeziona elemento, poi Crtl + R per refreshare la pagina. In seguito sul pannello vado in Network filtrando i risultati con "img". Così facendo ottengo le singole pagine come immagini (di default 800px sul lato corto): carico tutto il documento scorrendo con il tasto Pag Giù finché il numero dei risultati nella ricerca (in Network) non combacia con il numero di pagine. Dopodiché mi sposto su Console e inietto questo codice
JavaScript:
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);

che creerà e scaricherà in automatico un PDF sul mio desktop.

PRO
  • metodo veloce
  • quasi completamente automatico
CONTRO
  • documento di grandi dimensioni (pesa più del singolo file presente su drive, la cui dimensione si può vedere sempre in basso nel pannello dell'ispeziona elemento)
  • file compresso. Nonostante le grosse dimensioni, la qualità è minore. Probabilmente tutto questo è dovuto all'elaborazione jsPDF.

Metodo 2 (manuale)

Prendo come esempio sempre il file precedente:

Come prima, apro il documento in ispeziona elemento, apro Network, filtro per "img", faccio clic destro sul primo risultato poi "apri in un'altra scheda". Ottengo un link simile a questo
Codice:
https://drive.google.com/viewerng/img?id=ACFrOgAumXriCxnxlronHRRx5viIm19A8xQZUnMUmv8pNuKIfr1wTeOkF_ZQBMeNjmbucCC_YqMFE6aGrjUXJANYNb15KsF6pPOWd38VB6x1v6jPLxLQLgKV9Ix3076Ek02h3P2J86pLIf0yIk8C&authuser=3&page=0&skiphighlight=true&w=800&webp=true

Modifico l'ultima parte togliendo "skiphighlight" e "webp". Variando il numero corrispondente a w= posso variare la risoluzione del documento. Variando il numero in page= vario il numero di pagina (partendo da 0). Dopo questi accorgimenti avrò questo link:
Codice:
 https://drive.google.com/viewerng/img?id=ACFrOgAumXriCxnxlronHRRx5viIm19A8xQZUnMUmv8pNuKIfr1wTeOkF_ZQBMeNjmbucCC_YqMFE6aGrjUXJANYNb15KsF6pPOWd38VB6x1v6jPLxLQLgKV9Ix3076Ek02h3P2J86pLIf0yIk8C&authuser=3&page=0&w=1600
.

In questo metodo di volta in volta aumento di 1 il numero in page= nel link, premo invio, poi clic destro sull'immagine e la salvo come PNG in una cartella a piacimento. Dopo aver scaricato tutti i PNG del file creo un PDF.

PRO
  • file di dimensioni ridotte
  • ottima qualità
  • personalizzazione del documento (variare la qualità e decidere se lasciare la compressione webp per ridurre ulteriormente le dimensioni finali del file)
CONTRO
  • metodo lentissimo, applicabile per file di max 50 pagine


E' possibile utilizzare un codice JavaScript per scaricare i singoli PNG in modo automatico? Se sì, qualcuno di voi saprebbe compilarne uno? Poi ci penserò io a creare il PDF. Magari anche uno script o qualcosa del genere (purtroppo non è il mio campo, io vado a tentativi sgraziati come avete visto nel secondo metodo) in cui io inserisco il link con i parametri da me scelti che si limita ad incrementare di 1 il valore relativo alla pagina ed avviare automaticamente il download del PNG in una cartella a scelta. Molti studenti universitari vi saranno grati in eterno!

Purtroppo con il primo metodo ho provato in tutti i modi ad avere un file di piccole dimensioni e di alta qualità, ma l'elaborazione del file di jsPDF fa tutto l'opposto.

Grazie!
 
E' possibile utilizzare un codice JavaScript per scaricare i singoli PNG in modo automatico? Se sì, qualcuno di voi saprebbe compilarne uno? Poi ci penserò io a creare il PDF. Magari anche uno script o qualcosa del genere (purtroppo non è il mio campo, io vado a tentativi sgraziati come avete visto nel secondo metodo) in cui io inserisco il link con i parametri da me scelti che si limita ad incrementare di 1 il valore relativo alla pagina ed avviare automaticamente il download del PNG in una cartella a scelta. Molti studenti universitari vi saranno grati in eterno!

Purtroppo con il primo metodo ho provato in tutti i modi ad avere un file di piccole dimensioni e di alta qualità, ma l'elaborazione del file di jsPDF fa tutto l'opposto.

Grazie!

Il mio suggerimento come script JS per evitare di trovarti in download 50+ immagini simultaneamente che alcuni browser potrebbero bloccare come spam, anche se triggerato da console, e' quello di richiedere le immagini con xhr, aggiungere poi l'immagine in un file zip (con zip.js o JSZip) e specificare come nome il numero della pagina (1.png), quando hai finito forzi il download del file zip generato che conterra' tutte le tue pagine.
 
  • Mi piace
Reazioni: cirippo
Il mio suggerimento come script JS per evitare di trovarti in download 50+ immagini simultaneamente che alcuni browser potrebbero bloccare come spam, anche se triggerato da console, e' quello di richiedere le immagini con xhr, aggiungere poi l'immagine in un file zip (con zip.js o JSZip) e specificare come nome il numero della pagina (1.png), quando hai finito forzi il download del file zip generato che conterra' tutte le tue pagine.

Ti ringrazio per la risposta. Cortesemente riusciresti a fare uno schizzo del codice da inserire nella console tramite questo metodo, se non ti dispiace? Te ne sarei veramente grato!
 
Ultima modifica:
Pensavo ad una cosa del genere, ovviamente molto grezzo usando JSZip.

JavaScript:
var zip = new JSZip();
var maxRequests = 50;
var processed = 0;
function createZip() {
  zip.generateAsync({type:"blob"})
    .then(function(content) {
        saveAs(content, "archivio_completo.zip");
    });
}
function getImage(url, number) {
  var xhr = new XMLHttpRequest();
  xhr.onload = () => {
    if (xhr.status === 200) {
        var fileName = number.toString() + ".jpg";
        var result = xhr.response;
        zip.file(fileName, result);
        if (++processed >= maxRequests)
            createZip();
    }
    else
        console.log("Cant get image: " + url);
  };
  xhr.responseType = "arraybuffer";
  xhr.open("GET", url);
  xhr.send();
}

for (var i = 1; i <= maxRequests; i++)
  getImage("https://drive.google.com/blablabla?page=" + i.toString(), i);

Se invece le immagini sono gia' caricate nella pagina invece di fare xhr puoi semplicemente convertire i blob che trovi nei tag img in arraybuffer e metterli nello zip.
 
  • Mi piace
Reazioni: cirippo
ciao Cirippo sto cercando di utilizzare il tuo primo metodo ma non essendo esperto non so cosa intendi o dove trovare: "sul pannello vado in Network " o poi mi sposto in Console"? puoi specificare?
Messaggio unito automaticamente:

ciao Cirippo sto cercando di utilizzare il tuo primo metodo ma non essendo esperto non so cosa intendi o dove trovare: "sul pannello vado in Network " o poi mi sposto in Console"? puoi specificare?
 
Stato
Discussione chiusa ad ulteriori risposte.