Hoe kan ik een HTML-document van een webservice te drukken?

stemmen
68

Ik wil HTML afdrukken vanaf een C # web service. De web browser control is overkill, en niet goed functioneert in een service-omgeving, en ook niet goed functioneren op een systeem met zeer strenge veiligheidsmaatregelen beperkingen. Is er een soort van vrije .NETbibliotheek die het afdrukken van een eenvoudige HTML-pagina zal steunen? Hier is de code die ik tot nu toe, die niet goed lopen.

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();
}

Dit werkt prima wanneer aangeroepen vanuit UI-type draden, maar er gebeurt niets als ze worden opgeroepen vanuit een service-type draad. Veranderen Print()om ShowPrintPreviewDialog()de opbrengsten van de volgende IE script fout:

Fout: 'dialogArguments .___ IE_PrintType' is null of geen object
URL: res: //ieframe.dll/preview.dlg

En een kleine lege dialoogvenster afdrukvoorbeeld verschijnt.

De vraag is gesteld op 01/08/2008 om 19:33
bron van user
In andere talen...                            


7 antwoorden

stemmen
3

Ik weet dat Visual Studio zelf (althans in versie 2003) verwijst naar de IE dll rechtstreeks te maken van de "Design View".

Het kan de moeite waard op zoek naar dat.

Anders kan ik niet denken aan iets buiten de webbrowser controle.

antwoordde op 02/08/2008 om 01:42
bron van user

stemmen
29

U kunt afdrukken vanaf de opdrachtregel met de volgende:

rundll32.exe% windir% \ System32 \ mshtml.dll PrintHTML "% 1"

Waar% 1 is het pad van de html-bestand af te drukken.

Als u niet nodig om af te drukken uit het geheugen (of zich kan veroorloven om te schrijven naar de schijf in een tijdelijk bestand) die u kunt gebruiken:

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();
}

NB Dit werkt alleen op Windows 2000 en hoger, denk ik.

antwoordde op 03/08/2008 om 19:06
bron van user

stemmen
-1

Ik weet niet de specifieke instrumenten, maar er zijn enkele utilities die record / replay klikt. Met andere woorden, kunt u automatiseren van het "klik" op het afdrukdialoogvenster. (Ik weet dat dit een hack, maar als al het andere faalt ...)

antwoordde op 20/09/2008 om 18:37
bron van user

stemmen
0

Misschien zal dit helpen. http://www.codeproject.com/KB/printing/printhml.aspx ook niet zeker wat draad u probeert om toegang te krijgen tot de browser controle uit, maar het moet STA zijn

NB - De in de link naar verwijst project heeft kunt u naar een pagina en het uitvoeren van een afdruk zonder dat het dialoogvenster voor afdrukken.

antwoordde op 17/06/2009 om 18:36
bron van user

stemmen
3

Als je het hebt in de begroting (~ $ 3000), check out PrinceXML .

Het zal HTML goed maken in een PDF, functioneert in een service-omgeving en ondersteunt geavanceerde functies zoals het niet breken van een pagina in het midden van een tabel cel (die veel browsers doen momenteel geen ondersteuning).

antwoordde op 12/04/2010 om 18:57
bron van user

stemmen
3

Gemakkelijk! Splits uw probleem in twee eenvoudiger delen:

  1. maken de HTML naar PDF
  2. print de PDF ( SumatraPDF )
  • -print-to-default $file.pdf drukt een PDF-bestand op een standaard printer
  • -print-to $printer_name $file.pdf drukt een PDF op een bepaalde printer
antwoordde op 15/08/2012 om 14:27
bron van user

stemmen
0

Ik instrument dat werkt heel goed voor mij is HiQPdf. https://www.hiqpdf.com/

De prijs is redelijk (vanaf $ 245) en het kan HTML verlenen aan een PDF en ook rechtstreeks beheer van de afdrukken van de PDF-bestanden.

antwoordde op 08/09/2019 om 05:35
bron van user

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