Glengamoi · AspHeute (Artikel) · .NET Heute (RSS-Suche) · .NET Blogs · Glengamoi Suche (Installieren via Klick)

Glengamoi

Die Diskussionsforen der deutschen .NET Community
Willkommen bei Glengamoi. Anmeldung | Registrieren | Hilfe
in Suchen

Drucken einer HTML-Datei aus einem .NET-Dienst

Letzter Beitrag 04-27-2009 20:21 von JuergenAuer. 5 Antworten.
Seite 1 von 1 (6 Treffer)
Beiträge sortieren: Zurück Weiter
  • 04-22-2009 19:58

    Drucken einer HTML-Datei aus einem .NET-Dienst

    Hallo

    Wie kann ich eine HTML-Datei aus einer .NET-Anwendung(Dienst) über einen definierten Drucker ausdrucken?

     

    Gruss Christoph

    • IP-Adresse ist Registriert
  • 04-24-2009 16:58 Antwort zu

    AW: Drucken einer HTML-Datei aus einem .NET-Dienst

    Ich weiß nicht, wie es sonst noch geht.

    Aber innerhalb von Server-Daten habe ich mir eine Lösung zusammengebaut, bei der ein Dienst (das klappt tatsächlich) das Webbrowser-Steuerelement nutzt, um eine Webseite zu laden und sie dann auszudrucken.

    Der Drucker ist hier umgeleitet, so daß effektiv in eine Datei gedruckt wird, da ein PostScript-Drucker genutzt wird, wird das am Ende in ein PDF transformiert (was der eigentliche Sinn ist: Eine PDF-Ausgabe zu generieren).

    Aber man kann das natürlich auch an einen regulären Drucker schicken.

    • IP-Adresse ist Registriert
  • 04-25-2009 8:18 Antwort zu

    Re: AW: Drucken einer HTML-Datei aus einem .NET-Dienst

    Halle Jürgen

    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.

    Ich habe mir auch schon die WebBrowser-Klasse aus dem .NET2.0 angeschaut und werde dann diesen Weg mal weiter verfolgen.

    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.

     

    Danke

    Gruss Christoph

    • IP-Adresse ist Registriert
  • 04-25-2009 11:12 Antwort zu

    AW: Re: AW: Drucken einer HTML-Datei aus einem .NET-Dienst

    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.

    • IP-Adresse ist Registriert
  • 04-26-2009 16:10 Antwort zu

    Re: AW: Re: AW: Drucken einer HTML-Datei aus einem .NET-Dienst

     Ich nutze jetzt erstmals die Webserver-Klasse in einem Service und erzeuge den Webserver in einem seperaten Thread. Da füge ich mit

    AddHandler oBrowser.DocumentCompleted, New WebBrowserDocumentCompletedEventHandler(AddressOf DocumentCompleted)

    einen Handler hinzu, damit ich nach dem Laden den Druck starten kann.

    Wenn ich dann mit oBrowser.Navigate den Link lade wird der Event nie ausgelöst. Jemand einen Tipp dazu?

    Es wird auch keine Exception geworfen.

    Gruss Christoph

     


    • IP-Adresse ist Registriert
  • 04-27-2009 20:21 Antwort zu

    AW: Re: AW: Re: AW: Drucken einer HTML-Datei aus einem .NET-Dienst

    Warum dein Code nicht funktioniert, weiß ich aktuell nicht.

    Wenn ich aber das nutze

    Private WithEvents _wB As WebBrowser

    <STAThread()> _
    Private Sub wB_DocumentCompleted(ByVal sender As Object, _
        ByVal e As WebBrowserDocumentCompletedEventArgs) Handles _wB.DocumentCompleted

    wird wB_DocumentCompleted ausgeführt.

    Insofern war für mich damals das Problem erledigt.

    • IP-Adresse ist Registriert
Seite 1 von 1 (6 Treffer)