Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-02-2024
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 229
Poder: 18
Galahad Va por buen camino
Conversión / formato MIME a pdf

Hola, un saludo a tod@s.
Estoy utilizando un servicio web para acceder a unas etiquetas de una agencia de transporte.
Se Descarga un xml con un código binario base64 que si lo 'decodifico' en paginas web que hay para esto me presenta un pdf sin problemas.
Necesito a partir de ese código binario crear un pdf .
No lo consigo, me genera un fichero que no es legible .
El código de dicha función es:
Código Delphi [-]
Procedure DescargarEtiquetas( crutafichero:string );
var FStream : TFileStream;
    bytes: Tbytes;
begin

    bytes   := TNetEncoding.Base64.Decode( TEtiquetaEnvioRespuesta.GetEtiquetaEnvioResult.EtiquetaFile);
    if bytes <> nil then
    begin
       FStream := TfileStream.Create( crutafichero, fmcreate );
       try
          Fstream.write( bytes,length(bytes) );
       finally
          Fstream.free;
       end;
    end;
end;

Este dato 'TEtiquetaEnvioRespuesta.GetEtiquetaEnvioResult.EtiquetaFile' es de tipo TByteSoapArray
Entiendo que no estoy decodificando correctamente esos datos binarios..
en la agencia me comentan:

El método GetEtiquetaEnvio te ha devuelto la etiqueta PDF… lo que ves es código binario base64, que se debe convertir para para ver el contenido PDF – fichero o en este caso la etiqueta.
Con el ContentType o formato MIME (application/pdf) lo logras casi de forma directa..


¿ alguna idea ?
Gracias

Última edición por Casimiro Notevi fecha: 28-02-2024 a las 12:05:51.
Responder Con Cita
  #2  
Antiguo 28-02-2024
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Así "a ojo" sin ver lo que recibes, prueba esto:

Código Delphi [-]
procedure DescargarEtiquetas(crutafichero: string);
var
  FStream: TFileStream;
  bytes: TBytes;
begin
  bytes := TNetEncoding.Base64.DecodeStringToBytes(TEtiquetaEnvioRespuesta.GetEtiquetaEnvioResult.EtiquetaFile)  ;
  if Length(bytes) > 0 then
  begin
    FStream := TFileStream.Create(crutafichero, fmCreate);
    try
      FStream.WriteBuffer(bytes[0], Length(bytes));
    finally
      FStream.Free;
    end;
  end;
end;
Responder Con Cita
  #3  
Antiguo 28-02-2024
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 229
Poder: 18
Galahad Va por buen camino
Unhappy Problema conversión a Pdf

Gracias Casimiro,, pero no, no ha funcionado...

Mando unos ficheros zip adjuntos para ver si podéis ver algo más que yo..
Estos adjuntos son:
- el pdf resultante de la prueba (ilegible) (miprueba2.pdf)
- el fichero xml que me devuelve el servicio donde figuran los datos codificados. (zip dec_eti_etiquetaenvio....zip)
- un fichero txt con esa clave o datos codificados (codigobinariobase64.zip)
- una imagen con una prueba de decodificación de esos mismos datos desde una página web (aparecen las etiquetas correctas sin problemas) (imagen_2024-02).

Un saludo...
Imágenes Adjuntas
Tipo de Archivo: pdf MiPrueba2.pdf (37,3 KB, 3 visitas)
Archivos Adjuntos
Tipo de Archivo: zip CodigoBinarioBase64.zip (178,5 KB, 2 visitas)
Tipo de Archivo: zip DEC_ETI_EtiquetaEnvio_R0228115328.zip (178,8 KB, 2 visitas)
Tipo de Archivo: zip imagen_2024-02-28 12 18 36.zip (269,0 KB, 3 visitas)
Responder Con Cita
  #4  
Antiguo 28-02-2024
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
He probado con este código y funciona perfectamente (te adjunto el pdf resultante):
Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
  System.NetEncoding;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure DecodeBase64File(const inputFileName, outputFileName: string);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  DecodeBase64File('C:\Proyectos\CodigoBinarioBase64.txt', 'c:\Proyectos\archivo_decodificado.pdf');
end;

procedure TForm1.DecodeBase64File(const inputFileName, outputFileName: string);
var
  inputFileStream, outputFileStream: TFileStream;
  base64Decoder: TBase64Encoding;
begin
  try
    // Abrir el archivo de entrada en modo de solo lectura
    inputFileStream := TFileStream.Create(inputFileName, fmOpenRead);
    try
      // Crear un decodificador Base64
      base64Decoder := TBase64Encoding.Create;
      try
        // Crear un flujo de salida para el archivo decodificado
        outputFileStream := TFileStream.Create(outputFileName, fmCreate);
        try
          // Decodificar el contenido del archivo Base64 y escribirlo en el archivo de salida
          base64Decoder.Decode(inputFileStream, outputFileStream);
        finally
          outputFileStream.Free;
        end;
      finally
        base64Decoder.Free;
      end;
    finally
      inputFileStream.Free;
    end;
    ShowMessage('Decodificación completa.');
  except
    on E: Exception do
      ShowMessage('Error: ' + E.Message);
  end;
end;

end.
Imágenes Adjuntas
Tipo de Archivo: pdf archivo_decodificado.pdf (182,4 KB, 3 visitas)
Responder Con Cita
  #5  
Antiguo 28-02-2024
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 229
Poder: 18
Galahad Va por buen camino
Hola a Todos.
Ha funcionado Casimiro, ¡ Muchas Grácias !.
No he conseguido pasar la variable de tipo PBytessopArray a String para luego para esa string a un fichero de texto plano origen y utilizar tú función, pero al final he optado por ser práctico y leer el nodo 'EtiquetaFile' del xml generado que tiene ese valor .
Después Grabo en dicho fichero de texto dicha cadena , utilizo esa función y ya está.

Muchísimas Gracias..., que tengáis una buena semana
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
guardar un texto con formato en un nodo xml sin perder el formato danyfebrero Varios 4 15-08-2012 01:37:17
Como leer un Email en formato HTLM y que se muestren las imagenes y todo su formato jesus02018 Internet 0 28-12-2008 12:22:10
conversion de fecha texto a fecha formato date shinyi OOP 3 17-12-2007 21:19:49
Como cambiar el formato de un QRSysData en formato fecha Bitbanner Tablas planas 1 13-02-2005 13:33:26
Como Obviar el formato de Fecha del Servidor para Salvar sólo en formato "dd/mm/yyyy" R_Richards Varios 4 07-02-2005 16:57:19


La franja horaria es GMT +2. Ahora son las 01:09:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi