pdf a base64


([N4] gontorre) #1

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


([N1] wikan) #2

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.


([N4] gontorre) #3

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


([N1] cristianvg2003) #4

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,


([N1] adelo) #5

Hola:

¿No te falta hacer el importClass( “VByteArray” )?


([N3] pacosatu) #6

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é


([N4] gontorre) #7

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