Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-06-2024
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 273
Poder: 15
darkamerico Va por buen camino
Red face Cargar un PDF de BD (base64) a un TWebBrowser

Saludos amigos,
Tengo la siguiente unidad:

Código Delphi [-]
unit uPrincipal;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  Vcl.StdCtrls, Data.DB, Vcl.Grids, Vcl.DBGrids, System.NetEncoding,
  Vcl.OleCtrls, SHDocVw;

type
  TfrmPrincipal = class(TForm)
    Label1: TLabel;
    txtIDDoc: TEdit;
    Label2: TLabel;
    txtTituloPDF: TEdit;
    Label3: TLabel;
    btnAbrirPDF: TButton;
    open: TOpenDialog;
    Label4: TLabel;
    gridArchivos: TDBGrid;
    web: TWebBrowser;
    Label5: TLabel;
    procedure btnAbrirPDFClick(Sender: TObject);
    procedure gridArchivosCellClick(Column: TColumn);
  private
    { Private declarations }
  public
    function PDFToBase64(const FilePath: string): string;
    procedure ViewPDFInWebBrowser(WebBrowser: TWebBrowser; const Base64Str: string);
  end;

var
  frmPrincipal: TfrmPrincipal;

implementation

uses
  uDM;

{$R *.dfm}

procedure TfrmPrincipal.ViewPDFInWebBrowser(WebBrowser: TWebBrowser; const Base64Str: string);
var
  MemoryStream: TMemoryStream;
  DataUrl: string;
  ByteStream: TStringStream;
  Bytes: TBytes;
begin
  MemoryStream := TMemoryStream.Create;
  Bytes := TEncoding.UTF8.GetBytes(Base64Str);
  MemoryStream.Clear;
  MemoryStream.WriteBuffer(Bytes[0], Length(Bytes));
  MemoryStream.Position := 0;

  try
    ByteStream := TStringStream.Create;
    try
      MemoryStream.Position := 0;
      ByteStream.LoadFromStream(MemoryStream);
      DataUrl := 'data:application/pdf;base64,' + TNetEncoding.Base64.EncodeBytesToString(ByteStream.Bytes);
      WebBrowser.Navigate('about:blank');

      WebBrowser.OleObject.Document.Write(VarArrayOf([DataUrl])); // <-- Error "Los Tipos No Coinciden"
      WebBrowser.Refresh;
    finally
      ByteStream.Free;
    end;
  finally
    MemoryStream.Free;
  end;
end;

function TfrmPrincipal.PDFToBase64(const FilePath: string): string;
var
  FileStream: TFileStream;
  Bytes: TBytes;
begin
  FileStream := TFileStream.Create(FilePath, fmOpenRead or fmShareDenyWrite);
  try
    SetLength(Bytes, FileStream.Size);
    FileStream.ReadBuffer(Bytes[0], FileStream.Size);
    Result := TNetEncoding.Base64.EncodeBytesToString(Bytes);
  finally
    FileStream.Free;
  end;
end;

procedure TfrmPrincipal.btnAbrirPDFClick(Sender: TObject);
var
  insertedOk: boolean;
  Base64PDF: string;
begin
  if open.Execute then
  begin
    Base64PDF := PDFToBase64(open.FileName);
    try
      dm.q_SavePDF.Close;
      dm.q_SavePDF.Params[0].AsInteger := StrToInt(txtIDDoc.Text);
      dm.q_SavePDF.Params[1].AsString := Trim(txtTituloPDF.Text);
      dm.q_SavePDF.Params[2].AsString := Base64PDF;
      dm.q_SavePDF.ExecSQL;
      insertedOk := True;
    except
      insertedOk := False;
    end;
    if not insertedOk then
    begin
      ShowMessage('Error: No se pudo Insertar el Registro');
      Exit;
    end
    else
    begin
      ShowMessage('Ok: Registro Insertado!');

    end;
  end;
end;

procedure TfrmPrincipal.gridArchivosCellClick(Column: TColumn);
begin
  ViewPDFInWebBrowser(web, gridArchivos.DataSource.DataSet.FieldByName('docPDF').AsString);
end;

end.

La grabacion funciona bien, cuando quiero ver el PDF haciendo clic en la grilla me aparece un error en la linea:

Código Delphi [-]
WebBrowser.OleObject.Document.Write(VarArrayOf([DataUrl])); // <-- Error "Los Tipos No Coinciden"

Alguien me daría una mano?

Atte
Americo
Responder Con Cita
 



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
Base64 IdDecoderMIME a zip GustavoCruz Internet 9 10-11-2020 07:57:12
Cargar una Imagen base64 en un Timage darkamerico Gráficos 7 25-10-2020 01:04:29
Cargar esta web en un Twebbrowser problemas user agent cocute Varios 8 02-11-2014 17:57:19
Mostrar imagen que viene en Base64 jars Gráficos 7 25-06-2012 09:42:57
Cargar datos formulario web en Twebbrowser Rockin Internet 8 23-02-2011 12:50:34


La franja horaria es GMT +2. Ahora son las 15:41:20.


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