Πώς μπορώ να εκτυπώσω ένα έγγραφο HTML από μια υπηρεσία web;

ψήφοι
68

Θέλω να εκτυπώσετε HTML από μια υπηρεσία web C #. Ο έλεγχος web browser είναι υπερβολή, και δεν λειτουργεί καλά σε ένα περιβάλλον υπηρεσίας, ούτε λειτουργεί καλά σε ένα σύστημα με πολύ αυστηρούς περιορισμούς ασφαλείας. Υπάρχει κάποιο είδος της ελεύθερης υπάρχει .NETβιβλιοθήκη που θα υποστηρίζουν την εκτύπωση μιας βασικής σελίδας HTML; Εδώ είναι ο κώδικας που έχω μέχρι τώρα, η οποία δεν λειτουργεί σωστά.

public void PrintThing(string document)
{
    if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
    {
        Thread thread =
            new Thread((ThreadStart) delegate { PrintDocument(document); });
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }
    else
    {
        PrintDocument(document);
    }
}

protected void PrintDocument(string document)
{
    WebBrowser browser = new WebBrowser();
    browser.DocumentText = document;
    while (browser.ReadyState != WebBrowserReadyState.Complete)
    {
        Application.DoEvents();
    }
    browser.Print();
}

Αυτό λειτουργεί καλά όταν καλείται από τα θέματα UI τύπου, αλλά δεν συμβαίνει τίποτα όταν καλείται από μια κλωστή υπηρεσία τύπου. Αλλαγή Print()σε ShowPrintPreviewDialog()αποδόσεις το ακόλουθο μήνυμα λάθους δέσμης ενεργειών IE:

Σφάλμα: 'dialogArguments .___ IE_PrintType' είναι null ή όχι ένα αντικείμενο
URL: res: //ieframe.dll/preview.dlg

Και εμφανίζεται ένα μικρό παράθυρο διαλόγου άδειο προεπισκόπηση εκτύπωσης.

Δημοσιεύθηκε 01/08/2008 στις 19:33
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
29

Μπορείτε να εκτυπώσετε από τη γραμμή εντολών, χρησιμοποιώντας την ακόλουθη:

rundll32.exe% WINDIR% \ System32 \ mshtml.dll, PrintHTML "% 1"

Πού% 1 είναι η διαδρομή του αρχείου html που θα εκτυπωθεί.

Αν δεν χρειάζεται να εκτυπώσετε από τη μνήμη (ή την οικονομική δυνατότητα να γράψει στο δίσκο σε ένα αρχείο temp) μπορείτε να χρησιμοποιήσετε:

using (Process printProcess = new Process())
{
    string systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);
    printProcess.StartInfo.FileName = systemPath + @"\rundll32.exe";
    printProcess.StartInfo.Arguments = systemPath + @"\mshtml.dll,PrintHTML """ + fileToPrint + @"""";
    printProcess.Start();
}

Σημείωση: Αυτό λειτουργεί μόνο σε Windows 2000 και πάνω νομίζω.

Απαντήθηκε 03/08/2008 στις 19:06
πηγή χρήστη

ψήφοι
3

Εύκολος! Χωρίστε το πρόβλημά σας σε δύο απλούστερα μέρη:

  1. καθιστούν την HTML σε PDF
  2. εκτυπώστε το PDF ( SumatraPDF )
  • -print-to-default $file.pdf τυπώνει ένα αρχείο PDF σε ένα προεπιλεγμένο εκτυπωτή
  • -print-to $printer_name $file.pdf τυπώνει ένα αρχείο PDF σε ένα συγκεκριμένο εκτυπωτή
Απαντήθηκε 15/08/2012 στις 14:27
πηγή χρήστη

ψήφοι
3

Αν το έχεις στον προϋπολογισμό (~ $ 3000), ελέγξτε PrinceXML .

Θα καταστήσει HTML σε PDF, λειτουργεί καλά σε ένα περιβάλλον υπηρεσιών, και υποστηρίζει προηγμένα χαρακτηριστικά, όπως δεν το σπάσιμο μια σελίδα στη μέση του ένα κελί πίνακα (που πολλοί browsers δεν υποστηρίζουμε αυτή τη στιγμή).

Απαντήθηκε 12/04/2010 στις 18:57
πηγή χρήστη

ψήφοι
3

Ξέρω ότι η ίδια (έκδοση τουλάχιστον το 2003) Visual Studio αναφέρει ο IE dll άμεσα να καταστήσει το «Design View».

Μπορεί να αξίζει να εξετάσουμε σε αυτό.

Διαφορετικά, δεν μπορώ να σκεφτώ τίποτα πέρα ​​από τον έλεγχο Web Browser.

Απαντήθηκε 02/08/2008 στις 01:42
πηγή χρήστη

ψήφοι
0

Ίσως αυτό θα βοηθήσει. http://www.codeproject.com/KB/printing/printhml.aspx Επίσης, δεν είναι σίγουρος τι το νήμα που προσπαθείτε να αποκτήσετε πρόσβαση στο πρόγραμμα περιήγησης έλεγχο από, αλλά πρέπει να είναι STA

Σημείωση - Το έργο που αναφέρεται στο σύνδεσμο δεν σας επιτρέπουν να πλοηγηθείτε σε μια σελίδα και να εκτελέσει μια εκτύπωση χωρίς την εμφάνιση του διαλόγου εκτύπωσης.

Απαντήθηκε 17/06/2009 στις 18:36
πηγή χρήστη

ψήφοι
-1

Δεν ξέρω τα συγκεκριμένα εργαλεία, αλλά υπάρχουν και ορισμένα βοηθητικά προγράμματα που χτυπά εγγραφής / αναπαραγωγής. Με άλλα λόγια, θα μπορούσε να αυτοματοποιήσει το «κλικ» στο παράθυρο διαλόγου εκτύπωσης. (Ξέρω ότι αυτό είναι ένα hack, αλλά όταν όλα τα άλλα αποτύχουν ...)

Απαντήθηκε 20/09/2008 στις 18:37
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more