this slowpoke moves

Read PDF File & Save

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

Beliebte Posts

Translate