Beranda > Delphi > …read text from a PDF doc without using ActiveX?

…read text from a PDF doc without using ActiveX?

Author: Stefan Wimmer

Category: Files

{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

So jetzt hab ich endlich eine Lösung gefunden wie man
den gesamten Text aus einer PDF Datei (auch mit mehreren Seiten möglich)
auslesen kann.
Ich muss mich schon gleich mal im vorherein für meine unsaubere
Programmierung entschuldigen, aber ich hoffe ihr könnt trotzdem was
damit anfangen! Das Formular beinhaltet ein TMemo, 5 TLabel, 1 TButton
und einen OpenDialog

ach ja, ihr müsst vorher noch eine Typbibliothek einfügen,
öffnet dazu den Typbibliothek Importieren Dialog (unter Projekt zu
finden) und Wählt beim Hinzufügen den Ordner von Adobe Acrobat aus.
Dort solltet ihr eine Datei namens Acrobat.tbl finden, wenn nicht dann
einfach mal suchen.
Jetzt noch die Unit Anlegen dann Installieren und fertig.
viel spass

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

This tip show the way to cath the whole text of a PDF document.

You will need:
– 1 TMemo, 5 TLabel, 1 TButton and 1 OpenDialog
– to import the typelibrary from Adobe Acrobat (look fo Acrobat.tbl)

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}

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.


http://www.swissdelphicenter.ch
developers knowledge base

Iklan
Kategori:Delphi
  1. Belum ada komentar.
  1. No trackbacks yet.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: