ChristophSchmid:Die aktuelle Lösung von dem Serverdruckdienst nutzt eine VB6-Komponente und dann wird der Default-Printer gesetzt und es dann mit SHDocVwCtl.WebBrowser das ganze gedruckt.
Ob das beim Webbrowser-Element geht, weiß ich nicht sicher - ich nutze derzeit nur einen Drucker. Der existiert als physikalischer Drucker auch nicht - ich habe mir bloß einen möglichst leistungsfähigen Treiber(Farbe plus PostScript) rausgesucht.
ChristophSchmid:Druckt dein Dienst die Dokumente parallel über mehrere verschiedene Drucker oder jedes Dokument nacheinander? Das ist nähmlich ein weiteres Problem. Zu jedem HTML-File gibt es ein XML-File mit dem Druckernamen. Es liegen aber alle Dokumente für alle Drucker in einem Verzeichnis und werdn nacheinander verarbeitet. Wenn jetzt 100 Dokumente auf einen Drucker müssen, wartet das eine Dokument auf den 2. Drucker bis die anderen durch sind. Da würde ich gerne eine Anpassung vornehmen, dass je Drucker die Dokumente parallel gedruckt werden. Mal schauen, ob das WebBrowser-Element das verarbeiten kann.
Das Webbrowser-Steuerelement muß in einem STAThread laufen:
<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
<System.Runtime.InteropServices.ComVisibleAttribute(True)> _
Public Class sd_print_Form
Inherits Form
Private WithEvents _wB As WebBrowser
Public Sub New()
_wB = New WebBrowser()
...
<STAThread()> _
Public Shared Sub Main()
Dim _str_ArgList As String() = Environment.GetCommandLineArgs(), _
_cpF As sd_print_Form
_cpF = New sd_print_Form()
Try
Application.Run(_cpF)
Die New-Methode initialisiert ein Webbrowser-Control und hängt es in die eigene Controls-Liste ein. Bei mehreren Druckern müßtest Du wahrscheinlich pro Drucker eine Instanz von so einer Klasse erstellen. Allerdings ist mir nicht ganz klar, ob beim DefaultPrinter sich nicht die Instanzen ins Gehege kommen, so daß Du mehrere Nutzer bräuchtest (einen pro Drucker), um das zu isolieren.
Der obige Code wird nicht direkt angesprochen. Sondern eine Webanwendung ruft einen Remote-Dienst auf, der schreibt Infos in eine Datei. Die obige Anwendung läuft als eigene Exe - und überprüft das Verzeichnis. Das hat den Vorteil, daß man sich nicht mögliche Probleme dadurch einhandelt, daß Forms / Webbrowser nicht in Dienstanwendungen verwendet werden sollen.