No puedo entender cómo descargar un PDF desde una hoja de cálculo de Google PDF Export Weblink. Generé una hoja de cálculo de prueba para este caso.
Entiendo que necesito implementar encodeURIComponent y/o "Buffer.from" en el blob, pero como sea que lo haga, solo descarga un PDF roto para mí.
Esto es lo que tengo actualmente en su forma más cruda. ¡Gracias por tu apoyo!
Nodo JS:
const fetch = require('node-fetch'); var url = "https://docs.google.com/spreadsheets/d/1fLjKASR_g5wsvOjjJi6RclqMVd2o_1On-OfimXtId4E/export?exportFormat=pdf&format=pdf&size=A4&fzr=true&gid=477517973&sheetnames=false&printtitle=false&pagenumbers=false&gridlines=false&portrait=true&fitw=true&fith=true&top_margin=0.20&bottom_margin=0.20&left_margin=0.20&right_margin=0.20"; let blob = await fetch(url).then(r => r.blob()); // then send blob variable to javascriptJavaScript:
function downloadURI(name) { var uri = 'data:application/pdf;base64,' + blob; var link = document.createElement('a'); link.download = name; link.href = uri; document.body.appendChild(link); link.click(); document.body.removeChild(link); delete link; } downloadURI("test"+".pdf")Pensé que de var uri = 'data:application/pdf;base64,' + blob; en su script, en este caso, se requiere convertir los datos descargados como base64. Aunque no estoy seguro de la relación entre los scripts entre Node JS: y Javascript: , en su situación, ¿qué tal la siguiente modificación?
let blob = await fetch(url).then(r => r.blob()); let buf = await fetch(url).then((r) => r.arrayBuffer()); const data = Buffer.from(buf).toString("base64"); Por esto, puede utilizar data de la siguiente manera.
var uri = 'data:application/pdf;base64,' + data;Como información adicional, por ejemplo, si desea descargar su hoja de cálculo como un archivo PDF usando solo Javascript, también puede usar el siguiente script. Pero, en este caso, se requiere que la hoja de cálculo se comparta públicamente. Tenga cuidado con esto.
async function downloadURI(name) { var url = "https://docs.google.com/spreadsheets/d/1fLjKASR_g5wsvOjjJi6RclqMVd2o_1On-OfimXtId4E/export?exportFormat=pdf&format=pdf&size=A4&fzr=true&gid=477517973&sheetnames=false&printtitle=false&pagenumbers=false&gridlines=false&portrait=true&fitw=true&fith=true&top_margin=0.20&bottom_margin=0.20&left_margin=0.20&right_margin=0.20"; let blob = await fetch(url).then((r) => r.blob()); var f = new FileReader(); f.readAsDataURL(blob); f.onload = d => { var uri = d.target.result; var link = document.createElement('a'); link.download = name; link.href = uri; document.body.appendChild(link); link.click(); document.body.removeChild(link); delete link; } } downloadURI("test"+".pdf")