[.NET] Gerenderde HTML printen vanuit non-UI MTA thread

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heren en dames,

Wederom heb ik ruzie met de WebBrowser control. Deze is namelijk niet bruikbaar in een non-UI thread. En geeft überhaupt al problemen als je hem niet gebruikt in een STA thread. Gevolg is dat als ik vanuit bijvoorbeeld een Windows Service wil gaan printen ik hiervoor de WebBrowser control niet kan gebruiken.

Het probleem met STA <> MTA bleek redelijk eenvoudig op te lossen:
- Nieuw thread object maken => SetApartmentState(ApartmentState.STA)
- In nieuwe thread WebBrowser object instantieren en aanroepen.
- In de nieuwe STA thread worden de messages niet "gepumpt". Dus er moet een loop in die Application.DoEvents() uitvoert zolang je document nog niet in de spooler hangt.

Daarnaast was er de optie van mshtml.dll => PrintHTML.
- Stelt geen eisen aan de thread.
- Kan met rundll vanuit een process object gebruikt worden.
- MAAAR geeft altijd een printer dialoog en is dus onbruikbaar in de Windows Service situatie.
- Geeft af en toe onverklaarbare scriptfouten en doet het vervolgens niet!

Ook een optie is AxDHTMLEDLib.AxDHTMLEdit (ActiveX) en IHtmlDocument.
- Zelfde problemen als de WebBrowser control, deze is volgens mij dan ook een wrapper om de active X
- Moet daarnaast een bestand hebben, en dat betekend extra IO kosten wat niet gewenst is.

Heeft iemand een eenvoudige oplossing voor dit probleem? Toepassing is printen van facturen vanuit een WCF service in een magazijn. Rapporten zijn geen optie want dat vind ik niet dynamisch genoeg aangezien ik naar een 'standaard oplossing' toe wil werken.

Ik ben uiteraard bereid concessies te doen:
- Helaas moet ik dus CLI / Process als optie open laten.
- Dat betekend ook een file wegschrijven
Maar geen office licenties => VSTO of office macro achtige oplossingen.

Iemand een geniale ingeving (bv Browsers die ik via CLI zonder interventie van gebruiker kan laten printen)?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Geen enkel tweaker die ooit vanuit een non-UI thread HTML heeft moeten printen?
Moet nu nog steeds noodgedwongen met een delegate naar een UI-thread werken...