Herramientas de usuario

Herramientas del sitio


usu:smartpdf:smartpdf_guia_de_iniciacion

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
usu:smartpdf:smartpdf_guia_de_iniciacion [2018/09/03 09:23] stefanusu:smartpdf:smartpdf_guia_de_iniciacion [2022/08/03 18:49] (actual) stefan
Línea 5: Línea 5:
  
 ===== Instalación ===== ===== Instalación =====
-La instalación se hace con el programa ''SmartPdfSetup.exe'', que se puede bajar de la página web de Smart.+La instalación se realiza con el programa instalador //SmartPdfSetup.exe//, que se puede bajar desde la web de Smart [[http://www.smartastur.es]], menú //Descargas//.
  
-Los pasos de instalación son los ya habituales para los programas de Smart. Al principio se pone la clave de instalación para la empresa del cliente. +La clave de instalación a poner en el primer dialogo la podemos sacar de SmartOffice, menú //Configuración/Datos empresa//, pestaña //General//, campo //Clave de instalación//.
-{{ :usu:smartpdf:spdfsetupclaveinst.png?400 |Setup clave instalación}}+
  
-Luegoen el paso de las tareas adicionales, hay que marcar que se quiere generar un ícono en el escritorio: +Salvo casos especialessolo tenemos que poner dicha clave y luego podemos confirmar todos los dialogos del instalador.  
-{{ :usu:smartpdf:spdfsetuptareasad.png?400 |Setup tareas adicionales}}+ 
 +Los pasos del instalador se explican detalladamente [[usu:instalador_comun#instalacion_aplicaciones_icono_unico|aquí]].
  
 ===== Primeros pasos ===== ===== Primeros pasos =====
Línea 21: Línea 21:
  
 ===== Conceptos ===== ===== Conceptos =====
 +El sistema de envío de emails automatizados se compone de dos programas principales:
 +  - SmartPdf: Es el programa para definir los envíos, o sea, la interfaz al usuario.
 +  - SmartServices: Este programa corre continuamente en un servidor para realizar un envío previamente definido en SmartPdf en el momento adecuado.
 +
 +El concepto principal del envío automatizado de documentos son las **listas de destinatarios**. Por ejemplo así:
 +^Razón social ^Correo el. ^Nº factura ^
 +|Pepe |pepe@gmail.com |P0001 |
 +|Goyo |goyo@gmail.com |G0001 |
 +|... | | |
 +
 +Una lista de esta forma puede servir para enviar una factura a cada uno de los destinatarios en un email personalizado (//Estimado Pepe...//).
 +
 +También es posible enviar varios documentos (facturas) al mismo destinatario, por ejemplo con la siguiente lista:
 +^Razón social ^Correo el. ^Nº factura ^
 +|Pepe |pepe@gmail.com |P0001 |
 +|Pepe |pepe@gmail.com |P0002 |
 +|Goyo |goyo@gmail.com |G0001 |
 +|Goyo |goyo@gmail.com |G0002 |
 +|Goyo |goyo@gmail.com |G0003 |
 +|... | | |
 +
 +En este caso Pepe recibiría dos facturas en un solo email, y Goyo 3.
 +
 +El formato del email a enviar se define en las **tareas**, donde también se anota en que **lista de destinatarios** se basa el envío.
 +
 +Los adjuntos del envío de una **tarea** se definen en los **documentos**. Normalmente es lo que en SmartOffice son los informes, que se envían en formato //PDF// a base de un diseño de informe. También pueden ser consultas de cualquier tipo, que se ejecutan y el resultado se adjunta al email en formato de hoja de cálculo o de texto.
 +
 +Los **lotes** agrupan una o varias **tareas** y las ejecutan en un órden definido por el usuario.
  
 ===== Lista de destinatarios ===== ===== Lista de destinatarios =====
Línea 46: Línea 74:
 Aquí unos ejemplos para una fecha de ejecución 31/07/2009: Aquí unos ejemplos para una fecha de ejecución 31/07/2009:
 ^Parámetro ^fecha resultante ^ ^Parámetro ^fecha resultante ^
-|FE(1) |'2009-07-01'+|_FE(1) |'2009-07-01'
-|FE(1/1) |'2009-01-01'+|_FE(1/1) |'2009-01-01'
-|FE(1/-1) |'2009-06-01'+|_FE(1/-1) |'2009-06-01'
-|FE(/-1) |'2009-06-31' (¡ERROR!) | +|_FE(/-1) |'2009-06-31' (¡ERROR!) | 
-|FE(-40) |'2009-06-21'+|_FE(-40) |'2009-06-21'
-|FE(/ /-1) |'2008-07-31' (Entre las dos barras no hace falta ningún espacio, solo lo tenía que meter por un problema con el wiki) | +|_FE(/ /-1) |'2008-07-31' (Entre las dos barras no hace falta ningún espacio, solo lo tenía que meter por un problema con el wiki) | 
-|FE(+10) |'2009-08-10' |+|_FE(+10) |'2009-08-10' |
  
 Una vez que salimos del campo //Selección//, el formulario nos muestra el resutlado del //select// en la rejilla correspondiente: Una vez que salimos del campo //Selección//, el formulario nos muestra el resutlado del //select// en la rejilla correspondiente:
Línea 68: Línea 96:
 En cuanto confirmemos una lista de destinatarios con ''F11'', podemos ver en la rejilla //Campos// los campos que devuelve esta lista: En cuanto confirmemos una lista de destinatarios con ''F11'', podemos ver en la rejilla //Campos// los campos que devuelve esta lista:
 {{ :usu:smartpdf:spdflistadestcampos.png?600 |Lista dest. campos}} {{ :usu:smartpdf:spdflistadestcampos.png?600 |Lista dest. campos}}
-En la columna //Nombre campo dataset// vemos los nombres de las variables que podemos utilizar en el diseño de los emails, por ejemplo de la siguiente manera: ''Estimado {Razón social}:''.+En la columna //Nombre campo dataset// vemos los nombres de las variables que podemos utilizar en el diseño de los emails, como se explica más abajo. 
 + 
 +**Si desconfirmamos una lista de destinatarios, también se desconfirmarán los lotes cuyos tareas hacen referencia a la lista.** Se muestra un mensaje al usuario con todos los lotes desconfirmados, para que los pueda confirmar otra vez al terminar el trabajo sobre la lista.
  
 ===== Lotes de tareas ===== ===== Lotes de tareas =====
Línea 75: Línea 105:
 Los lotes sirven para agrupar una serie de tareas y ejecutarlas en un orden específico. Además son los lotes que definen el momento (horario) de ejecutar las tareas. Añadimos un nuevo lote con código predefinido con F3 e ''Intro''. Los lotes sirven para agrupar una serie de tareas y ejecutarlas en un orden específico. Además son los lotes que definen el momento (horario) de ejecutar las tareas. Añadimos un nuevo lote con código predefinido con F3 e ''Intro''.
 {{ :usu:smartpdf:spdflotegeneral.png?600 |Lote general}} {{ :usu:smartpdf:spdflotegeneral.png?600 |Lote general}}
 +Los campos de la pestaña //General// son los siguientes:
 +^Campo ^Descripción ^
 +|Código |El código del lote, que se genera automáticamente si damos en ''Intro'' después de añadir un lote nuevo con ''F3''. También podemos poner un código manualmente después de insertar un lote nuevo con ''F3''. |
 +|Nombre |Un nombre descriptivo para el lote. |
 +|Suspendido |Si esta casilla está marcada, algún error ha ocurrido en la última ejecución del lote.\\ Lo podemos comprobar desde el menú //Registro/Resultados//.\\ **Mientras un lote esté en estado //suspendido// no se ejecutará.** Lo podemos desbloquear desconfirmando y confirmando de nuevo el lote con F11. |
 +|Cód. planificación |En la planificación se puede definir la agenda de ejecución del lote. Se accede a la lanificación desde este campo con ''Mayús.+F6''.\\ Cada lote recibe una planificación por defecto que tiene el mismo código como el lote. También es posible crear una planificación generalizada, con utilidad para varios lotes, desde la ventana principal, menú //Formularios/Planificaciones//.|
 +|Remitente email error |El servicio que ejecuta los lotes, //SmartServicesPdf//, ofrece la posibilidad de notificar por email a alguien en caso de un fallo en la ejecución del lote, que suele resultar en un lote suspendido (ver arriba). En este campo se puede meter el remitente del email que se va a enviar, y en el siguiente campo, //Destinatario email error//, el o los destinatarios separados por coma. |
 +|Destinatario email error |Se puede poner un destinatario o varios separados por coma. Ver explicación en el campo anterior. |
 +|Fecha última ejec. |Fecha de la última ejecución del lote. Para lotes que se ejecutan varas veces al día incluye la hora también. |
  
-En la pestaña //Planificación// podemos definir el horario:+Desde el campo //Cód. planificación// podemos acceder con ''Mayús.+F6'' a la planificación del lote:
 {{ :usu:smartpdf:spdfloteplanif.png?600 |Lote planificación}} {{ :usu:smartpdf:spdfloteplanif.png?600 |Lote planificación}}
 +En la cabecera tenemos estos campos:
 +^Campo ^Descripción ^
 +|Código |El código de la planificación, autogenerado al crear un lote nuevo, o creado manualmente desde la ventana principal, menú //Formularios/Planificaciones//. |
 +|Nombre |Un nombre descriptivo. |
 +|Cód. calendario |El calendario a usar cuando se quiere ejecutar un lote en días festivos o laborales. |
 +|Permitir saltar ejec. |Si se desmarca esta opción, el servicio que ejecuta los lotes, //SmartServicesPdf//, va a //recuperar// ejecuciones de un lote cuando por ejemplo se ha apagado el servidor por un fallo de electricidad. **OJO, también se van a recuperar todas las veces que faltan desde la última fecha de ejecución (ver campo correspondiente en los campos del lote arriba) si hemos desconfirmado un lote y lo confirmamos de nuevo un mes más tarde, por ejemplo.** |
 +|Ejecutar siempre |Marcando esta opción se ejecuta el lote cada vez que se arranca el servicio //SmartServicesPdf//, que normalmente es cada 5 minutos.\\ Se suele usar por ejemplo para tareas que tienen que leer unos emails entrantes, o para probar un lote. |
 +|Autogenerado |Esta marcado si la planificación ha sido autogenerado al crear un lote nuevo. |
 +
 +En la pestaña //General// en la parte de las líneas de la planificación podemos detallar la agenda de ejecución del lote.
 +
 ^Campo ^Descripción ^ ^Campo ^Descripción ^
-|Cada 2 minutos |Se ejecuta el lote cada 2 minutos. Este es el intervalo de ejecución del programa //SmartServices//, que es el programa que realiza las tareas. Con otras palabras, si marcamos //Cada 2 minutos//, el lote se ejecuta cada vez que se ejecuta el programa //SmartServices//. | 
 |Fecha fija |Una fecha fija en la que se quiere ejecutar el lote. | |Fecha fija |Una fecha fija en la que se quiere ejecutar el lote. |
 |Cada día de mes |Se puede definir el día del mes en que se quiere ejecutar el lote. **Si al mismo tiempo se marca el campo ''Cada día laboral'' entonces se calcula el x día laboral del mes, si x es el número introducido en ese campo.** En ese caso hace falta definir un calendario en el campo ''Cód. calendario''. | |Cada día de mes |Se puede definir el día del mes en que se quiere ejecutar el lote. **Si al mismo tiempo se marca el campo ''Cada día laboral'' entonces se calcula el x día laboral del mes, si x es el número introducido en ese campo.** En ese caso hace falta definir un calendario en el campo ''Cód. calendario''. |
-|Desplazar días |Se puede desplazar la fecha de ejecución definida en los demás campos por los días introducidos en ese campo. Para ejecutar una tarea el último día de cada mes, se pone 1 en ''Cada día de mes'' y ''-1'' en este campo. |+|Días de mes |Igual que el campo anteriorcon la diferencia que se puede introducir una lista de días separadas por coma. |
 |Cada lunes/martes... |Con esas casillas se puede definir uno o varios días de la semana en que se quiere ejecutar el lote. | |Cada lunes/martes... |Con esas casillas se puede definir uno o varios días de la semana en que se quiere ejecutar el lote. |
 |Cada día laboral |Marcando este campo se ejecuta el lote todos los días laborales. Hace falta definir un calendario en ''Cód. calendario''. Por defecto se coge el calendario estándar de la empresa. | |Cada día laboral |Marcando este campo se ejecuta el lote todos los días laborales. Hace falta definir un calendario en ''Cód. calendario''. Por defecto se coge el calendario estándar de la empresa. |
 |Cada día festivo |Ejecutar el lote cada día festivo. Hace falta definir un calendario en ''Cód. calendario''. Por defecto se coge el calendario estándar de la empresa. | |Cada día festivo |Ejecutar el lote cada día festivo. Hace falta definir un calendario en ''Cód. calendario''. Por defecto se coge el calendario estándar de la empresa. |
-|Permitir saltar ejec. |**En general se debería poner 'S' en esa casilla.** Si se deja en 'N' significa quesi el lote termina con un error, el día siguiente se vuelve intentar hasta que termine con éxito. | +|Ejeccada x minutos |Si se pone un número de minutos en este campo, el lote se va a ejecutar varias veces en los días especificados en los campos anterioresEl periodo a esperar entre cada ejecución son los minutos de este campo. | 
-|Planificación |Cód. calendario |El código del calendario a usar para calcular los días laborales. |+|Ejec. desde |Si se pone una hora en este campo y en el siguiente//Ejec. hasta//, se ejecutará el lote solamente dentro de esta franja horaria. Para lotes que se ejecutan una sola vez en un día esto significa normalmente que se ejecutará la hora puesta en //Ejec. desde//. Cuando se pone un periodo en //Ejec. cada x minutos// se ejecutará el lote dentro del periodo cada //x// minutos.\\ Siempre hay que rellenar los dos campos, //Ejec. desde// y //Ejec. hasta//.\\ También se puede poner //Ejec. desde// en ''22:00:00'' y //Ejec. hasta// en ''05:00:00'', que significaría ejecutar el lote durante de la noche, pero no durante el día. |  
 +|Desplazar días |Se puede desplazar la fecha de ejecución definida en los demás campos por los días introducidos en ese campo. Para ejecutar una tarea el último día de cada mes, se pone 1 en ''Cada día de mes'' y ''-1'' en este campo. |
  
 Una vez definida la planificación, podemos añadir una o varias tareas al lote. Seleccionamos la rejilla y damos en F3 o //Flecha abajo//. Una vez definida la planificación, podemos añadir una o varias tareas al lote. Seleccionamos la rejilla y damos en F3 o //Flecha abajo//.
 {{ :usu:smartpdf:spdflotetareas.png?600 |Lote tareas}} {{ :usu:smartpdf:spdflotetareas.png?600 |Lote tareas}}
  
-{{:usu:smartpdf:spdficonarribaabajo.png |Flecha arriba abajo}}Le damos un nombre a cada tarea y las reordenamos con las dos flechas como lo necesitamos.+{{:usu:smartpdf:spdficonarribaabajo.png?20 |Flecha arriba abajo}}Le damos un nombre a cada tarea y las reordenamos con las dos flechas como lo necesitemos.
  
 La edición detallada de cada tarea se debería hacer pinchando en el botón correspondiente {{:usu:smartpdf:spdficontarea.png|Editar tarea}}. La edición detallada de cada tarea se debería hacer pinchando en el botón correspondiente {{:usu:smartpdf:spdficontarea.png|Editar tarea}}.
  
 +Con F11 podemos confirmar el lote. Una vez confirmado ya no serán posible cambios ni en el mismo lote ni en cualquier componente del lote (tareas y documentos). **Solo lotes confirmados serán ejecutados**. **Si un lote está suspendido, lo podemos arrancar otra vez si lo desconfirmamos y confirmamos con F11.**
 +
 +===== Tareas =====
 +Las tareas definen el envío por email de los documentos. Los documentos a enviar se añaden en la rejilla de //Documentos//, lo que se explica más adelante.
 +
 +{{ :usu:smartpdf:spdftareageneral.png?600 |Tarea general}}
 +^Campo ^Descripción ^
 +|Ejecutar siempre |Hay que marcar este campo si queremos que se ejecute la tarea incluso si alguna tarea anterior en el lote había terminado con un error.\\ Útil por ejemplo para el envío de un resultado de la tarea.  |
 +|Fallo de envío es error |Si lo marcamos, un error en el envío (por ejemplo por un fallo en la red) se trata igual que un error al ejecutar la tarea. |
 +|Parar lote al error |Si está marcada esta opción (valor por defecto), en caso de un error no se ejecutan las tareas restantes del lote, con la excepción de las tareas marcadas con //Ejecutar siempre//. |
 +|Suspender lote al error |Si la tarea da un error, se marca el lote como suspendido y no se vuelve a ejecutar hasta que se desconfirme el lote y se vuelve a confirmar. |
 +|Cód. lista destinatarios | La lista de destinatarios para esta tarea. |
 +|Usuario conexión |Por defecto, la tarea se ejecuta bajo con un usuario del sistema. En este campo se puede definir otro usuario a utilizar en la conexión a la base de datos. |
 +|Grupo conexión |El grupo para la conexión. Solo se toma en cuenta si se ha definido también el //Usuario conexión//. |
 +|Clave conexión |La contraseña para el //Usuario conexión//. |
 +
 +==== E-Mail ====
 +En la pestaña //E-Mail// se define el formato y los destinatarios del email a enviar.
 +
 +{{ :usu:smartpdf:spdftareaemailcuerpo.png?600 |Email cuerpo}}
 +
 +Un email consiste de los tres partes //prefijo//, //cuerpo// y //firma//, que se pueden definir en las pestañas correspondientes. En cualquier de estos campos, y también en el campo //Asunto email//, está permitido el uso de **parámetros**.
 +
 +Un parámetro se define por las llaves, por ejemplo ''{Nombre}''.
 +
 +Cualquier parámetro usado en estos campos aparece automáticamente en la pestaña //Parámetros//, donde le podemos asignar un campo de la lista de destinatarios con F6 desde el campo //Nombre campo dataset//
 +{{ :usu:smartpdf:spdftareaemailparametros.png?600 |Email parámetros}}
 +
 +Cuando se crean los emails y se recorre la lista de los destinatarios, se sustituyen los parámetros por los campos de la lista para personalizar cada email.
 +
 +Los partes //prefijo// y //firma// permiten el uso de //html//, para por ejemplo incluir imagenes en la firma o cambiar el tamaño de la letra.
 +{{ :usu:smartpdf:spdftareaemailfirma.png?600 |Email firma}}
 +
 +Cualquier imagen utilizado en estos dos campos se sube inmediatamente a la base de datos y se puede ver en la pestaña //Imagenes//.
 +{{ :usu:smartpdf:spdftareaemailimagenes.png?600 |Email imagenes}}
 +
 +La definición de los destinatarios se hace desde la pestaña correspondiente.
 +{{ :usu:smartpdf:spdftareaemaildest.png?600 |Email destinatarios}}
 +
 +Al igual que con los parámetros, podemos escoger un campo de la lista de destinatarios que contiene la dirección de email del destinatario, con F6 desde el campo //Nombre campo dataset//.\\
 +También es posible definir una dirección de email fija en el campo //Destinatario//.\\
 +En cualquier caso hay que escoger el //Tipo dest.// para cada línea añadida.
 +
 +==== Plantillas ====
 +Es posible guardar los campos //Asunto email//, //Email prefijo//, //Email cuerpo//, //Email firma// e //Imagenes// en una **plantilla**, para reutilizar el formato en otra tarea. Se consigue con los dos botones //Cargar desde plantilla// y //Guardar como plantilla//.
 +
 +==== Documentos de tareas ====
 +Los documentos a enviar se definen en la rejilla de la pestaña //General// de las tareas.
 +{{ :usu:smartpdf:spdftareadoc.png?600 |Tarea documentos}}
 +
 +Añadimos una línea para cada adjunto y le ponemos un nombre. Luego usamos el botón {{:usu:smartpdf:spdficontarea.png|Editar documento}} para editar el detalle de cada documento.
 +
 +Los documentos no están ordenados, no se puede saber el órden de su generación.
 +
 +===== Documentos =====
 +En el formulario de Documento, al que llegamos pinchando en el botón {{:usu:smartpdf:spdficontarea.png|Editar documento}} desde la rejilla de las tareas, podemos definir los adjuntos que deben acompañar cada email.
 +
 +El caso más fácil es añadir un archivo fijo, como puede ser un folleto de promoción o un manual de una máquina. Estos adjuntos fijos se añaden con el botón //Sel. fichero//.
 +{{ :usu:smartpdf:spdfdocfichero.png?600 |Documento fijo}}
 +
 +Si por lo contrario queremos crear un adjunto basándonos en datos de Smart, podemos escoger el botón //Sel. informe// y escoger un procedimiento para sacar la información de la base de datos. Al escoger un procedimiento se crea automáticamente una instrucción //select// en el campo //Comando//, que la podemos modificar según necesidad.\\
 +También se añaden automáticamente en la rejilla correspondiente los parámetros del comando (si los tiene).
 +{{ :usu:smartpdf:spdfdocgeneral.png?600 |Documento general}}
 +
 +Podemos poner para cada parámetro un valor fijo en la columna //Valor//, o una referencia a la lista de destinatarios, escogiendo el campo de la lista con F6 desde la columna //Nombre campo dataset//. Un parámetro sin valor ni referenia se deja en blanco (//nulo//).
 +
 +Si pinchamos en la pestaña //Datos//, el programa nos deja poner unos parámetros temporales para abrir la consulta. Esto es necesario si queremos crear el diseño del informe, desde el menú //Registro/Diseño//. El diseño del informe es imprescindible si queremos enviar el adjunto en formato **PDF**. Podemos guardar un ejemplo con los datos actuales de la pestaña //Datos// con el menú //Registro/Exportar a PDF//.
 +
 +El diseñador es parecido al de SmartOffice, pero no es posible utilizar los diseños que ya existen en SmartOffice.
 +{{ :usu:smartpdf:spdflazreportdisenador.png?600 |LazReport Diseñador}}
 +En el siguiente párrafo se explican algunas peculiaridades del diseñador de informes.
 +
 +También es posible enviar los datos en formato de hoja de cálculo o de texto estructurado. En este caso no definimos ningún diseño, pero en su lugar escogemos el formato a exportar en el campo //Cód. formato export//.
 +El formato **SYLK** es para la exportación en hoja de cálculo, mientras los otros formatos son para la exportación de texto.
 +
 +Si queremos quitar temporalmente un adjunto de un envío sin tener que borrar el documento por completo, podemos desmarcar el campo **Activo**.
 +
 +**Una vez que hayamos definido todos los adjuntos, podemos volver al formulario del lote y confirmar el lote con F11.** A partir de este momento ya no se puede cambiar ningún componente del lote, ni las tareas, ni los documentos.
 +
 +===== Diseñador =====
 +==== Enlaces URL ====
 +Es posible añadir enlaces URI a cualquier cuadro de texto que se posiciona en el diseño. Para que aparezca el enlace en el PDF solamente hay que rellenar la propiedad ''URLInfo'' del cuadro de texto.
 +
 +{{:usu:smartpdf:spdfdisenoenlace1.png?400  |Diseñador con enlace}}{{  :usu:smartpdf:spdfdisenoenlace2.png?400|PDF con enlace}}
 +
 +Hay que destacar que es posible usar una variable de la base de datos para determinar la propiedad ''URLInfo'', por ejemplo ''[LinDatos."S_URL_DOC"]''.
 +
 +==== Imagenes externos ====
 +Se puede añadir imagenes al diseño que se llenan desde ficheros guardados en carpetas locales o compartidas.
 +
 +Para que esto funcione tenemos que añadir un comando a la propiedad Memo:
 +  load(LinDatos.ENLACE)
 +El campo ENLACE de la fuente de datos LinDatos tiene que contener el nombre del fichero a cargar en la imagen. Esto funciona seguro con imagenes de tipo .jpg y .png. Para otros tipos hay que probar.
 +
 +{{ :usu:smartpdf:spdfimagenesexternos.png?600 |Imagenes externos}}
 +
 +Hay que tomar en cuenta que los ficheros sean accesibles desde el servidor donde funciona //SmartServicesPdf//, el servicio de Smart para generar y enviar los pdf.
 +
 +==== Fuentes ====
 +Si se instala //smartservicespdf// en Linux se debería tener cuidado con la selección de las fuentes.
 +
 +Cuando se crea un diseño en Windows hay que restringirse a fuentes que también existen en Linux, como por ejemplo **Arial** y **Times New Roman**.
 +
 +Con un tamaño pequeño puede haber problemas en Linux. Estos son las medidas probadas:
 +  * Arial: mayor o igual a 7px.
 +  * Times New Roman: mayor o igual a 6px.
usu/smartpdf/smartpdf_guia_de_iniciacion.1535959402.txt.gz · Última modificación: 2018/09/03 09:23 por stefan

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki