Merhaba,
Daha önce, bir klasördeki yüzlerce pdf dosyasının toplamda kaç sayfa olduğunu öğrenme ihtiyacım olmuştu. O zaman çok uğraşmıştım. Sonunda çözümü buldum ama çözüm lisanslı olan adobe reader çözümü ile oluyor. Çünkü standart reader, "AcroExch.PDDoc" class'ını sisteme kurmuyor. Senin ihtiyacın olan sayfa nosu da bu sınıf içinde vardır.
Aşağıdaki gibi sayfa adedinin alınabileceği kod lisanslı Acrobat kurulu sistemde çalışırken, standart reader kurulu sistemde çalışmıyor. Vermemiş adamlar.
Kod: Tümünü seç
var PdfDoc: OleVariant;
begin
PdfDoc := CreateOleObject('AcroExch.PDDoc');
PdfDoc.Open('C:\deneme.pdf');
ShowMessage(Inttostr(PdfDoc.GetNumPages));
PdfDoc.Close;
PdfDoc := Null;
end;
Yardımcı olur mu bilmem ama aşağıdaki dokümanı incelemende fayda var.
http://wwwimages.adobe.com/content/dam/ ... _guide.pdf
Ayrıca;
Eğer ki açık olan bir Acrobat Reader penceresi üzerindeki sayfa noyu gösteren kutunun metnini alayım dersen şöyle bir şey yapılabilir. Reader sürümüne bağlı bir sorun olmazsa iş görür diye düşünüyorum.
Acrobat Reader'ın pencere sınıfı
"AcrobatSDIWindow"
Sayfa numarasının yazılı olduğu container'ın sınıfı da
"AVL_AVView"
Bu container içinde iki adet
"Edit" sınıfı mevcut. İlki görünümün ölçeğini gösteren (%110 gibi) edit ve diğeri de bizim aradığımız sayfa nosunu gösteren edit.
Bu durumda aşağıdaki kod ile bu edit içinde yazan metni ben alabiliyorum. Umarım işine yarar.
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
var hwnd: THandle;
Txt: PChar;
TxtLen: Integer;
begin
hwnd := GetWindow(FindWindowEx(FindWindowEx(FindWindow('AcrobatSDIWindow', nil), 0, 'AVL_AVView', nil), 0, 'Edit', ''), GW_HWNDNEXT);
if not IsWindow(hwnd) then Exit;
TxtLen := SendMessage(Hwnd, WM_GetTextLength, 0, 0);;
Txt := StrAlloc(TxtLen + 1);
SendMessage(Hwnd, WM_GetText, TxtLen + 1, Integer(Txt));
Edit1.Text := Txt;
end;