Base64 a PDF

473 views
Skip to first unread message

Juan Antonio Buerba

unread,
Mar 12, 2022, 1:46:59 PM3/12/22
to Comunidad de Visual Foxpro en Español
Buenas tardes amigos, ya logre haer mi timbrado desde VFP, era mas facil de lo que pensaba.
Ahora bien cuando traigo el xml y el pdf de mi factura me envia el pdf en base64, como puedo convertirlo a pdf ???
me podrian ayudar

Esteban Herrero

unread,
Mar 12, 2022, 4:34:56 PM3/12/22
to publice...@googlegroups.com

Hola.

Podes utilizar una clase q es gratuita q se llama b64Helper.vcx.

Haces lo siguiente, extraes del xml el codigo 64 en una variable x ejemplo RemitoQR y luego lo convertis a archivo.

  cFile = RemitoQr
  cv = NEWOBJECT("b64Helper","b64Helper.vcx")
  _tablac = SYS(2015)
  STRTOFILE(cv.decodeString(cFile),Thisform.dirapp + _tablac + '.pdf')
  cv = NULL

Ahora no utilizo mas esta clase xq uso todo con Chilkat, pero no significa q no funcione...

x sino conseguis la clase, el método DecodeString este es el código

LPARAMETERS pcB64
 LOCAL nFlags, nBufsize, cDst
 nFlags=1  && base64
 nBufsize=0
 CryptStringToBinary(@pcB64, LEN(m.pcB64),nFlags, NULL, @nBufsize, 0,0)
 cDst = REPLICATE(CHR(0), m.nBufsize)
 IF CryptStringToBinary(@pcB64, LEN(m.pcB64),nFlags, @cDst, @nBufsize, 0,0) = 0
  RETURN ""
 ENDIF
 RETURN m.cDst

Saludos

Esteban

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/d05afd20-51cb-45b9-80b7-a3f1ddb0b1b1n%40googlegroups.com.

Víctor Hugo Espínola Domínguez

unread,
Mar 12, 2022, 4:47:12 PM3/12/22
to publice...@googlegroups.com
Desde VFP7 existe la función STRCONV, con el parámetro 14 convierte desde base 64 a binario.
image.png

Saludos,
Víctor.
Lambaré - Paraguay.



--

Juan Antonio Buerba

unread,
Mar 13, 2022, 9:44:03 AM3/13/22
to Comunidad de Visual Foxpro en Español
Muchas gracias por su ayuda
Encontre un EXE que me hace la conversion sin problema si a alguien le interesa con gusto se los puedo enviar.
Ahora bien...
tengo otro problema
el archivo que me manda el WS viene en base64 como les comente pero viene todo junto el xml y el pdf
por obvias razones mande el response a un campo memo mi problema es:
como separo el xml en un archivo y el pdf en otro.
el campo memo con el response viene mas o menos asi:
{"succeed":true,"code":2000,"result":{"items":[{"requestUuid":"187e5872-2495-47fb-b8d9-53cd16cb44a4","succeed":true,"xml":"77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pgo8Y2ZkaTpDb21wcm9iYW50ZSBFeHBvcnRhY2lvbj0iMDEiIEx1Z2FyRXhwZWRpY2lvbj0iNzYwNDAiIE1ldG9kb1BhZ289IlBVRSIgVGlwb0RlQ29tcHJvYmFudGU9IkkiIFRvdGFsPSIzMDQuMzAiIE1vbmVkYT0iTVhOIiBTdWJUb3RhbD0iMjYyLjMzIiBDZXJ0aWZpY2Fkbz0iTUlJRjVUQ0NBODJnQXdJQkFnSVVNREF3TURFd01EQXdNREExTURjM01qYzNNamd3RFFZSktvWklodmNOQ","pdf":"JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL1hPYmplY3QvQ29sb3JTcGFjZS9EZXZpY2VSR0IvU3VidHlwZS9JbWFnZS9CaXRzUGVyQ29tcG9uZW50IDgvV2lkdGggNzkvTGVuZ3RoIDc0NDAvSGVpZ2h0IDEyMC9GaWx0ZXIvRENURGVjb2RlPj5zdHJlYW0K/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAUAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAgICAgICAgICAgMCGCg=="}]},"message":"Petición satisfactoria."}

Claro con muchos mas caracteres
Ojala y me puedan ayudar

martin bonansea

unread,
Mar 14, 2022, 9:01:25 AM3/14/22
to publice...@googlegroups.com
Hola Juan, según veo estás recibiendo un json.
Una forma práctica de que puedas ver que recibis para poder interpretarlo es ir a https://jsonformatter.org/ y en la columna de la izquierda pegas tu string json.
En la columna de la derecha te muestra el resultado:
image.png

Vas a tener que parsear tu json para obtener los string que precisas.
Hay una herramienta llamada jsonfox muy simple que te facilita todo esto creado por el amigo y master Irwin Rodriguez que podes clonar desde aqui https://github.com/Irwin1985/JSONFox

Saludos.
 

Juan Antonio Buerba

unread,
Mar 14, 2022, 10:02:56 AM3/14/22
to Comunidad de Visual Foxpro en Español
LISTO AMIGOS, TODO RESUELTO !!
Les mando el codigo por si a alguno le interesa y no le tega que sufrir tanto...

***** GENERACION DEL JSON PARA EL POST *******
sihaytimbre=ATC('"succeed":true,"uuid":"', respuesta)
IF sihaytimbre > 0 && solamente si el Timbrado fue correcto
postimb1=0
postimb2=0
postimb1=ATC('"succeed":true,"uuid":"', respuesta) + 23
*postimb2=postimb1 + 36 && longitud del timbre
*WAIT WINDOW "POS 1: " + ALLTRIM(STR(POSTIMB1)) + "...POS 2: " + ALLTRIM(STR(POSTIMB2))
thisform.Uuid.value=SUBSTR(respuesta,postimb1,36)
*WAIT WINDOW "El timbre es: " + eltimbre
REPLACE Jsonpdf WITH "{"
REPLACE Jsonpdf WITH CHR(13) + CHR(10)+ '"entity": {' ADDITIVE
REPLACE Jsonpdf WITH CHR(13) + CHR(10)+ '"data":{' ADDITIVE
REPLACE Jsonpdf WITH CHR(13) + CHR(10)+ '"comprobantes":[' ADDITIVE
REPLACE Jsonpdf WITH CHR(13) + CHR(10)+ '{' ADDITIVE
*REPLACE Jsonpdf WITH CHR(13) + CHR(10)+ '"requestUuid" : "ef55a70d-97fe-4d33-a580-8f7daf7c60be"' ADDITIVE
REPLACE Jsonpdf WITH CHR(13) + CHR(10)+ '"requestUuid" : "' + thisform.Uuid.value + '"' ADDITIVE
REPLACE Jsonpdf WITH CHR(13) + CHR(10)+ '}' ADDITIVE
REPLACE Jsonpdf WITH CHR(13) + CHR(10)+ ']' ADDITIVE
REPLACE Jsonpdf WITH CHR(13) + CHR(10)+ '}' ADDITIVE
REPLACE Jsonpdf WITH CHR(13) + CHR(10)+ '}' ADDITIVE
REPLACE Jsonpdf WITH CHR(13) + CHR(10)+ '}' ADDITIVE
***** FINALIZA GENERACION DEL JSON PARA EL POST *******

lCurl= 'https://app.facture.com.mx/api/facturacion/recuperar'

oHttp = CREATEOBJECT("msxml2.serverxmlhttp.6.0")
oHttp.OPEN('POST',lCurl,.F.)
ohttp.setrequestheader("Authorization", "Bearer " + "a57adcc8b2007210b43ec79ea08e6a8b")
ohttp.setrequestheader("Accept", "application/json")
ohttp.setrequestheader("Content-Type", "application/json")
oHttp.send(Jsonpdf)

REPLACE Xmlypdf WITH oHTTP.RESPONSETEXT
*REPLACE RESPUESTA WITH STRTRAN(RESPUESTA,thisform.Quitaencode,"Encode : ACEPTADO CORRECTAMENTE")
*thisform.edtRespuesta.setFocus()
***** SEPARA XML Y PDF ****

posxml1=ATC('true,"xml":"', Xmlypdf) + 12
posxml2=ATC('","pdf":"', Xmlypdf)
longxml=posxml2 - posxml1
lafact=ALLTRIM(PAFACTURE.Numfac)
elxml="R:\ENCRIPT\FACT_T"+lafact+"_XML.TXT"
STRTOFILE(SUBSTR(Xmlypdf,posxml1,longxml),elxml)

pospdf1=ATC('","pdf":"', Xmlypdf) + 9
pospdf2=ATC('"}]},', Xmlypdf)
longpdf=pospdf2 - pospdf1
elpdf="R:\ENCRIPT\FACT_T"+lafact+"_PDF.TXT"
STRTOFILE(SUBSTR(Xmlypdf,pospdf1,longpdf),elpdf)
xml_ok="R:\XML\FACT_T"+lafact+".XML"
pdf_ok="R:\PDF\FACT_T"+lafact+".PDF"
oApp.Rutaxml=xml_ok
oApp.Rutapdf=pdf_ok
RUN BDE64.EXE D &elxml &xml_ok /N
RUN BDE64.EXE D &elpdf &pdf_ok /N

algunerror = .F.
IF FILE(xml_ok)
        thisform.vexml.Visible=.T.
ELSE
        algunerror=.T.
        WAIT WINDOW "El archivo XML no se pudo crear..."
ENDIF
IF FILE(pdf_ok)
        thisform.vepdf.Visible=.T.
ELSE
        algunerror=.T.
        WAIT WINDOW "El archivo PDF no se pudo crear..."
ENDIF

IF algunerror = .T.
        WAIT WINDOW "EXISTE ALGUN ERROR EN LA IMPORTACION DE EL XML O PDF, VERIFIQUE SU INFORMACION..."
ELSE
        WAIT WINDOW "IMPORTACION DE XML Y PDF REALIZADA CORRECTAMENTE !!!"
ENDIF


***** FIN SEPARADOR DE XML Y PDF

ELSE

        WAIT WINDOW "NO EXISTE UN TIMBRE EN ESTA PETICION..."

ENDIF
Reply all
Reply to author
Forward
0 new messages