Ir para conteúdo
Fórum Script Brasil
  • 0

Importação dados PDF


Natã Carlos

Pergunta

Olá, estou há alguns dias procurando uma solução para meu problema, tenho alguns relatórios em PDF que gostaria de importar o texto, no momento estou abrindo o pdf e salvando como texto e acessando o txt salvo pelo delphi, gostaria de eliminar esse procedimento de abrir o pdf e salva-lo como texto.

se alguém puder me ajudar.

Link para o comentário
Compartilhar em outros sites

19 respostass a esta questão

Posts Recomendados

  • 0

OK, mas o que eu estou buscando é o código desses programas, gostaria de colocar isso no meu sistema, mas não encontro. Ou até mesmo utilizar um desses programas para fazer isso, mas de forma automática.

Por exemplo, com opendialog, chamar o arquivo que o usuário deseja, abrir o programa (pdf2text), ele mesmo fazer a conversão automática e fechar( não sei se existe código para manipular programas externos), e assim logo após esse processo, fazer uma linha de comando para pegar o arquivo convertido.

Claro que tudo isso em código, o usuário só iria clicar e escolher o arquivo PDF e depois do processo os dados já estaria em texto no delphi.

Será que consegui ser claro?? Isso é impossível?? Por favor me ajudem.

Editado por Natã Carlos
Link para o comentário
Compartilhar em outros sites

  • 0

OK... Código para chamar um arquivo PDF usando o OpenDialog, converte-lo para texto e copiar para um memo

OBS: Voce vai precisar do arquivo acrobat.tlb

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
  App, AVDoc:Variant;
begin
  OpenDialog1.Execute;

  App:=CreateOleObject('AcroExch.App');
  App.Show;
  AVDoc:=App.GetActiveDoc;
  AVDoc.Open(OpenDialog1.filename,'');

  //seleciona tudo e copia para o clipboard
  App.MenuItemExecute('Edit');
  App.MenuItemExecute('SelectAll');
  App.MenuItemExecute('Edit');
  App.MenuItemExecute('Copy');
  Memo1.PasteFromClipboard;
  App.Exit;
end;


end.
outro exemplo:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, acrobat_tlb;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


var
  Form1: TForm1;

implementation

uses ComObj;

{$R *.dfm}
{$TYPEDADDRESS OFF} //muss so sein (this have to be)
var
  PDDoc: Acrobat_TLB.CAcroPDDoc;
  PDPage: Variant;
  PDHili: Variant;
  PDTextS: Variant;
  acrobat: Variant;
  Result: Boolean;
  NTL, i, j, Pagecount: Integer;
  zeilen: string;
  stichwortcounter: Integer;
  Size: Integer;
  gesamtstring: AnsiString;
  zwreal: Real;

procedure TForm1.Button1Click(Sender: TObject);
  function removecrlf(workstring: string): string;
  var 
    i: Integer;
  begin
    removecrlf := '';
    for i := 0 to Length(workstring) do
    begin
      if workstring[i] = #13 then
        workstring[i] := ' ';
      if workstring[i] = #10 then
        workstring[i] := ' ';
    end;

    removecrlf := workstring;
  end;
begin
  if not opendialog1.Execute then Exit;

  memo1.Clear;

  gesamtstring := '';
  stichwortcounter := 0;
  Size := 0;
  try

    //Object erstellen
    acrobat := CreateOleObject('AcroExch.pdDoc');

    //PDF Datei in Object öffnen
    Result := acrobat.Open(opendialog1.FileName);


    if Result = False then
    begin
      messagedlg('Kann Datei nicht öffnen', mtWarning, [mbOK], 0);
      Exit;
    end;

    for j := 0 to acrobat.GetNumPages - 1 do
    begin
      memo1.Lines.Add('----------------------------------------------');
      //Erste Seite des Dokuments aktiv setzen  (first page)
      PDPage := acrobat.acquirePage(j);

      //Ein Highlight Object mit 2000 Elementen erzeugen
      PDHili := CreateOleObject('AcroExch.HiliteList');
      Result := PDHili.Add(0, 4096);

      //Erzeuge eine Markierung über den ganzen Text
      PDTextS := PDPage.CreatePageHilite(PDHili);

      ntl := PDTextS.GetNumText;

      for i := 0 to ntl - 1 do
      begin
        zeilen := PDTextS.GetText(i);
        if (Length(zeilen) > 0) and (zeilen <> '') then
          memo1.Lines.Add(removecrlf(zeilen));
        gesamtstring := gesamtstring + removecrlf(zeilen);
        //nur für statistik
        Size := Size + SizeOf(zeilen);
        Inc(stichwortcounter);

        Application.ProcessMessages;
      end;

      //Wieder freigeben
      pdhili         := Unassigned;
      pdtextS        := Unassigned;
      pdpage         := Unassigned;
      label2.Caption := IntToStr(stichwortcounter);
      label4.Caption := IntToStr(Size);
      label2.Refresh;
      label4.Refresh;
    end; //for i to pagecount


  except 
    on e: Exception do
    begin
      messagedlg('Fehler: ' + e.Message, mtError, [mbOK], 0);
      Exit;
    end;
  end;
  if Size > 1024 then
  begin
    zwreal := Size / 1024;
    str(zwreal: 2: 1,zeilen);
    label4.Caption := zeilen;
    label5.Caption := 'KB';
  end;
  memo1.Lines.SaveToFile(Extractfilepath(Application.exename) + '\debug.txt');
end;

end.

Post relacionado ao assunto

http://scriptbrasil.com.br/forum/index.php?showtopic=156472

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Está dando esse erro:

....EOleSysError with message 'Cadeia de caracteres de classe inválida'....

Quando passa por essa linha de comando:

App:=CreateOleObject('AcroExch.app');

Exato... esse erro ocorre porque não foi encontrado o arquivo acrobat.tlb

Esse arquivo vem junto com o pacote do acrobat reader ( qualquer versão )

No link abaixo, tem a versão do acrobat reader 9.0 em portugues

http://pt.kioskea.net/download/start/baixa...der-9-portugues

se voce tiver alguma versão instalada no seu micro procure:

C:\Program Files\Adobe\Acrobat 4.0\Acrobat\Acrobat.tlb

C:\Program Files\Adobe\Acrobat 5.0\Acrobat\Acrobat.tlb

C:\Program Files\Adobe\Acrobat 6.0\Acrobat\Acrobat.tlb

C:\Program Files\Adobe\Acrobat 7.0\Acrobat\Acrobat.tlb

C:\Program Files\Adobe\Acrobat 8.0\Acrobat\Acrobat.tlb

C:\Program Files\Adobe\Acrobat 9.0\Acrobat\Acrobat.tlb

OBS: copie o arquivo para a pasta C:\Windows\Sistem32

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Infelizmente ainda não está dando certo, será que não existe outro modo de incluir essa biblioteca???

O erro persiste.

Project Project1.exe raised exception class EOleSysError with message 'Cadeia de caracteres de classe inválida'. Process stopped. Use Step ou Run to continue.

nessa linha de código:

App:=CreateOleObject('AcroExch.App');

Andei pesquisando nesse site e falam em instalar Adobe Acrobat Viewer, mas nem isso eu consigo, ele pede uma versão do Java e já tentei instalar todas, mas não vai.

https://www.scriptbrasil.com.br/forum/lofiv...hp/t156472.html

Agora que vi, acho que foi você mesmo que postou!!!!

Editado por Natã Carlos
Link para o comentário
Compartilhar em outros sites

  • 0
Andei pesquisando em alguns sites e falam em instalar Adobe Acrobat Viewer, mas nem isso eu consigo, ele pede uma versão do Java e já tentei instalar todas, mas não vai.

para o java, veja no site da receita federal

http://www.receita.fazenda.gov.br/Pessoafi...JavaWindows.htm

eu tenho instalado na minha maquina o acrobat 4.0, 5.0 e o 6.0 e o acrobat distiller

no meu micro o exemplo que te passei funciona certinho

veja no site da adobe

http://www.adobe.com/products/acrviewer/acrvdnld.html

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

A coisa tá complicada. Instalei tudo em outro micro, todas as versões do adobe, mais o distiller, mas continua dando o mesmo erro.

O adobe acrobat viewer, não tem jeito não consgui instalar em nenhuma máquina, mesmo instalando o Microsoft VM antes, não dá certo.

Será que é por causa desse viewer que o sistema dá erro naquela linha????

Link para o comentário
Compartilhar em outros sites

  • 0
Será que é por causa desse viewer que o sistema dá erro naquela linha????

o arquivo necessario é aquele que te passei no link... mas pode ser que voce tenha que incluir a referencia da bibilioteca do Acrobat no seu projeto

Va em Menu > Tools > Environment Options > Library ... e faça a referencia da biblioteca do adobe

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz refenrencia a todos os acrobats, mas continua o mesmo erro. Vou postar meu código completo aqui.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables, Buttons, StrUtils,

ComCtrls, ExtCtrls, ExcelXP, OleServer, ShellAPI, PDF, OleCtrls,

AcroPDFLib_TLB, ActiveX, acrobat_tlb;

type

TForm1 = class(TForm)

Label2: TLabel;

Button2: TButton;

Memo1: TMemo;

OpenDialog1: TOpenDialog;

Button3: TButton;

DBGrid2: TDBGrid;

Button5: TButton;

RGLayout: TRadioGroup;

DBG_export: TDBGrid;

GroupBox1: TGroupBox;

Label4: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

Label11: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label12: TLabel;

Button1: TButton;

SaveDialog1: TSaveDialog;

EDT_Hist_venda_cred: TEdit;

EDT_Hist_venda_debi: TEdit;

EDT_Hist_desp_cred: TEdit;

EDT_Hist_desp_debi: TEdit;

EDT_Hist_desp_cartao: TEdit;

EDT_despesas: TEdit;

EDT_cartao: TEdit;

EDT_banco: TEdit;

EDT_caixa: TEdit;

GroupBox2: TGroupBox;

CBProvisao: TCheckBox;

CBDespesa: TCheckBox;

CBPagamento: TCheckBox;

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormCreate(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses Unit5, ComObj;

{$R *.dfm}

{$TYPEDADDRESS OFF}

procedure TForm1.Button3Click(Sender: TObject);

var

datavalida:boolean;

TotalParc, QuantParc, Cont, Linhas, I,X,J,Y: Integer;

Ano, ano2, ValorParc, ValorDesp, Parc, Caminho, Memo, Descricao, Data1, Data2, DataAnt, Numero1, Numero2, Numero3, ValorBru, ValorLiq: String;

Stringlist2, StringList, DocImport: TStringList;

Excel : Variant;

Valor, SomaParc : Currency;

CData: TDateTime;

App,AVDoc:Variant;

PDDoc: Acrobat_TLB.CAcroPDDoc;

PDPage: Variant;

PDHili: Variant;

PDTextS: Variant;

acrobat: Variant;

Result: Boolean;

NTL, i2, j2, Pagecount: Integer;

zeilen: string;

stichwortcounter: Integer;

Size: Integer;

gesamtstring: AnsiString;

zwreal: Real;

begin

If OpenDialog1.Execute Then

begin

Caminho:= OpenDialog1.FileName;

case RGLayout.ItemIndex of

0:

App:=CreateOleObject('AcroExch.App');

App.Show;

AVDoc:=App.GetActiveDoc;

AVDoc.Open(OpenDialog1.filename,'');

//seleciona tudo e copia para o clipboard

App.MenuItemExecute('Edit');

App.MenuItemExecute('SelectAll');

App.MenuItemExecute('Edit');

App.MenuItemExecute('Copy');

Memo1.PasteFromClipboard;

App.Exit;

end;

end;

Link para o comentário
Compartilhar em outros sites

  • 0

Ok, fiz a limpa, reinstalei o delphi mas continua dando erro, to começando a desconfiar que é o PDF que está com problema, será que por ele ter algumas figuras pode estar atrapalhando, fico em dúvida pois ele nem chega a abrir o aplicativo.

Será que é a versão do meu Delphi??? Estou usando Delphi 7.0

Link para o comentário
Compartilhar em outros sites

  • 0
Ok, fiz a limpa, reinstalei o delphi mas continua dando erro, to começando a desconfiar que é o PDF que está com problema, será que por ele ter algumas figuras pode estar atrapalhando, fico em dúvida pois ele nem chega a abrir o aplicativo.

Será que é a versão do meu Delphi??? Estou usando Delphi 7.0

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
  App, AVDoc:Variant;
begin
  OpenDialog1.Execute;

  App:=CreateOleObject('AcroExch.App');
  App.Show;
  AVDoc:=App.GetActiveDoc;
  AVDoc.Open(OpenDialog1.filename,'');

  //seleciona tudo e copia para o clipboard
  App.MenuItemExecute('Edit');
  App.MenuItemExecute('SelectAll');
  App.MenuItemExecute('Edit');
  App.MenuItemExecute('Copy');
  Memo1.PasteFromClipboard;
  App.Exit;
end;


end.

acabei de fazer um teste usando o código acima, no delphi 7, para abrir um arquivo pdf que tinha varias figuras de peixes .. como pode ver somente o texto foi extraido e jogado dentro de um memo

PowerPdf DBImage Example

Clown Triggerfish

Ballistoides conspicillum

Length_In: 19.69

Red Emperor

Lutjanus sebae

Length_In: 23.62

Giant Maori Wrasse

Cheilinus undulatus

Length_In: 90.16

Blue Angelfish

Pomacanthus nauarchus

Length_In: 11.81

Lunatail Rockcod

Variola louti

Length_In: 31.50

Firefish

Pterois volitans

Length_In: 14.96

PowerPdf DBImage Example

Ornate Butterflyfish

Chaetodon Ornatissimus

Length_In: 7.48

Swell Shark

Cephaloscyllium ventriosum

Length_In: 40.16

Bat Ray

Myliobatis californica

Length_In: 22.05

California Moray

Gymnothorax mordax

Length_In: 59.06

LingCod

Ophiodon elongatus

Length_In: 59.06

Cabezon

Scorpaenichthys marmoratus

Length_In: 38.98

PowerPdf DBImage Example

Atlantic Spadefish

Chaetodiperus faber

Length_In: 35.43

Nurse Shark

Ginglymostoma cirratum

Length_In: 157.48

Spotted Eagle Ray

Aetobatus narinari

Length_In: 78.74

Yellowtail Snapper

Ocyurus chrysurus

Length_In: 29.53

Redband Parrotfish

Sparisoma Aurofrenatum

Length_In: 11.02

Great Barracuda

Sphyraena barracuda

Length_In: 59.06

PowerPdf DBImage Example

French Grunt

Haemulon flavolineatum

Length_In: 11.81

Dog Snapper

Lutjanus jocu

Length_In: 35.43

Nassau Grouper

Epinephelus striatus

Length_In: 35.83

Bluehead Wrasse

Thalassoma bifasciatum

Length_In: 5.91

Yellow Jack

Gnathanodon speciousus

Length_In: 35.43

Redtail Surfperch

Amphistichus rhodoterus

Length_In: 15.75

PowerPdf DBImage Example

White Sea Bass

Atractoscion nobilis

Length_In: 59.06

Rock Greenling

Hexagrammos lagocephalus

Length_In: 23.62

Senorita

Oxyjulis californica

Length_In: 9.84

Surf Smelt

Hypomesus pretiosus

Length_In: 9.84

Creio que o problema esteja no seu adobe acrobat

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Já achei estranho por não encontrar aquele biblioteca em nenhum lugar, e mesmo depois de instalar todos aqueles acrobats e ainda não apareceram, tive que copiar, tá estranho isso.

Mas obrigado pela ajuda até agora, vou tentar instalar em outro micro que tenha um windows completo, estou usando o Win 7 home nessa máquina, qualquer novidade irei postar aqui.

Editado por Natã Carlos
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...