#1
|
|||
|
|||
Convertir fichero en base 64
Hola!
Estoy creando una RFC que recibe un fichero en base64 y lo tiene que convertir a XML o PDF (dependiendo de la opción que reciba). He encontrado esta función SSFC_BASE64_DECODE, pero no sé como indicarle que quiero que me lo convierta a XML o a PDF. Tampoco sé si es está función la que debería usar. ¿Me podéis ayudar? Gracias!! |
#2
|
|||
|
|||
Xml
Bueno, creo que ahí tienes 2 problemas, uno que al parecer ya has resuelto, que es decodificar el archivo que estaba en base64... ahora tu problema es convertirlo a XML o PDF.
he aquí unos links para convertir una tabla interna (que supongo que ahí tendrás lo que subiste de tu archivo) a XML: espero te pueda ser util. |
#3
|
|||
|
|||
Gracias, pero ya los vi y no funcionan.
¿Alguien sabe alguna solución más? Me interesa preferiblemente el caso de pasar a PDF. Gracias |
#4
|
|||
|
|||
Podrían decirme si es posible pasar a PDF un archivo en formato binario base64 o en formato binario? Si es así, me podrían indicar cómo?
Llevo varios días con esto y no encuentro nada que me sirva Muchas gracias. |
#5
|
|||
|
|||
Prueba a hacer lo siguiente
Convierte el string que te llega en base 64 a un string binario utilizando cualquiera de los metodos que te han indicado anteriormente, con las funciones decode/encode o bien con la clase cl_abap_conv_in_ce Ese string binario tendras que meterlo dentro de una tabla por lo que tendras que hacer un algoritmo o bien mirar si te sirve la funcion CONVERT_STRING_TO_TABLE u otra similar, la tabla destino deberia almacenar los datos en binario tambien, creo que tendrias que definirla mas o menos asi: DATA: begin of tabla occurs 0, linea(1024) type x, end of tabla. Una vez que tengas tu STREAM BINARIO en una tabla podras descargarlo con la funcion GUI_DOWNLOAD si es en online y haciendo open dataset for output in binary mode si lo estuvieras haciendo en fondo Mas o menos seria algo asi *ONLINE GUI_DOWNLOAD FILENAME = ruta donde depositar el fichero terminando en .pdf FILETYPE = 'BIN'. DATA_TAB = tabla que contiene el string *FONDO open dataset dst for output in binary mode. loop at tabla into linea. transfer linea to dst. "Aqui a lo mejor podrias hacer un transfer string to dst *y te ahorrarias tener que convertir el string a tabla endloop. close dataset. Prueba y nos cuentas Úlima edición por ballan fecha: 10/11/09 a las 14:34:03. |
#6
|
|||
|
|||
Hola ballan!
Ante todo, gracias por contestar. He probado lo que me has dicho, y me crea un pdf pero no me deja abrirlo. El código que he creado es el siguiente: DATA: fic_binario TYPE xstring. DATA: string_binario TYPE string. DATA: BEGIN OF lines occurs 100, tdline(132). DATA: END OF lines. "Se convierte el fichero de binario64 a binario CALL FUNCTION 'SSFC_BASE64_DECODE' EXPORTING B64DATA = fichero_64 IMPORTING BINDATA = fic_binario. string_binario = fic_binario. "Se pasa a tabla interna CALL FUNCTION 'CONVERT_STRING_TO_TABLE' EXPORTING I_STRING = string_binario I_TABLINE_LENGTH = 132 TABLES ET_TABLE = lines. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING FILENAME = 'C:\Documents and Settings\usr\Escritorio\Fic1.pdf' FILETYPE = 'BIN' TABLES DATA_TAB = lines . No sé si puede ser por la longitud de cada línea de la tabla. También he probado a insertar en la tabla el string sin utilizar la función 'CONVERT_STRING_TO_TABLE' y a utilizar open dataset, pero esto último es para crear archivos en el servidor y yo lo quiero en local. ¿Alguna idea de por qué me está fallando? Gracias!! |
#7
|
|||
|
|||
Creo que el problema esta en que tu tabla esta definida como texto y no como datos binarios
Tu has definido tu tabla asi: DATA: BEGIN OF lines occurs 100, tdline(132). DATA: END OF lines. Asi almacenarias caracteres y lo que tienes que hacer es almacenar datos en binario Prueba a definir tu tabla asi DATA: BEGIN OF lines occurs 100, tdline(1024) type x. DATA: END OF lines. Quiza te de problemas la funcion de convertir string en tabla pero entonces busca otra funcion o bien create un minialgoritmo de este estilo (tendras que cambiar algo pero es para que te hagas una idea) data: lv_divisor type i, lv_resto type i, lv_longitud type i, lv_indice type i. do. lv_longitud = strlen( cadena ). lv_divisor = lv_longitud div 256. lv_resto = lv_longitud div 256. lv_indice = 256 * sy-index. lines-tdline = lv_cadena+lv_indice(256). append lines. clear lines. if lv_divisor is initial. exit. endif. enddo. Sigue probando y comenta los resultados |
#8
|
|||
|
|||
Hola..hace tpo tuve que imprimir un reporte a pdf..lamentablemente no recuerdo el codigo exacto..pero creo que lo que hicimos fue definir un tipo de impresora en sap que permitia guardar lo que uno le mandara al spool como un pdf.
|
#9
|
|||
|
|||
Al final me ha funcionado cambiando mi tabla a tipo binario y metiendo mediante código el string en la tabla, tal y como decía Ballan.
Sólo comentar, por si a alguien le ayuda, que el offset que he ido utilizando es 255 (no 256), ya que si no, el fichero pdf no se puede abrir. Muchiiiiiiiisimas gracias por vuestra ayuda!!! |
#10
|
|||
|
|||
Hola de nuevo!
Como dije al principio, el programa que estoy creando debe convertir tanto a pdf como a xml. El problema es que cuando intento convertirlo a xml, me crea el archivo pero no me lo abre. Miro su contenido abiréndolo con un bloc de notas y veo que no me genera los tags (aunque sí el contenido), además me crea caracteres extaños. Este es un ejemplo: P1999-10-20 Alice SmithS16123 Maple StreetMill Valley CA90952 Robert SmithPê Old Town PA95819 PHurry, my lawn is going wild! 872-AA Lawnmower 1 148.95 PConfirm this is electric A926-AA Baby Monitor 1 39.98 AP1999-05-21 He probado a usar la función SAP_CONVERT_TO_XML_FORMAT, pero no me funciona. ¿Podríais ayudarme? Gracias de antemano |
Herramientas | Buscar en Tema |
Desplegado | |
|
|