Laden...

webBrowser.Print() - auf anderem Drucker drucken (NICHT Standarddrucker!)

Erstellt von tikra vor 16 Jahren Letzter Beitrag vor 15 Jahren 3.793 Views
tikra Themenstarter:in
185 Beiträge seit 2007
vor 16 Jahren
webBrowser.Print() - auf anderem Drucker drucken (NICHT Standarddrucker!)

Kennt jemand eine Möglichkeit das Webbrowser-Element auf einem bestimmten Drucker auszudrucken?
Ich brauche also eine Methode, welcher ich den Namen (String) oder eine ID des Druckers übergebe, auf welchem das Element dann gedruckt wird.

tikra Themenstarter:in
185 Beiträge seit 2007
vor 15 Jahren

Geht wirklich, wirklich, WIRKLICH, WIRKLICH nicht ?( 8o

tikra Themenstarter:in
185 Beiträge seit 2007
vor 15 Jahren

Letzter Versuch!

915 Beiträge seit 2006
vor 15 Jahren

Hrm, spontan würde ich sagen löse das über ein eigenentwickeltes Plugin für Webbrowser.

Das Plugin selbst ist nur in der lage da es sich lokal auf dem System befindet die Systemresourcen wie z.B. die verfügbaren Drucker auszulesen oder dort auch den / die Drucker anzusprechen. Über die Shcnitstelle die das COm object dann zur verfügung stellt kannst du im Browser an das Plugin das zu druckende Dokument naja (quasi) senden (einfache Events).

Siehe hierzu Codeprojekt: http://www.codeproject.com/KB/cs/autosig.aspx

Denke sollte einer der leichetren Wege sein und kannst damit die breitere Masse an Nutzern bedienen.

/PS
Denke wenn etwas im Forum rumstöberst unter Stichwörtern wie: "Webbrowser Plugin" findest sicher einiges 🙂

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

tikra Themenstarter:in
185 Beiträge seit 2007
vor 15 Jahren

Fürchte das kriege ich (zeitnah) nicht hin, habe noch nie so etwas in die Richtung gemacht. Hört sich SEHR kompliziert an... abgesehen davon hat das Beispiel nicht ansatzweise etwas mit drucken zu tun, nur wie man ein Plugin erstellt.

Trotzdem vielen Dank! 🙂

915 Beiträge seit 2006
vor 15 Jahren

Na ja, das Beispiel zeigt ja auf wie man das Plugin erstellt und mehr als nen Event zu regestrieren und es mit dem Plugin auszulesen brauchst auch nicht. Wie man die Printersettings bedient steht hier im Forum sicher etliche male drinnen.

Eigentlich brauchst nur nen wenig herumzukopieren 🙂

Du kannst das auch anders lösen, wenn das nur bei deinen Kunden eingesetzt wird kannst es übers Serialiseren versuchen und einen Windowsdienst der die Rechenr innerhalb des jeweiligen Kundennetzwerkes ausließt was die so an Druckertreibern auf ihren Rechnern installiert haben und so versuchen das ganze zu lösen. Du kannst auch eine Anwendung schreiben die auf den Rechnern im Hintergrund läuft und an dieses Serialisierte Nachrichten z.B. über Sockets senden.

Du kannst auch anhand von JavaScript, Shell (mit VB) oder evtl. sogar Flash (Adobe ActionScript) versuchen das ganze zu lösen, da dieses ebenso Clientseitig ausgeführt wird - aber das wird beweiten schwerer.

Kannst auch direkt für bestimmte Browser über derne SDKS Plugins erstellen, sind ja nur DLLImports wie z.B. bei FireFox (download incl.) Link.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

tikra Themenstarter:in
185 Beiträge seit 2007
vor 15 Jahren

Das DocumentCompleted-Event benutze ich bereits, wenn dieses getriggert wird, wird nämlich die Print()-Methode aufgerufen, nur wie kann ich denn da etwas über PrinterSettings steuern...

915 Beiträge seit 2006
vor 15 Jahren

Na ja, das ist ja das Problem, es bringt dir nichts auf das Event zu reagieren 🙂
Du kannst vom Client nicht die Daten wie z.b. dessen Druckertreiber nicht auslesen. Das kannst ja nur machen, wenn dein Programm auf dem Client läuft.

Also wenn du grade bei dir lokal rumprogrammierst findest deien Treiber, sobald deine Internetseite auf dem Server gealden wird wirst sehen das es plötzlich nicht mehr geht und dein Systemadmin wundert sich das irgendwann mal z.B. 100 Dialoge aufleuchten auf dem Rechner mit Druckanfragen 🙂

Um das Problem zu umgehen muss auf den Clients ein Programm laufen das sich darum kümmert. Wenn du das eben nicht (wie hier eigentlich zu verwenden Java) verwenden möchtest sondern C# kannst du das über ein Plugin machen das die Internetseiten ausließt und so wie es dieses Autosign Tool auf Codeproject macht. Dabei schaust du nur bis irgend ein Tag kommt das Signalisiert ah hier Druckertreiber auslesen, und folgende Informationen ausdrucken. Es muss ja kein Tag sein, kannst auch etwas anderes dafür benutzen.

Im normalfall löst man so etwas am geschicktesten mit Java Servlets und Applets.
Eine billige trviale Lösung ist mir nicht bekannt wie Daten vom Client auslesen möchtest wie den Druckertreiber (Installierte Drucker usw.) 🙂

/PS

Das einzige was mich halt mit den Title von dir verwirrt ist, ob einen eigenen Webbrwoser schreibst oder nicht, da würde sich das ganze natürlich anders verhalten.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

tikra Themenstarter:in
185 Beiträge seit 2007
vor 15 Jahren

Es wird niemals in eine Website portiert werden und es sind auch keine "Kunden", die mit dem Tool interagieren, es ist ein Programm welches gewisse Dinge automatisiert und auf einem Server läuft.

Eine Liste der Drucker steht in der Anwendung schon zur Verfügung, man müsste jetzt nur noch den Druck auf einen anderen Drucker als den Standarddrucker umleiten können.

Edit: Ja genau, wie reden aneinander vorbei! 😉 Ich spreche einfach nur von dem Webbrowser-Control.

915 Beiträge seit 2006
vor 15 Jahren

Na wenn es so simple ist:

MS BspCode


public void Printing(string printer) {
  try {
    streamToPrint = new StreamReader (filePath);
    try {
      printFont = new Font("Arial", 10);
      PrintDocument pd = new PrintDocument(); 
      pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
      // Specify the printer to use.
      pd.PrinterSettings.PrinterName = "DerDrucker"; // <-- hier den Druckernamen eingeben

      if (pd.PrinterSettings.IsValid) {
         pd.Print();
      } 
      else {    
         MessageBox.Show("Printer is invalid.");
      }
    } 
    finally {
      streamToPrint.Close();
    }
  } 
  catch(Exception ex) {
    MessageBox.Show(ex.Message);
  }
}


Linker für Event


<A href="javascript:window.print()" onClick = "PrintThisPage()">Click here to print</a>

Und wenn es noch billiger sein darf, den Standarddrucker unter Windows umsetzen 😉

Hatte angenommen würdest eine Internetseite schreiben und wenn irgendwer dne Drucker xy besitzt soll eben dieser anspringen. Aber so, ists doch einfach 😮)

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

tikra Themenstarter:in
185 Beiträge seit 2007
vor 15 Jahren

Und wenn es noch billiger sein darf, den Standarddrucker unter Windows umsetzen 😉

Das ja eben NICHT!! g

Aber über die Variante darüber werde ich mich jetzt einmal her machen...

Sage schon einmal Danke, gucken ob es das ist was ich haben möchte. 🙂

tikra Themenstarter:in
185 Beiträge seit 2007
vor 15 Jahren

Geht schon damit los, dass der StreamReader einen filePath benötigt.
Ich denke du gehst davon aus, das ich eine Datei drucken möchte, oder?
Möchte aber den Inhalt der geladenen Seite im Webbrowser ausdrucken.

(Sorry, wollte kein Doppel-Posting betreiben, die Delete-Funktion ist allerdings deaktiviert.)