es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

VueJs/Capacitor/html2pdf (Note: These are all proper nouns and technical terms, so they do not need to be translated into Spanish)

Quiero exportar un PDF en mi aplicación híbrida (android/web app). La exportación de PDF en la aplicación web es correcta, pero no en la aplicación capacitor de android. He leído la documentación, pero muchos ejemplos son con pdfmake, no con html2pdf.js. Aquí está mi función para crear un PDF en mi componente Vue.js:

Error : /storage/emulated/0/Documents/FL19-11-202110-06-50.pdf: open failed: EACCES (Permission denied)

manisfest.xml:

    <!-- Permisos -->
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

Vue.js:

import { Capacitor } from ‘@capacitor/core’
import { Filesystem, Directory, Encoding } from ‘@capacitor/filesystem’

async egs2pdf () {
this.$store.dispatch(‘setLoading’, true, { root: true })
let egs2PdfComponent = document.getElementById(‘egs2PdfComponent’)
this.opt.filename = this.patient.patientId

if (!Capacitor.isNativePlatform()) {
html2pdf().set(this.opt).from(egs2PdfComponent).save().then(() => {
this.$store.dispatch(‘setLoading’, false, { root: true })
})
} else {
html2pdf()
.set(this.opt)
.from(egs2PdfComponent)
.outputPdf()
.then( pdf => {
Filesystem.requestPermissions()
.then( permission => {
if (permission) {
this.writeCapacitorFile(pdf)
.then(() => {
this.$store.dispatch(‘setLoading’, false, { root: true })
this.$toast.success(“Enregistré dans vos documents !”)
})
.catch(error => {
console.log(error)
this.$toast.success(“Vidda n’a pas la permission d’accéder à vos documents”)
})
}
})
})
}
}
async writeCapacitorFile(pdf) {
await Filesystem.writeFile({
path: ${this.patient.patientId + '.pdf'},
data: pdf,
directory: Directory.Documents,
encoding: Encoding.UTF8,
})
.then(() => {
return true
})
.catch(error => {
return error
})
}

¡Gracias por su ayuda! 🙂

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que hay un problema con los permisos al intentar escribir el archivo PDF en la aplicación de capacitor de Android. El mensaje de error indica que se ha denegado el permiso, por lo que es necesario asegurarse de que la aplicación tenga los permisos apropiados para acceder y escribir archivos.

    El archivo AndroidManifest.xml parece tener los permisos requeridos incluidos, por lo que es posible que haya un problema con la forma en que se solicitan los permisos desde la aplicación.

    En la función egs2pdf(), se llama a la función writeCapacitorFile() para escribir el archivo PDF. Sin embargo, antes de escribir el archivo, es necesario solicitar permiso para acceder al directorio de documentos utilizando Filesystem.requestPermissions(). Si se concede el permiso, la función writeCapacitorFile() debería poder escribir el archivo.

    También es importante tener en cuenta que Capacitor tiene un enfoque diferente para el almacenamiento y acceso de archivos en comparación con las aplicaciones web tradicionales. Puede valer la pena revisar la documentación de Capacitor sobre el almacenamiento y acceso de archivos para asegurarse de que la aplicación sigue las mejores prácticas para Capacitor.

    En general, puede ser útil revisar detenidamente el código y la documentación y posiblemente contactar a la comunidad de Capacitor o a la comunidad de la biblioteca HTML2PDF.js para obtener más ayuda.

Comments are closed.