Mittwoch, 2. März 2011

PDFs aus Ihrer Anwendung drucken

Meine lieben LeserInnen!

Ich hatte eine Kundenanfrage bezügl. des Druckens aus eigenen Anwendungen heraus unter Zuhilfenahme eines installierten PDF-Readers (versuchen Sie Foxit... für mich der beste!).
Ich habe ein wenig mit der Keybd_Event-Syntax von Delphi/Pascal zum virtuellen Auslösen der Tastatur "herumprobiert"...
Wenn Sie Delphi oder Free Pascal verwenden, können Sie den u.a. Code direkt hinter ein OnClick-Ereignis einer Schaltfläche in Ihrer Anwendung kopieren. In anderen Programmiersprachen werden Sie eine sehr ähnliche Syntax für diesen Zweck finden (oder fragen Sie Dr.Google).
Mit der Zeitangabe bei der sleep-Syntax können Sie noch etwas herumprobieren...

procedure TForm1.Button3Click(Sender: TObject);
begin
// At the uses-part don't forget the ShellAPI ;-)

// Show/open the pdf-document ...
ShellExecute(hinstance,'open',PChar('c:\temp\test.pdf'),nil,nil,SW_NORMAL);

sleep(2000); // sleep/wait for 2 seconds

// Virtual Keys [Strg] + [P] to open the print dialog ...
Keybd_Event(VK_CONTROL,0,0,0);
Keybd_Event(Ord('P'),MapVirtualKey(Ord('P'), 0),0,0);
Keybd_Event(Ord('P'),MapVirtualKey(Ord('P'), 0),KEYEVENTF_KEYUP,0);
Keybd_Event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);

// Virtual key [ENTER] to start printout ...
Keybd_Event(VK_RETURN,1,0,0);
Keybd_Event(VK_RETURN, 1, KEYEVENTF_KEYUP, 0);

sleep(2000); // sleep/wait for 2 seconds

// Virtual keys [Alt] + [F4] to close the active reader-window ...
Keybd_Event(VK_MENU,0,0,0);
Keybd_Event(VK_F4,0,0,0);
Keybd_Event(VK_F4,0,KEYEVENTF_KEYUP,0);
Keybd_Event(VK_MENU,0,KEYEVENTF_KEYUP,0);

end;