Buenos días
Tengo la necesidad de generar un PDF con vReport y después adjuntarlo en un mensaje JSON como una cadena en base64.
¿Alguna idea de cómo abordarlo?
De antemano aviso que ando pez en javascript.
Toda ayuda será bienvenida.
Un saludo
Buenos días
Tengo la necesidad de generar un PDF con vReport y después adjuntarlo en un mensaje JSON como una cadena en base64.
¿Alguna idea de cómo abordarlo?
De antemano aviso que ando pez en javascript.
Toda ayuda será bienvenida.
Un saludo
Quizás te diga una locura o no sirve para volver a convertirlo de nuevo a pdf.
Usando las clases de vJavascript VFile y VByteArray, tienes métodos para leer el contenido de un fichero en VByteArray y ese contenido convertirlo en base64.
Leer el contenido y pasarlo a un VByteArray
https://velneo.es/info_v7_718_es/velneo_vdevelop_v7/scripts/clases/core/vfile/#readAll
Convertir un VByteArray en base64
https://velneo.es/info_v7_718_es/velneo_vdevelop_v7/scripts/clases/core/vbytearray/#toBase64
En teoría así tendrías la (enorme ristra) para guardar en el json.
Hola Manuel,
He mirado los recursos que me has dado, pero sin saber javascript es como darse contra un muro. A lo máximo que he llegado es a esto:
importClass( "VFile" );
var fi = new VFile(theRoot.varToString("FICHERO"));
var buff = new VByteArray();
buff = fi.readAll;
base64 = buff.toBase64().toLatin1String();
theRoot.setVar("CADBASE64", base64)
Pero me da error en buff.toBase64. Me dice “Result of expression ‘buff.toBase64’ [undefined] is not a function.”
Gracias y un saludo
Hola,
La verdad la metodología no esta muy práctica aunque de poder se puede, te recomiendo que mejor subas el pdf a algún lado y compartas y guardes el link en el JSON.
Pregunta => Es posible enviarlo como un binario simplemente ?
Un saludo,
Hola:
¿No te falta hacer el importClass( “VByteArray” )?
Hola Gonzalo.
En el código javascript te falta Abrir el fichero binario y algún paréntesis.
importClass("VFile")
var oFichero = new VFile(theRoot.varToString("FICHERO"))
if (oFichero.open(VFile.OpenModeReadOnly)) {
var oByteArray = oFichero.readAll()
var cBase64 = oByteArray.toBase64().toLatin1String()
alert("Tamaño original del Binario: " + oByteArray.length + "\n\nTamaño serializado en Base64: " + cBase64.length)
}
Tal como apunta Cristian no es un método muy eficiente cuando el fichero binario es de grandes dimensiones.
El tamaño una vez serializado puede aumentar hasta un 30%.
Luego está el tema de paso de la variable BASE64 del entorno javascript a Velneo y viceversa. El fuerte de Velneo no es precisamente la gestión de cadenas de texto en memoria.
Consulta a soporte sobre las limitaciones o desbordamientos que pueda haber cuando tengas que trabajar con PDF’s de varios megas, si es el caso.
Saludos
Paco Satué
Buenos días
Gracias a todos. Ya lo he resuelto con la correción de Paco.
No creo que tenga problema con el tamaño porque lo que voy a enviar son facturas que ocupan de media 30-35 Kb
La idea de generar el pdf ,subirlo a algún sitio y devolver la URL ya lo había pensado. De hecho lo tengo así montado, pero quería probar otras opciones.
Un saludo
Una pregunta se supone que en ese codigo el contenido del fichero está en la variable oByteArray? y si es así, como puedo leerlo…acceder a su contenido… o como puedo usar esa variable como parámetro para una función?
la idea es asignar el contenido de ese archivo el cual contiene una estructura xml como contenido adicional a una variable en JS.
Espero me entiendan.
Gracias.
Hola yarumal.
Si el archivo es una estructura xml no es necesario usar la clase VByteArray.
Puedes leer el archivo xml en una variable String y usarla de la manera habitual.
Saludos
Paco Satué
y…disculpa la pregunta, como sería eso?, es decir, es decir importo la clase vFile y le paso la ruta del archivo y ya tendría todo el contenido del archivo en una variable?
Hola yarumal.
Efectívamente, así lo debes hacer, pero usa la clase VTextFile para cargar archivos de Texto.
Saludos
Paco Satué