# pdf a base64

**URL:** <https://foros.velneo.com/t/pdf-a-base64/9075>\
**Category:** Velneo\
**Created:** [6 Septiembre, 2016 08:01 UTC](https://foros.velneo.com/t/pdf-a-base64/9075 "2016-09-06T08:01:19Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![gontorre](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/gontorre/32/5728_2.png) [@gontorre](https://foros.velneo.com/u/gontorre)\
**Post date:** [6 Septiembre, 2016 08:01 UTC](https://foros.velneo.com/t/pdf-a-base64/9075/1 "2016-09-06T08:01:19Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [6 Septiembre, 2016 11:10 UTC](https://foros.velneo.com/t/pdf-a-base64/9075/2 "2016-09-06T11:10:42Z")

</div>

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](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](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.

---

<div class="post-metadata">

**Author:** ![gontorre](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/gontorre/32/5728_2.png) [@gontorre](https://foros.velneo.com/u/gontorre)\
**Post date:** [6 Septiembre, 2016 12:32 UTC](https://foros.velneo.com/t/pdf-a-base64/9075/3 "2016-09-06T12:32:25Z")

</div>

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:

```auto
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

---

<div class="post-metadata">

**Author:** ![cristianvg2003](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/cristianvg2003/32/5239_2.png) [@cristianvg2003](https://foros.velneo.com/u/cristianvg2003)\
**Post date:** [6 Septiembre, 2016 13:27 UTC](https://foros.velneo.com/t/pdf-a-base64/9075/4 "2016-09-06T13:27:21Z")

</div>

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,

---

<div class="post-metadata">

**Author:** ![adelo](https://avatars.discourse-cdn.com/v4/letter/a/76d3ee/32.png) [@adelo](https://foros.velneo.com/u/adelo)\
**Post date:** [6 Septiembre, 2016 14:32 UTC](https://foros.velneo.com/t/pdf-a-base64/9075/5 "2016-09-06T14:32:00Z")

</div>

Hola:

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

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [6 Septiembre, 2016 17:36 UTC](https://foros.velneo.com/t/pdf-a-base64/9075/6 "2016-09-06T17:36:12Z")

</div>

Hola Gonzalo.

En el código javascript te falta Abrir el fichero binario y algún paréntesis.

```auto

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é

---

<div class="post-metadata">

**Author:** ![gontorre](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/gontorre/32/5728_2.png) [@gontorre](https://foros.velneo.com/u/gontorre)\
**Post date:** [7 Septiembre, 2016 07:41 UTC](https://foros.velneo.com/t/pdf-a-base64/9075/7 "2016-09-07T07:41:24Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![yarumal](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/yarumal/32/5208_2.png) [@yarumal](https://foros.velneo.com/u/yarumal)\
**Post date:** [22 Junio, 2019 00:28 UTC](https://foros.velneo.com/t/pdf-a-base64/9075/8 "2019-06-22T00:28:12Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [22 Junio, 2019 10:01 UTC](https://foros.velneo.com/t/pdf-a-base64/9075/9 "2019-06-22T10:01:37Z")

</div>

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é

---

<div class="post-metadata">

**Author:** ![yarumal](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/yarumal/32/5208_2.png) [@yarumal](https://foros.velneo.com/u/yarumal)\
**Post date:** [22 Junio, 2019 13:20 UTC](https://foros.velneo.com/t/pdf-a-base64/9075/10 "2019-06-22T13:20:09Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [22 Junio, 2019 19:23 UTC](https://foros.velneo.com/t/pdf-a-base64/9075/11 "2019-06-22T19:23:45Z")

</div>

Hola yarumal.

Efectívamente, así lo debes hacer, pero usa la clase [VTextFile](https://doc.velneo.es/vtextfile.html) para cargar archivos de Texto.

Saludos  
Paco Satué
