Quiero usar las API de Google para descargar una diapositiva de Google como una presentación de PowerPoint (ppt o pptx) en nuestro servidor node.js. Configuré la API de Google Drive y creé una diapositiva en la carpeta de mi unidad. Estoy tratando de usar drive.files.export para descargar la diapositiva, pero dado que una diapositiva no es realmente una cosa en Windows o Mac, estoy tratando de convertirla a PowerPoint configurando mimeType en application/vnd.ms-powerpoint :
const { drive } = await Google.getInstance(); const fileId = 'SomeLongTemplateId'; const fileName = 'test slide processing'; console.log('exporting ppt'); const ppt = await drive.files.export( // report.js:343 { fileId, mimeType: 'application/vnd.ms-powerpoint' }, { responseType: 'arraybuffer' } ); return Buffer.from(ppt.data);Sin embargo, esto arroja un error y no parece funcionar:
error: { message: ArrayBuffer { [Uint8Contents]: <7b 0a 20 22 65 72 72 6f 72 22 3a 20 7b 0a 20 20 22 65 72 72 6f 72 73 22 3a 20 5b 0a 20 20 20 7b 0a 20 20 20 20 22 64 6f 6d 61 69 6e 22 3a 20 22 67 6c 6f 62 61 6c 22 2c 0a 20 20 20 20 22 72 65 61 73 6f 6e 22 3a 20 22 62 61 64 52 65 71 75 65 73 74 22 2c 0a 20 20 20 20 22 6d 65 73 73 61 67 65 22 3a 20 ... 195 more bytes>, byteLength: 295 }, stack: 'Error: [object ArrayBuffer]\n' + ' at Gaxios._request (C:\\Users\\rasmu\\Documents\\triggerz\\triggerz\\node_modules\\gaxios\\build\\src\\gaxios.js:129:23)\n' + ' at processTicksAndRejections (internal/process/task_queues.js:95:5)\n' + ' at async JWT.requestAsync (C:\\Users\\rasmu\\Documents\\triggerz\\triggerz\\node_modules\\google-auth-library\\build\\src\\auth\\oauth2client.js:345:18)\n' + ' at async processionSlide (C:\\Users\\rasmu\\Documents\\triggerz\\triggerz\\entity-access\\src\\act\\report.js:343:15)' }, Desafortunadamente, en realidad no dice cuál es el problema, pero definitivamente no funciona. También intenté exportar como pptx usando pptx application/vnd.openxmlformats-officedocument.presentationml.presentation pero esto dio un error similar.
Estoy acostumbrado a exportar archivos PDF usando esta técnica, y funciona de maravilla, la única diferencia es que exporto un documento (documentos de Google) y uso la application/pdf
En la interfaz de usuario web de Google Drive, puedo hacer clic derecho en la diapositiva y elegir "descargar" esto, descarga un archivo pptx que puedo abrir tanto con MS Power Point como con Libre Office. - por lo que me sorprendería mucho si la biblioteca api de google node.js no se puede exportar de la misma manera.
¿Alguna idea de cómo puedo exportar una diapositiva como una presentación que funcione en Windows/Mac?
Puede intentar reemplazar su tipo de responseType para stream como se recomienda en esta referencia: google api nodejs client [Ayuda] El ejemplo de exportación de Google Drive no funciona
const ppt = await drive.files.export( // report.js:343 { fileId, mimeType: 'application/vnd.ms-powerpoint' }, { responseType: 'stream' } ) Una solución alternativa que podría sugerir si la solución anterior aún falla es usar Drive.Files.Get , obtenga el recurso de archivo de su archivo Google Slide usando su ID de archivo. Luego obtenga los enlaces de exportación de su exportLinks preferido.
{ "name": "Untitled presentation", "exportLinks": { "application/vnd.oasis.opendocument.presentation": "https://docs.google.com/feeds/download/presentations/Export?id=13vwP4xQ_nVAHCPCuXI3GQKhMJrQ5goTfX7mh6qP5fKM&exportFormat=odp&resourcekey=0-nwpcI7sa0wRmreOT5Z6RJg", "application/pdf": "https://docs.google.com/feeds/download/presentations/Export?id=13vwP4xQ_nVAHCPCuXI3GQKhMJrQ5goTfX7mh6qP5fKM&exportFormat=pdf&resourcekey=0-nwpcI7sa0wRmreOT5Z6RJg", "application/vnd.openxmlformats-officedocument.presentationml.presentation": "https://docs.google.com/feeds/download/presentations/Export?id=13vwP4xQ_nVAHCPCuXI3GQKhMJrQ5goTfX7mh6qP5fKM&exportFormat=pptx&resourcekey=0-nwpcI7sa0wRmreOT5Z6RJg", "text/plain": "https://docs.google.com/feeds/download/presentations/Export?id=13vwP4xQ_nVAHCPCuXI3GQKhMJrQ5goTfX7mh6qP5fKM&exportFormat=txt&resourcekey=0-nwpcI7sa0wRmreOT5Z6RJg" } }application/vnd.openxmlformats-officedocument.presentationml.presentation como clave. Descargue el archivo usando el enlace. Desafortunadamente, parece que en la etapa actual, cuando vi los formatos de exportación con "Acerca de: obtener" de la API de Drive, el mimeType de application/vnd.google-apps.presentation (Google Slides) se puede exportar a los siguientes mimeTypes.
"application/vnd.google-apps.presentation": [ "application/vnd.oasis.opendocument.presentation", "application/pdf", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "text/plain" ], Por esto, parece que cuando se usa el método de exportación, Google Slides no se puede exportar como application/vnd.ms-powerpoint . Por esto, cuando probé esto, se produce el error. Pero de los formatos de exportación anteriores, se encuentra que cuando se usa el tipo mime de application/vnd.openxmlformats-officedocument.presentationml.presentation , las diapositivas de Google se pueden exportar como PPTX.
Pero a partir de su pregunta, usted dice lo siguiente.
Desafortunadamente, en realidad no dice cuál es el problema, pero definitivamente no funciona. También intenté exportar como pptx usando
pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentationpero esto dio un error similar.
Cuando probé su secuencia de comandos usando mimeType de application/vnd.openxmlformats-officedocument.presentationml.presentation , no se produjo ningún error. Por lo tanto, modifique su script de la siguiente manera y pruébelo nuevamente.
const fileId = 'SomeLongTemplateId'; const fileName = "test slide processing"; console.log("exporting ppt"); const ppt = await drive.files.export( { fileId: fileId, mimeType: "application/vnd.openxmlformats-officedocument.presentationml.presentation", }, { responseType: "arraybuffer" } ); fs.writeFile("sample.pptx", Buffer.from(ppt.data), (err) => { if (err) console.log(err); }); // return Buffer.from(ppt.data);sample.pptx se puede crear y el archivo se puede abrir como archivo PPTX.