Buen día amigo. tengo un error en la linea del try catch: pdfDocument.writeTo(new FileOutputStream(file)) el cual arroja un error en el Exception: java.io.FileNotFoundException: /storage/emulated/0/Archivo.pdf: open failed: EPERM (Operation not permitted). Tiene alguna idea de cual sea el problema? gracias.
Saludos. Tendrías que generar una imagen de ese gráfico y posteriormente agregarlo al PDF como imagen. Espero haber aclarado la duda o por lo menos orientarte en tu búsqueda
Hay una librería de gráficas que ya tiene un método para generar la imagen pero no recuerdo cual. Pero de momento se me ocurre que desde el código se haga una captura de pantalla y esta imagen que se genera se muestre en un ImageView, misma que sería la que se insertaria en el PDF. No es lo óptimo pero es una solución, igual voy a investigar cómo se podría hacer y hago un vídeo al respecto.
Saludos, ya que obtienes el string del control por ejemplo del EditText solo concatena ell salto de línea. Por ejemplo: String texto = "hola" texto = texto + " " Espero haber aclarado tu duda
@@dev.xcheko51x TextPaint mTextPaint=new TextPaint(); StaticLayout mTextLayout = new StaticLayout(observaciones.getText().toString(), mTextPaint, canvas.getWidth(), Layout.Alignment.ALIGN_NORMAL, 2.0f, 0.0f, false); int x=50; int y=530; for (String line: observaciones.getText().toString().split(" ")){ canvas.drawText(line,x,y,mTextPaint); y += mTextPaint.descent()-mTextPaint.ascent(); } pero no me funciona
Saludos, en la descripción del video están los enlaces a los dos cursos que tengo en udemy, de igual forma te comparto los enlaces: Aprende Android con Ejemplos: bit.ly/40dIY4m Aprende Compose Android con Ejemplos: bit.ly/3zhiFle
Buenas tardes, Excelente explicación!!! Vi como se creó el archivo. Ahora sería muy bueno si pudiera explicar como visualizarlo desde otra activity. Muchas gracias👍👍
Saludos. Puede ser por qué estás ejecutando la aplicación en un dispositivo con Android 5 o inferior, ya que los permisos al usuario es desde Android 6 en adelante o en su defecto desinstala la aplicación y vuelvela a ejecutar
@@dev.xcheko51x ya lo solucione, el primer programa que hice usando este metodo tenia un version targedSdk 32, en este programa al iniciar si me pedia el permiso para poder abrir y guardar el PDF, el nuevo programa que hice tiene una version targedSdk 33 y ahora ya no sale la ventana por que en automatico se validan los permisos
@dev.xcheko51x buenas noches, he usado sus video de años anteriores y me funciona perfecto la creación del PDF en una tablet Samsung Galaxy, con una aplicación local. Actualmente en otras tablets Huawei mateoad 10 y una Lenovo la aplicación funciona pero no crea el pdf en downloads. Creo no reconoce la ruta con la rutinas creararchivo y getruta, favor si puede enviar alguna sugerencia
Saludos, posiblemente sea los permisos en los vídeos uso un emulador con Android 5 y para Android 6 en adelante de tiene que solicitar los permisos al usuario y que este los acepte o de lo contrario no se podrá acceder a lectura y escritura en el dispositivo. Comparto enlace de la documentación oficial: developer.android.com/training/permissions/requesting?hl=es-419
Saludos, si estás usando un dispositivo o emulador con Android 6 en adelante necesitas pedirle los permisos al usuario, posiblemente eso sea lo que te este dando problemas
Saludos, solo tienes que crear el método y dentro poner las líneas de código que capturan el texto que deseas insertar y generar el PDF. Solo que tienes que estar seguro de la información que vas a agregar ya que generado el PDF no lo puedes modificar, te tocaría capturar todo y volverlo a generar. Espero haberte aclarado tu duda o en su defecto si no es lo que buscabas puedes comentarlo.
amigo hola buenas excelente video pero a la hora de ejecutar me presenta problemas en esta parte pdfDocument.writeTo(new FileOutputStream(file)); si depronto sabes que puede pasar
@@dev.xcheko51x amigooo mil gracias por tu respuesta bueno mira el problema ya lo resolvi creando una carpeta pero ahora el dilema es que esa carpeta mi celular no me la deja ver no se como crear una carpeta que se pueda ver y poder usar en mi propio celular no se si me entiendas mil gracias un saludo
No entiendo por qué tienes que crear una carpeta para que te funcione, pero en todo caso posiblemente se está creando en una ruta que es solo para el SO, intenta usando la siguiente línea: File ruta = new File(context.getExternalFilesDir( Environment.DIRECTORY_DOWNLOADS), "NOMBRE_CARPETA"); Y la de debería crear en descargas la cuál si deberías tener acceso O usa: File ruta = new File(context.getExternalFilesDir(), "NOMBRE_CARPETA"); Y te creara la carpeta en la ruta: Android/data/data/com.tucompany.descargas/NOMBRE_CARPETA
@@dev.xcheko51x hola migo que pena tanta molestia Android/data/data/com.tucompany.descargas/NOMBRE_CARPETA aca lo que me dices es cierto asi queda pero el dilema es que al yo buscar en mi celular esa ruta no me sale nada llego hasta el .data y la carpeta del package no aparece es muy extraño no se ahi que pasa
No sé si ya intentaste con un explorador de archivos que te permita ver las carpetas ocultas, si en tu dispositivo tienes una microsd revisa en las dos fuentes en las carpetas data. O se me ocurre que a lo mejor no se está creando la carpeta como tal si, tú dispositivo tiene Android 6 o superior hay que pedirle los permisos de lectura y escritura al usuario para poder realizar ese tipo de acciones.
Saludos, te comparto el enlace a la documentación donde está el proceso de creación del archivo y de las páginas. developer.android.com/reference/android/graphics/pdf/PdfDocument Igual existe otra librería que permite varias páginas la cual es itextpdf o droidtext Te comparte el vídeo donde uso el último ruclips.net/video/_cxYmwJArK4/видео.html
Buen Dia Estimado dev.xcheko me podrias ayudar con informacion sobre los permisos en android 11 , parece que no me crea el archivo pdf por los permisos nuevos de android 11, felicitaciones por tu canal sigue Adelante
Saludos, creo que la nueva forma de solicitar permisos en Android 11 es solo para algunos casos como localizacion, camara y micrófono, ya que da la opción que dichos permisos tengan un tiempo de vida. Para el caso de lectura y escritura puede ser la forma que se usa para Android 6 en adelante. De todas formas déjame reviso, y hago algunas pruebas para subir video al respecto en caso de ser necesario.
@@dev.xcheko51x buenas noches, he usado sus video de años anteriores y me funciona perfecto la creación del PDF en una tablet Samsung Galaxy, con una aplicación local. Actualmente en otras tablets Huawei mateoad 10 y una Lenovo la aplicación funciona pero no crea el pdf en downloads. Creo no reconoce la ruta con la rutinas creararchivo y getruta, favor si puede enviar alguna sugerencia.
Saludos, posiblemente sea los permisos en los vídeos uso un emulador con Android 5 y para Android 6 en adelante de tiene que solicitar los permisos al usuario y que este los acepte o de lo contrario no se podrá acceder a lectura y escritura en el dispositivo. Comparto enlace de la documentación oficial: developer.android.com/training/permissions/requesting?hl=es-419 de igual forma, tengo pensado actualizar algunos videos implementado las nuevas formas usando kotlin
Saludos. No creo que sea necesario ya que lo único que cambia es que a partir de Android 6 en adelante se tienen que pedir los permisos al usuario. Mismo video de como pedir los permisos lo tengo en el canal. Pero igual lo pienso y veo si lo realizó para subirlo.
Gracias, otra pregunta, es necesario pedir permisos a partir de Android 6? Y que permisos serían ?, Es que está muy limpio tu código y no lo quiero cambiar
Si es necesario ya que así lo pide Android de lo contrario no podrás usar esas funciones. Para escritura sería el WRITE_EXTERNAL_STORAGE Para leer seria READ_EXTERNAL_STORAGE Los tendrías que definir en el manifest y en el código pedir los permisos al usuario. Te comparto enlace a la documentación oficial: developer.android.com/training/permissions/requesting?hl=es-419#java Y te comparto el enlace al vídeo que tengo del canal (está en Kotlin pero puedes darte una idea de cómo hacerlo en Java): ruclips.net/video/3acIvhoJNVs/видео.html Espero te sirvan.
Muy buena explicación, crack!!!
Saludos, espero que te sirva.
Buen día amigo. tengo un error en la linea del try catch: pdfDocument.writeTo(new FileOutputStream(file)) el cual arroja un error en el Exception: java.io.FileNotFoundException: /storage/emulated/0/Archivo.pdf: open failed: EPERM (Operation not permitted). Tiene alguna idea de cual sea el problema? gracias.
Saludos, pueden ser los permisos para poder leer y escribir en el dispositivo, a partir de Android 6 esos permisos los tiene que aceptar el usuario.
Hola! que debería cambiar para que en el PDF se ponga un plot que se ha generado en la misma activity? gracias!
Saludos.
Tendrías que generar una imagen de ese gráfico y posteriormente agregarlo al PDF como imagen.
Espero haber aclarado la duda o por lo menos orientarte en tu búsqueda
@@dev.xcheko51x alguna pista de como generar la imagen a partir del grafico? Muchas gracias!
Hay una librería de gráficas que ya tiene un método para generar la imagen pero no recuerdo cual.
Pero de momento se me ocurre que desde el código se haga una captura de pantalla y esta imagen que se genera se muestre en un ImageView, misma que sería la que se insertaria en el PDF.
No es lo óptimo pero es una solución, igual voy a investigar cómo se podría hacer y hago un vídeo al respecto.
@@dev.xcheko51x esa solución me bastaría pero... como genero entonces la captura desde el codigo? gracias!
y si el texto viene de un control, por ejemplo yo tomo el descripcion.getText.toString.Split("
") pero sino tiene los saltos de linea, que procede?
Saludos, ya que obtienes el string del control por ejemplo del EditText solo concatena ell salto de línea. Por ejemplo:
String texto = "hola"
texto = texto + "
"
Espero haber aclarado tu duda
@@dev.xcheko51x
TextPaint mTextPaint=new TextPaint();
StaticLayout mTextLayout = new StaticLayout(observaciones.getText().toString(), mTextPaint, canvas.getWidth(),
Layout.Alignment.ALIGN_NORMAL, 2.0f, 0.0f, false);
int x=50;
int y=530;
for (String line: observaciones.getText().toString().split("
")){
canvas.drawText(line,x,y,mTextPaint);
y += mTextPaint.descent()-mTextPaint.ascent();
}
pero no me funciona
Tienes algun curso en UDEMY o en alguna plataforma
Saludos, en la descripción del video están los enlaces a los dos cursos que tengo en udemy, de igual forma te comparto los enlaces:
Aprende Android con Ejemplos: bit.ly/40dIY4m
Aprende Compose Android con Ejemplos: bit.ly/3zhiFle
@@dev.xcheko51x Muchas gracias por tu gran ayuda
Buenas tardes, Excelente explicación!!! Vi como se creó el archivo. Ahora sería muy bueno si pudiera explicar como visualizarlo desde otra activity. Muchas gracias👍👍
Saludos, me parece que para eso se puede usar webview pero déjame investigo y realizó un vídeo sobre el tema, gracias por el comentario, 😁👍
Saludos, te dejo el enlace del video:
ruclips.net/video/p1JIDMagCLw/видео.html
Espero te sirva.
Gracias buen video, ya habia utilizado este metodo antes, alguien sabe porque no me sale la ventana emergente para conceder los permisos?
Saludos. Puede ser por qué estás ejecutando la aplicación en un dispositivo con Android 5 o inferior, ya que los permisos al usuario es desde Android 6 en adelante o en su defecto desinstala la aplicación y vuelvela a ejecutar
@@dev.xcheko51x ya lo solucione, el primer programa que hice usando este metodo tenia un version targedSdk 32, en este programa al iniciar si me pedia el permiso para poder abrir y guardar el PDF, el nuevo programa que hice tiene una version targedSdk 33 y ahora ya no sale la ventana por que en automatico se validan los permisos
Excelente, gracias compartir tu solución
@dev.xcheko51x buenas noches, he usado sus video de años anteriores y me funciona perfecto la creación del PDF en una tablet Samsung Galaxy, con una aplicación local. Actualmente en otras tablets Huawei mateoad 10 y una Lenovo la aplicación funciona pero no crea el pdf en downloads. Creo no reconoce la ruta con la rutinas creararchivo y getruta, favor si puede enviar alguna sugerencia
Saludos, posiblemente sea los permisos en los vídeos uso un emulador con Android 5 y para Android 6 en adelante de tiene que solicitar los permisos al usuario y que este los acepte o de lo contrario no se podrá acceder a lectura y escritura en el dispositivo.
Comparto enlace de la documentación oficial:
developer.android.com/training/permissions/requesting?hl=es-419
Buenas amigo, tengo un error en el código, no me admiten los permisos, me deniega el permiso porque?
Saludos, si estás usando un dispositivo o emulador con Android 6 en adelante necesitas pedirle los permisos al usuario, posiblemente eso sea lo que te este dando problemas
Hola, como puedo a ese mismo codigo poner una funcion para que agregue texto desde la app y lo guarde en el pdf?
Saludos, solo tienes que crear el método y dentro poner las líneas de código que capturan el texto que deseas insertar y generar el PDF.
Solo que tienes que estar seguro de la información que vas a agregar ya que generado el PDF no lo puedes modificar, te tocaría capturar todo y volverlo a generar.
Espero haberte aclarado tu duda o en su defecto si no es lo que buscabas puedes comentarlo.
amigo hola buenas excelente video pero a la hora de ejecutar me presenta problemas en esta parte
pdfDocument.writeTo(new FileOutputStream(file));
si depronto sabes que puede pasar
Saludos, que error es el que te manda??? Por qué el error puede dar indicio de dónde buscar para la solución
@@dev.xcheko51x amigooo mil gracias por tu respuesta bueno mira el problema ya lo resolvi creando una carpeta pero ahora el dilema es que esa carpeta mi celular no me la deja ver no se como crear una carpeta que se pueda ver y poder usar en mi propio celular no se si me entiendas mil gracias un saludo
No entiendo por qué tienes que crear una carpeta para que te funcione, pero en todo caso posiblemente se está creando en una ruta que es solo para el SO, intenta usando la siguiente línea:
File ruta = new File(context.getExternalFilesDir( Environment.DIRECTORY_DOWNLOADS), "NOMBRE_CARPETA");
Y la de debería crear en descargas la cuál si deberías tener acceso
O usa:
File ruta = new File(context.getExternalFilesDir(), "NOMBRE_CARPETA");
Y te creara la carpeta en la ruta:
Android/data/data/com.tucompany.descargas/NOMBRE_CARPETA
@@dev.xcheko51x hola migo que pena tanta molestia
Android/data/data/com.tucompany.descargas/NOMBRE_CARPETA
aca lo que me dices es cierto asi queda pero el dilema es que al yo buscar en mi celular esa ruta no me sale nada llego hasta el .data y la carpeta del package no aparece es muy extraño no se ahi que pasa
No sé si ya intentaste con un explorador de archivos que te permita ver las carpetas ocultas, si en tu dispositivo tienes una microsd revisa en las dos fuentes en las carpetas data.
O se me ocurre que a lo mejor no se está creando la carpeta como tal si, tú dispositivo tiene Android 6 o superior hay que pedirle los permisos de lectura y escritura al usuario para poder realizar ese tipo de acciones.
buenos días como colocar varias paginas
Saludos, te comparto el enlace a la documentación donde está el proceso de creación del archivo y de las páginas.
developer.android.com/reference/android/graphics/pdf/PdfDocument
Igual existe otra librería que permite varias páginas la cual es itextpdf o droidtext
Te comparte el vídeo donde uso el último
ruclips.net/video/_cxYmwJArK4/видео.html
Buen Dia Estimado dev.xcheko me podrias ayudar con informacion sobre los permisos en android 11 , parece que no me crea el archivo pdf por los permisos nuevos de android 11, felicitaciones por tu canal sigue Adelante
Saludos, creo que la nueva forma de solicitar permisos en Android 11 es solo para algunos casos como localizacion, camara y micrófono, ya que da la opción que dichos permisos tengan un tiempo de vida.
Para el caso de lectura y escritura puede ser la forma que se usa para Android 6 en adelante.
De todas formas déjame reviso, y hago algunas pruebas para subir video al respecto en caso de ser necesario.
@@dev.xcheko51x buenas noches, he usado sus video de años anteriores y me funciona perfecto la creación del PDF en una tablet Samsung Galaxy, con una aplicación local. Actualmente en otras tablets Huawei mateoad 10 y una Lenovo la aplicación funciona pero no crea el pdf en downloads. Creo no reconoce la ruta con la rutinas creararchivo y getruta, favor si puede enviar alguna sugerencia.
Igual he realizado la prueba con el PDF de el actual video y tampoco genera el PDF
Saludos, posiblemente sea los permisos en los vídeos uso un emulador con Android 5 y para Android 6 en adelante de tiene que solicitar los permisos al usuario y que este los acepte o de lo contrario no se podrá acceder a lectura y escritura en el dispositivo.
Comparto enlace de la documentación oficial:
developer.android.com/training/permissions/requesting?hl=es-419
de igual forma, tengo pensado actualizar algunos videos implementado las nuevas formas usando kotlin
Hola exelente video, pero seria fantastico que lo actualizaras para las versiones actuales, como la 11 o 12, gracias
Saludos.
No creo que sea necesario ya que lo único que cambia es que a partir de Android 6 en adelante se tienen que pedir los permisos al usuario.
Mismo video de como pedir los permisos lo tengo en el canal.
Pero igual lo pienso y veo si lo realizó para subirlo.
@@dev.xcheko51x por favor, sería de gran ayuda, no he podido con ello :/
No te garantizo nada pero igual está pendiente del canal y en caso de hacerlo igual te comento por este medio.
Gracias, otra pregunta, es necesario pedir permisos a partir de Android 6? Y que permisos serían ?, Es que está muy limpio tu código y no lo quiero cambiar
Si es necesario ya que así lo pide Android de lo contrario no podrás usar esas funciones.
Para escritura sería el WRITE_EXTERNAL_STORAGE
Para leer seria READ_EXTERNAL_STORAGE
Los tendrías que definir en el manifest y en el código pedir los permisos al usuario.
Te comparto enlace a la documentación oficial:
developer.android.com/training/permissions/requesting?hl=es-419#java
Y te comparto el enlace al vídeo que tengo del canal (está en Kotlin pero puedes darte una idea de cómo hacerlo en Java):
ruclips.net/video/3acIvhoJNVs/видео.html
Espero te sirvan.