Nur für höhere Delphi-Versionen:
Um eine PDF-Datei auszulesen und in eine Textdatei zu speichern, benötigt der Compiler die Typenbibliothek von Adobe Acrobat. Sollte euer Compiler dies schon beinhalten, sind die ersten Schritte nicht notwendig.
Als Erstes ladet ihr euch die Bibliothek herunter:
Acrobat_TLB;
Diese muss entweder in die Unit mit eingebunden oder als Komponente in den Compiler installiert werden.
Bei mir war die Bibliothek schon vorhanden, ich musste sie nur in die Unit einbinden.
Der folgende Code zeigt, wie die PDF-Datei zu lesen und zu speichern ist.
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, OleCtrls, acrobat_tlb, Vcl.StdCtrls, ComObj;
{$R *.dfm}
{$TYPEDADDRESS OFF} // 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) + '\PDF.txt');
end;
Keine Kommentare:
Kommentar veröffentlichen