AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TWebbrowser, PDF und Drucken
Thema durchsuchen
Ansicht
Themen-Optionen

TWebbrowser, PDF und Drucken

Ein Thema von Wathlon · begonnen am 12. Nov 2004 · letzter Beitrag vom 19. Jan 2005
Antwort Antwort
Wathlon

Registriert seit: 20. Feb 2004
39 Beiträge
 
#1

TWebbrowser, PDF und Drucken

  Alt 12. Nov 2004, 10:25
Hallo,

ich verwende Delphi7, den TWebbrowser, habe eine Acrobat Reader 6 und will Drucken.

In meiner Anwendung habe ich einen Webbrowser mit eingebaut. Hierbei kann es auch vorkommen, dass der Benutzer ein PDF zu sehen bekommt.

Da man bei einem PDF die Menüleiste ausschalten kann, muss ich mit einem Button meiner TWebbrowser-Komponente sagen, dass jetzt gedruckt werden soll.

Im IE geht das, dort wird das Event auch an das AcroReader-Plugin weitergeleitet, aber wie mache ich das selbst???

Danke für die Hilfe.

Gruß Walter
  Mit Zitat antworten Zitat
Wathlon

Registriert seit: 20. Feb 2004
39 Beiträge
 
#2

Re: TWebbrowser, PDF und Drucken

  Alt 12. Nov 2004, 11:45
Lösung gefunden!

Delphi-Quellcode:
procedure Print;
var
  Doc: IHtmlDocument2;
begin
   Webbrowser1.Document.QueryInterface(IID_IHtmlDocument2, Doc);
   if Doc <> nil then
   begin
     doc.execCommand('Print', true, null);
   end;
end;
Gruß Walter
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

Re: TWebbrowser, PDF und Drucken

  Alt 13. Jan 2005, 07:30
Zitat von Wathlon:
Lösung gefunden!
Leider funktioniert diese Lösung bei mir nicht.
doc = nil -> nix passiert
Welche Acrobat Reader Version bzw. welche IE Version verwendest Du ?

Diese Lösung gibt zwar S_OK zurück, aber es gibt keinen DruckDialog, und es druckt auch nicht.

Delphi-Quellcode:
// Quelltext aus Delphi-Source Tipps Sammlung
// [url]http://www.dsdt.info/tipps/?id=171[/url]
// Keine Autoren angegeben
procedure PrintWebBrowser(WB: TWebBrowser);
var
  OleCommandTarget: IOleCommandTarget;
  Command: TOleCmd;
  Success: HResult;
begin
  if not Assigned(WB) then
    Exit;
  if not Assigned(WB.Document) then
    Exit;

  // Referenz auf IOleCommandTarget besorgen
  WB.Document.QueryInterface(IOleCommandTarget, OleCommandTarget);

  // Prüfen, ob Drucken momentan erlaubt
  Command.cmdID:= OLECMDID_PRINT;

  if OleCommandTarget.QueryStatus(Nil, 1, @Command, Nil) <> S_OK then
  begin
    ShowMessage('Drucken nicht möglich');
    Exit;
  end;
  if (Command.cmdf and OLECMDF_ENABLED) <> 0 then
  begin
    // Drucken ausführen
    Success:= OleCommandTarget.Exec(Nil, OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, EmptyParam, EmptyParam);
    case Success of
      S_OK: ; // Alles OK
      OLECMDERR_E_CANCELED: ShowMessage('Abbruch durch User');
    else ShowMessage('Fehler!!!');
    end;
  end
  else
  begin
    // Drucken momentan nicht erlaubt
    ShowMessage('Drucken nicht möglich');
    Exit;
  end;
end;
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Wathlon

Registriert seit: 20. Feb 2004
39 Beiträge
 
#4

Re: TWebbrowser, PDF und Drucken

  Alt 13. Jan 2005, 07:57
Hallo,

wenn

Zitat von MaBuSE:
doc = nil -> nix passiert
dann soll ja auch nix geschehen, sondern nur wenn

if Doc <> nil then Ich hatte auch schon mit Assigned experimentiert, aber dann festgestellt, dass der Quelltext, genau so wie ich ihn geschrieben habe, funktioniert, sonst nix (aber vielleicht bin ich zu dumm)!

Mit TOleCmd kenne ich mich nicht aus, das habe ich noch nicht versucht.

Ich verwende Win2000, IE6.0, AcroReader 5.0.5, D7

Gruß Walter
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

Re: TWebbrowser, PDF und Drucken

  Alt 13. Jan 2005, 08:06
Zitat von Wathlon:
Hallo, wenn
Zitat von MaBuSE:
doc = nil -> nix passiert
dann soll ja auch nix geschehen, sondern nur wenn if Doc <> nil then
In dem TWebBrowser ist ein PDF geladen.
(Ich seh es ja auf dem Bildschirm)
Trozdem druckts mit deiner Funktion nicht.
(Vieleicht bin ich ja auch nur zu blöd)
Hast Du einen Hinweis für mich?

Delphi-Quellcode:
...
procedure TForm1.wbNavigateComplete2(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  istFertig := True;
end;
...
  wb := TWebBrowser.Create(ts);
  TControl(wb).Parent := ts;
  wb.Align := alClient;
  wb.OnNavigateComplete2 := wbNavigateComplete2;
  istFertig := False;
  wb.Navigate(ExpandFileName('Test.pdf'));
  while not istFertig do Application.ProcessMessages;
  wb.Document.QueryInterface(IID_IHtmlDocument2, Doc);
  if Doc <> nil then
  begin
    doc.execCommand('Print', true, null);
  end;
...
[edit]
Zitat von Wathlon:
Ich verwende Win2000, IE6.0, AcroReader 5.0.5, D7
Ich verwende WinXP, IE6.0, AcroReader 7.0.0, D7
[/edit]
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Wathlon

Registriert seit: 20. Feb 2004
39 Beiträge
 
#6

Re: TWebbrowser, PDF und Drucken

  Alt 13. Jan 2005, 08:32
ja so leicht ist das auch nicht, ...

1. Wir hatten Probleme, wenn wir einen Webbrowser über den Code generieren, daher haben wir immer den Webbrowser im Designer erstellt, frag mich nicht warum.

2. Navigation: Navigate2 soll verwendet werden
Delphi-Quellcode:
    wb.Navigate2(aUrl);
    while wb.ReadyState < 4 do
    begin
      application.ProcessMessages;
    end;
3. Versuche jetzt einmal über einen "Druckerbutton" zu drucken, denn es kann sein, dass das Plugin noch nicht so weit ist und daher das Drucken fehlschlägt.

Gruß Walter
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

Re: TWebbrowser, PDF und Drucken

  Alt 19. Jan 2005, 09:33
Zitat von MaBuSE:
In dem TWebBrowser ist ein PDF geladen.
(Ich seh es ja auf dem Bildschirm)
Trozdem druckts mit deiner Funktion nicht.
(Vieleicht bin ich ja auch nur zu blöd)
Hast Du einen Hinweis für mich?

Delphi-Quellcode:
...
procedure TForm1.wbNavigateComplete2(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  istFertig := True;
end;
...
  wb := TWebBrowser.Create(ts);
  TControl(wb).Parent := ts;
  wb.Align := alClient;
  wb.OnNavigateComplete2 := wbNavigateComplete2;
  istFertig := False;
  wb.Navigate(ExpandFileName('Test.pdf'));
  while not istFertig do Application.ProcessMessages;
  wb.Document.QueryInterface(IID_IHtmlDocument2, Doc);
  if Doc <> nil then
  begin
    doc.execCommand('Print', true, null);
  end;
...
Ich habe das Problem nun gelöst:

Warum auch immer habe ich onNavigationComplete benutzt.
Ich verwende nun onDownloadComplete und warte danach noch eine Sekunde.
Dann klappts mit der "procedure PrintWebBrowser(WB: TWebBrowser);" (siehe Post weiter oben)

Es erscheint der Druckdialog.

Das funktioniert aber nur, wenn der TWebBrowser sichtbar auf einem Form ist.
Ich habe das nun wie folgt gelöst:
TWebBrowser ist nur 1 x 1 Pixel groß, aber sichtbar

Delphi-Quellcode:
procedure Wait(SleepTimeStr: string);
var
  EndTime : TDateTime;
begin
  EndTime := Now + StrToTime(SleepTimeStr);
  while Now < EndTime do Application.ProcessMessages;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  wb: TWebBrowser;
begin
  dlgDrucken := TdlgDrucken.Create(Application);
  dlgDrucken.Show;
  wb := TWebBrowser.Create(dlgDrucken.Panel1);
  TControl(wb).Parent := dlgDrucken.Panel1;
  wb.Width := 1;
  wb.Height := 1;
  wb.OnDownloadComplete := WebBrowser1DownloadComplete;
  ok := False;
  wb.Navigate(ExpandfileName('test.pdf'));
  while not ok do Application.ProcessMessages;
  Wait('00:00:01');
  PrintWebBrowser(wb);
  dlgDrucken.Free;
  dlgDrucken := nil;
end;
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: TWebbrowser, PDF und Drucken

  Alt 19. Jan 2005, 09:43
Zitat von Wathlon:
1. Wir hatten Probleme, wenn wir einen Webbrowser über den Code generieren, daher haben wir immer den Webbrowser im Designer erstellt, frag mich nicht warum.
Das liegt warscheinlich daran, das man den Parent nicht direkt zuweisen kann.
Delphi-Quellcode:
  wb := TWebBrowser.Create(Form1);
  wb.Parent := Form1;
Es gibt dann eien Fehler. ReadOnly Eigenschaft kann nicht gesetzt werden
Die Lösung ist eigentlich einfach:
TWebBrowser ist von TControl abgeleitet, also kann auch der Parent gesetzt werden.
Delphi-Quellcode:
  wb := TWebBrowser.Create(Form1);
  TControl(wb).Parent := Form1;
Das klappt super.

Zitat von Wathlon:
2. Navigation: Navigate2 soll verwendet werden
Delphi-Quellcode:
    wb.Navigate2(aUrl);
    while wb.ReadyState < 4 do
    begin
      application.ProcessMessages;
    end;
navigate2 wird nur gebraucht, wenn man keine URL angeben kann.
Ich habe die Möglichkeit eine URL anzugeben (http://www.blabla.de oder auch C:\TEMP\test.pdf)

Online Hilfe von D7:
Navigate (Methode von TWebBrowser)
...
Hinweis: Wenn Sie die Ressource nicht als URL angeben können (z. B. bei einer Elementbezeichnerliste), verwenden Sie stattdessen die Methode Navigate2.


Online Hilfe von D7:
Navigate2 (Methode von TWebBrowser)
...
URL gibt den UNC-Pfadnamen einer Datei, die URL einer Internet-Ressource oder einen Zeiger auf eine Elementbezeichnerliste (PIDL) an.
...


Zitat von Wathlon:
3. Versuche jetzt einmal über einen "Druckerbutton" zu drucken, denn es kann sein, dass das Plugin noch nicht so weit ist und daher das Drucken fehlschlägt.
Das war mein eigentlicher Fehler.
TWebBrowser hatte das PDF noch nicht geladen als ich drucken wollte
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

Re: TWebbrowser, PDF und Drucken

  Alt 19. Jan 2005, 10:49
Treffnix schrieb in einer PN
Hallo, gerade gelesen, dass du im TWebbrowser am rumdrucken bist.

Ich hab derzeit quasi das umgekehrte Problem. Ich versuch HTML in PDF zu konvertieren. Dazu muss ich aber den Ausdruck des Browsers auf nen PS-Drucker umbiegen. Vielleicht hast du ja zufällig was.

Ich habs jetzt mit ExecWB, ExecCommand und der Printmethode von IHTMLWindow3 versucht, aber alle benutzen den Standarddrucker und ich hab noch nichts gefunden um das zu ändern. Und den Standarddrucker will ich nicht ändern. Das isn bissl unschön.

Gruß
Carsten

Das Problem habe ich nicht gelöst, aber hier findest Du eine Möglichkeit in C++

http://msdn.microsoft.com/library/de.../reference.asp

Da ich nichts entsprechendes in Delphi gefunden habe, müssen meine Anwender mit den Druckdialog leben.
(Druck auf Standard-Drucker habe ich wie folgt gelöst: )
  Result := ShellExecute(Application.Handle, 'print', FileName, nil, nil, SW_SHOW) > 32;
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz