Mod Certificate de Moodle

PHP   |   14 Comentarios

Mod Certificate de Moodle, Moodle tiene un mod llamado Certificate, que nos sirve para generar diplomas o certificados en PDF de que un alumno ha concluido un determinado curso. Lo lógico es que queramos editar el contenido de este PDF para mostrar información o imagenes sobre nuestra compañía o institución.

Aunque la edición desde el gestor ofrece muchas opciones, lo cierto es que se limita a los diplomas prediseñados que trae el mod por defecto.

Si no te gustan las opciones que puedes configurar desde el gestor, ¡Manos a la obra!

En primer lugar debemos decidir si lo único que queremos es cambiar las imágenes de fondo o también queremos modificar texto.

Cambiar sólo imágenes

La cosa se simplifica, sobre todo si no tenemos que tocar tamaños ni posiciones. Para no tocar tamaños, lo mejor es ajustarnos a alguno de los que ya vienen por defecto. En la carpeta de instalación de Moodle, vamos a mod/certificate/pix. Aquí tenemos 4 carpetas:

  • borders: donde se alojan las imágenes de bordes para los diplomas.
  • seals: donde se alojan las imágenes de sellos que aparecen abajo a la derecha.
  • signatures: donde encontramos las firmas que se colocan abajo a la izquierda.
  • watermarks: donde encontramos las imágenes de marca al agua de fondo del diploma.

Vamos a elegir una imagen de cada carpeta y a editarla con nuestras imágenes. De esta forma, los tamaños serán los mismos y encajará todo a la perfección.

Para los bordes, dependiendo de la orientación de nuestro diploma, debemos elegir una imagen u otra. Si nos fijamos bien, están repetidas las imágenes de bordes, pero en realidad una tiene una disposición más cuadrada (Fancy1) y la otra más rectángular (Fancy2).

Con un editor de imágenes abrimos las que hemos elegido, borramos su contenido con color blanco, y ajustamos nuestras imagenes al tamaño de cada una. Al guardar las imágenes, lo hacemos con un nombre diferente (no es necesario sustituir las imágenes que ya tenemos; moodle detectará que hay imágenes nuevas). Subimos cada una a su carpeta correspondiente, y vamos al editor del certificado. Bajamos hasta Opciones de diseño y configuramos:

  • Imagen del borde: aquí aparecerá el nombre del archivo que hemos subido a la carpeta /borders.
  • Lineas de borde: No.
  • Imagen de agua: este campo muestra las imágenes de la carpeta /watermarks.
  • Imagen de la firma: de aquí seleccionamos las imágenes de la carpeta /signatures.
  • Sello o Imagen del logo: finalmente, aquí están las imágenes de la carpeta /seals.

Seleccionamos las imágenes que acabamos de subir y guardamos los cambios. Mira ahora tu certificado.

¿No te convence, o quieres cambiar los textos? En el siguiente apartado tocaremos esto, ¡sigue leyendo!

Modificar textos y posiciones

Tengo que decirte que ahora nos toca editar código. No te preocupes porque te vamos a explicar lo que puedes tocar. El resto, ni lo toques si no sabes lo que estás haciendo.

En primer lugar, navegamos hasta la carpeta /mod/certificate/type. Por defecto, deberiamos encontrar aquí cuatro carpetas. Creamos una nueva carpeta «micertificado» (el nombre que le quieras poner al certificado), y dentro, copiamos el contenido de una de las otras cuatro carpetas, para basarnos en un certificado ya existente. En nuestro caso, hemos copiado A4_non_embedded, que es el que por defecto moodle asocia al certificado.

Antes de modificar nuestro certificado, vamos a hacer que el sistema lo detecte. En la carpeta /mod/certificate/lang hay varias carpetas. En cada una, hay un certificate.php. En todos ellos hay que añadir una linea más:

$string[‘typemicertificado’] = ‘Mi Certificado’;

Esto hará que moodle detecte el certificado. En cada archivo podemos añadirlo en su idioma correspondiente. Un truco para saber donde añadir esta línea es darse cuenta de que los $string están ordenados por orden alfabético. Hacia el final del archivo encontramos $string[‘typeA4_embedded’] y debajo los otros tres tipos. Ahí podemos añadir nuestra línea.

En realidad, estos son los archivos con los textos de los certificados. Una de las opciones para modificar los textos es modificar estos archivos. Pero ahora hablamos de eso, volvamos a /mod/certificate/type/micertificado. Vamos a abrir certificate.php. Esto es nuestro certificado.

Lo que este archivo hace inicialmente es instanciar un nuevo PDF, darle título con $pdf->SetTitle($certificate->name), no establece Header ni Footer (setPrintHeader(false), setPrintFooter(false)), y finalmente, añadir una página con $pdf->AddPage();

Seguidamente, define las variables de posicion de las imágenes y los textos. Dependiendo de la orientación del certificado, el if($certificate->orientation == ‘L’) establece si las variables se guardan para orientacion horizontal (‘L‘, de ‘Landscape‘) o vertical. Así, $x e $y son las coordenadas horizontal y vertical generales por defecto, $sealx y $sealy son las coordenadas de la imagen de Sello, $sigx y $sigy son las de la imagen de la Firma, $wmarkx y $wmarky son las de la imagen de marca al agua, $wmarkw y $wmarkh son el ancho y el alto (width y height) de la imagen de marca al agua, y lo mismo para $brdrx, $brdry, $brdrw y $brdrh para la imagen de borde. De momento son las que más nos interesan.

Después de esto, se añaden las imágenes. Ahora sí que viene lo interesante.

// Add images and lines
certificate_print_image($pdf, $certificate, CERT_IMAGE_BORDER, $brdrx, $brdry, $brdrw, $brdrh);
certificate_draw_frame($pdf, $certificate);
// Set alpha to semi-transparency
$pdf->SetAlpha(0.2);
certificate_print_image($pdf, $certificate, CERT_IMAGE_WATERMARK, $wmarkx, $wmarky, $wmarkw, $wmarkh);
$pdf->SetAlpha(1);
certificate_print_image($pdf, $certificate, CERT_IMAGE_SEAL, $sealx, $sealy, '', '');
certificate_print_image($pdf, $certificate, CERT_IMAGE_SIGNATURE, $sigx, $sigy, '', '');

Bien. certificate_print_image, como ya podemos intuir, pinta la imagen en el pdf. Sus parámetros son:

certificate_print_image( $pdf, $certificate, CERT_IMAGE_BORDER, $brdrx, $brdry, $brdrw, $brdrh );

  • $pdf: El pdf donde se pinta la imagen.
  • $certificate: Nuestro certificado, variable global.
  • CERT_IMAGE_BORDER: la imagen a pintar (en este caso, el borde).
  • $brdrx: coordenada de posición horizontal x donde se empieza a pintar.
  • $brdry: coordenada de posición vertical y donde se empieza a pintar.
  • $brdrw: ancho de la imagen.
  • $brdrh: alto de la imagen.

Cambiando estos valores podremos pintar las imagenes con las propiedades que queramos.

Lo siguiente que nos interesa es modificar los textos. Tenemos tres formas de hacerlo:

  • Mediante el gestor, traduciendo las cadenas de texto.
  • Editando los archivos de /mod/certificate/lang.
  • «A pelo», modificando nuestro archivo de certificado.

Ya que lo tenemos abierto, nosotros utilizaremos la última opción. Al fin y al cabo, no estamos sobreescribiendo ningún certificado por defecto (ya que hemos creado uno nuevo), y esto nos permite añadir nuevos textos y ajustarlo todo, cosa que las otras dos formas no nos permiten.

La función que nos permite añadir texto es certificate_print_text. Analicémosla:

certificate_print_text( $pdf, $x, $y, ‘C’, ‘Helvetica’, ‘ ‘, 30, get_string(‘title’, ‘certificate’));

  • $pdf: El pdf donde se muestra el texto.
  • $x: coordenada de posición horizontal x.
  • $y: coordenada de posición vertical y.
  • ‘C’: este caracter se corresponde con la alineación del texto, siendo L el que usamos para alinear a la izquierda, R a la derecha, C centrado y J justificado.
  • ‘Helvetica’: Fuente. No es que haya muchas, asi que no intentéis usar alguna rara. Helvetica, Times y poco más.
  • ‘ ‘: Aunque aquí aparece vacío, en realidad este caracter permite al texto estar en negrita (B), y otras opciones de formateado.
  • 30: Tamaño del texto.
  • get_string(‘title’, ‘certificate’): En realidad, aquí nos basta con escribir un string. La función get_string lo que hace es recuperar un string concreto del certificate (del archivo de idiomas). Podemos sustituirlo por «Mi String» y mostrará el texto que establezcamos.

Jugando con esta función y con el valor de $y (al que vamos a ir sumando valores para que el texto vaya bajando), representaremos en el PDF los textos que queramos. Si queremos cambiar el  color, antes del texto debemos llamar a:

$pdf->SetTextColor(r, g, b);

Siendo r, g y b tres números del 0 al 255 que indican el valor de cada componente (rojo, verde y azul). Ojo, a partir de esta función, todos los textos que estén por debajo saldrán de este color, así que mucho cuidado si solo queremos cambiar el color de una línea, pues entonces debemos volver a establecer el color anterior.

¿Queremos añadir una página nueva? No hay problema: $pdf->AddPage(). No os olvidéis de representar de nuevo todas las imágenes. Todo lo que sea certificate_print_text son textos que se imprimen. Si no nos interesa alguno, podemos borrar la linea.

Después de todos estos cambios, guardamos el archivo y probamos nuestro certificado. Es aconsejable ir guardando y probando los cambios para ir cuadrando todo en su sitio, y para comprobar que nada falla (ese punto y coma que se escapa, ese paréntesis que falta, esa llave sin cerrar… ay…).

¡Y ya está! No tiene más. Ya tenemos nuestro certificado personalizado en Moodle. Si os queda alguna duda en el tintero, podéis dejarla en nuestros comentarios y os la responderemos encantados.

¡Hasta la próxima!

“Lo mejor de los booleanos es que si te equivocas
estás a un sólo bit de la solución correcta.”
– Anónimo.

¿Te ha gustado el artículo?
1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (1 votos, promedio: 5,00 sobre 5)
Loading...

Suscríbete. Déjanos tu email y recibe contenido genial cada mes


Artículo escrito por

¡Exprésate! Dejanos tu comentario

Tu dirección de correo electrónico no será publicada.

14 Comentarios

david

buenos días sigo todos los pasos pero no me lo reconoce al abrir mi plataforma moodle algo tengo que estar poniendo mal en lang ( es donde te reconoce el certificado? $string['typeJuridicoNuevo'] = 'JuridicoNuevo'; $string['impartidoTotal'] = "Ha participado con aprovechamiento en la acción formativa de"; $string['fitTotal'] = 'Fecha'; esto es lo que pongo en lang $typeJuridicoNuevo = 'JuridicoNuevo'; $impartidoTotal = "Ha participado con aprovechamiento en la acción formativa de"; $string['fiTotal'] = 'Fecha: '; estas son las variables que supuestamente enlazan en lang espero me podais ayudar muchas gracias

Daniela

Me ocurre lo mismo Paola. ¿Lograste resolverlo?

Daniela

Hola, mi tipo de certificado es letter non embedded y lo que quiero es cambiar el título impreso en el certifocado que dice: CERTIFICADO DE APROVECHAMIENTO para que solo aparezca CERTIFICADO. Ya he hecho el cambio en lang/en/certificate.php a esto:

$string['title'] = 'CERTIFICATE';
pero sigue sin reflejarse el cambio. Espero puedan ayudarme. Saludos,

Paola

Buenas tardes, excelente tutorial. Estoy modificando algunos textos, pero cuando reemplazo el 'Title' por el texto que deseo en el get_string; al generar el certificado el texto me esta saliendo entre llaves [ ], cómo hago para evitar que esto me salga en la impresión. Gracias

leo

Hola que tal, necesito modificar este texto que me aparece en el certificado otorgado por moodle Examen del Curso Calificación: 2,50 % por: Ud ha logrado un 45% si alguien me puede indicar donde se encuentra esta linea para modificar el texto

Bringel

Olá, estou tendo problemas com a visualização. nenhuma alteração parece fazer efeito. Meu moodle já veio com o idioma Português e traduz nativamente os textos do certificado para Português. Acho que por isso, nenhuma alteração que faço em Certificate.php faz efeito. Acredito que o link das variáveis está indo para outro arquivo com as traduções em Português, fora da pasta "www/ead/mod/certificate/lang/en". Consegui fazer ""alterações"" de maneira provisória pela própria interface do moodle, mas são alterações bem limitadas de tamanho e espaçamento, adicionando ou mudando tamanhos.. Aguardo resposta e Obrigado! ##### ESPAÑOL ###### Hola , estoy teniendo problemas para ver el coma. No cambio parece tener efecto. Mi Moodle ha llegado con el idioma portugués de forma nativa y traduce el texto del certificado al portugués. Creo que sí, cualquier cambio que realice en Certificate.php surta efecto. Creo que el enlace de variables se van a otro archivo con traducciones en portugués, fuera de la carpeta " "www/ead/mod/certificate/lang/en" " . Lo que podía hacer " el" cambio " " de forma provisional por la interfaz de Moodle , sino que se cambia de tamaño muy limitado y el espaciamiento , la adición de " Asunto " o cambiar los tamaños .. espera de la respuesta y gracias!

ray anguiano

hola, buen día. ya hice los cambios y salieron muy bien, pero como hago para cambiar el orden del nombre que inicie con lastname en lugar de firstname y otra duda como agrego un campo adicional del perfil como es su numero de boleta, gracias

Anibal Santos

Excelente, sabes lo unico que no he podido hacer es que se habilite el certificado con cierta calificación, es decir que si en el examen saca 80 le de el certificado. Por mas que lo he intentado no encuentro como hacerlo. Crees que me puedas dedicar algo de tiempo para ver que ando haciendo mal?

Guillermo Montero García

Muchas gracias por el aporte, me ha sido muy útil. Sólo comentar que, al menos a mí, me ha dado algunos problemas de codificación con los acentos y demás. Es necesario que el archivo certificate.php se guarde codificado como ANSI. Saludos.

Guillermo Montero García

Jose

Hola! Muchas gracias por hacer más sencillo el uso de este módulo, entender el código siempre se me ha atragantado jejeje Mi pregunta es si sería posible automatizar la firma digital del certificado? Me gustaría poder firmar el diploma con el certificado digital de la entidad de formación, o un dni electrónico, y que en él aparezca la fecha de la firma, tal como aparece cuando firmo pdfs desde adobe acrobat   Muchas gracias

Juan Viñas

Gracias, para eso estamos :)

Rubén Muñoz Autor

Gracias Alex!

Alex

Trabajo desde hace un tiempo con este módulo y lo has explicado de una forma muy clara y concisa. Enhorabuena.