Avatar billede assassin Juniormester
01. december 2005 - 14:52 Der er 14 kommentarer og
1 løsning

Læse sidetal i PDF

Er der nogen, som kender en måde hvorpå man kan læse antallet af sider i en PDF fil, uden at åbne den?
Avatar billede assassin Juniormester
02. december 2005 - 10:05 #1
Jeg har fundet noget på nettet, som jeg måske kan bruge.

Er der nogen der kan fortælle mig hvor jeg kan finde acrobat.tlb
Avatar billede stoney Nybegynder
02. december 2005 - 11:06 #2
Avatar billede assassin Juniormester
02. december 2005 - 14:38 #3
Den har jeg været inde at kikke på, men jeg kan ikke finde ud af hvordan jeg får antallet af sider.
Avatar billede assassin Juniormester
02. december 2005 - 14:41 #4
jeg har fundet nedenstående på nettet men jeg har ikke acrobat_tlb.

unit main;

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.
Avatar billede vallemanden Nybegynder
05. december 2005 - 14:20 #5
acrobat_tlb får du ved at følge
http://delphi.about.com/cs/howto/ht/htpdf.htm
Avatar billede assassin Juniormester
06. december 2005 - 09:32 #6
Jeg har fulgt http://delphi.about.com/cs/howto/ht/htpdf.htm men jeg får følgende fejl

[Fatal Error] main.pas(36): File not found: 'acrobat_tlb.dcu'

og jeg har ledt hele hd igennem og der ligger ikke nogen 'acrobat_tlb.dcu'

nogen forslag
Avatar billede vallemanden Nybegynder
06. december 2005 - 09:43 #7
du har selvfølgelig en PDF reader instaleret på din maskine ikke?

efter du har fulgt http://delphi.about.com/cs/howto/ht/htpdf.htm får du et nyt komponent under activeX der hedder acroPDF, denne skal du have på dit projeckt
Avatar billede assassin Juniormester
06. december 2005 - 10:37 #8
Jo, jeg har pdf reader.

Jeg har kikket på acroPDF, men jeg kan ikke se hvordan jeg kan få sideantallet ud fra en pdf fil.
Avatar billede vallemanden Nybegynder
06. december 2005 - 10:44 #9
der var det jo du skulle bruge den kode så viser ovenfor
Avatar billede vallemanden Nybegynder
06. december 2005 - 10:53 #10
ups
der var det jo du skulle bruge den kode som du viser ovenfor
Avatar billede assassin Juniormester
06. december 2005 - 11:10 #11
ja, men jeg får stadig fejl acrobat_tlb.dcu ikke fundet.

Den komponent, som jeg får på fanebladet activeX hedder AcroPDFLib_tlb.

Jeg får problemer med linien PDDoc: Acrobat_TLB.CAcroPDDoc;

Det kræver tilsyneladende store tilrettelser, så det må jeg se på.
Avatar billede assassin Juniormester
07. december 2005 - 10:26 #12
Er der nogen i det ganske land, som kan hjælpe mig med at få ovenstående kode til at virke - gerne sammen med activeX componenten.

Det er kun side antal, som jeg skal bruge alt andet er ligegyldigt.

HJÆLP.
Avatar billede assassin Juniormester
09. december 2005 - 10:59 #13
Avatar billede assassin Juniormester
09. december 2005 - 11:00 #14
Vallemanden og stoney -> hvis i vil have nogle points, skal jeg have nogle svar.
Avatar billede assassin Juniormester
14. december 2005 - 11:44 #15
Jeg lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester