How to check if acrobat reader exist?
ShLwApi,
Windows;
var
Size: dword;
Data: array[0..MAX_PATH] of char;
begin
size := max_path;
if not (Succeeded(AssocQueryString(0,
ASSOCSTR_FRIENDLYDOCNAME,
PChar('.pdf'), nil, @Data, @Size)) and (Size>0)) then
begin
ShowMessage('Not installed.');
end;
end
You can import PDF dokument in Delphi as ActiveX control as it is described here.
To copy data from PDF, you can use this code:
procedure CopyPDF2Clpbrd;
begin
ocxPdf.SetFocus;
Application.ProcessMessages;
Sleep(1000);
PostKeyEx32(Ord('A') , [ssCtrl], False) ;
Application.ProcessMessages;
Sleep(1000);
PostKeyEx32(Ord('C') , [ssCtrl], False) ;
Application.ProcessMessages;
Sleep(1000);
end;
procedure PostKeyEx32(key: Word; const shift: TShiftState;
specialkey: Boolean) ;
{
Parameters :
* key : virtual keycode of the key to send.
For printable keys this is simply the ANSI code (Ord(character)) .
* shift : state of the modifier keys.
This is a set, so you can set several of these keys
(shift, control, alt, mouse buttons) in tandem.
The TShiftState type is declared in the Classes Unit.
* specialkey: normally this should be False.
Set it to True to specify a key on the numeric keypad, for example.
Description:
Uses keybd_event to manufacture a series of key
events matching the passed parameters.
The events go to the control with focus.
Note that for characters key is always the upper-case
version of the character.
Sending without any modifier keys
will result in a lower-case character,
sending it with [ ssShift ] will result in an upper-case character!
}
type
TShiftKeyInfo = record
shift: Byte ;
vkey: Byte ;
end;
ByteSet = set of 0..7 ;
const
shiftkeys: array [1..3] of TShiftKeyInfo =
((shift: Ord(ssCtrl) ; vkey: VK_CONTROL),
(shift: Ord(ssShift) ; vkey: VK_SHIFT),
(shift: Ord(ssAlt) ; vkey: VK_MENU)) ;
var
flag: DWORD;
bShift: ByteSet absolute shift;
j: Integer;
begin
for j := 1 to 3 do
begin
if shiftkeys[j].shift in bShift then
keybd_event(shiftkeys[j].vkey,
MapVirtualKey(shiftkeys[j].vkey, 0), 0, 0) ;
end;
if specialkey then
flag := KEYEVENTF_EXTENDEDKEY
else
flag := 0;
keybd_event(key, MapvirtualKey(key, 0), flag, 0) ;
flag := flag or KEYEVENTF_KEYUP;
keybd_event(key, MapvirtualKey(key, 0), flag, 0) ;
for j := 3 downto 1 do
begin
if shiftkeys[j].shift in bShift then
keybd_event(shiftkeys[j].vkey,
MapVirtualKey(shiftkeys[j].vkey, 0), KEYEVENTF_KEYUP, 0) ;
end;
end;
Where PostKeyEx32 procedure is taken from here.