Tisk z .NET služby

hlasů
19

Já jsem pracoval na projektu, právě teď, která zahrnuje přijetí zprávy z jiné aplikace, formátování obsahu této zprávy, a předat jej do tiskárny. Technologie výběru je C # Windows služba. Výstup by se dalo nazvat zprávu, myslím, ale motor zpráv není nutné. Jednoduchý šablon motorů, jako StringTemplate, nebo dokonce XSLT výstup HTML by bylo v pořádku. Problém mám je najít volný způsob tisku tento druh výstupu ze služby. Vzhledem k tomu, zdá se , že to bude fungovat, jsem pracoval na prototypu pomocí RDLC Microsoft, vyplnění místní zprávy a pak je činí jako obraz na paměťovou proudu, které jsem pak vytisknout. Problémy s, že jsou:

  • Multi-page tisk bude velká bolest hlavy.
  • Ještě muset použít PrintDocument vytisknout paměťovou proud, který je podporován ve službě Windows (i když to může fungovat - nedostal tak daleko s prototypem ještě)
  • Pokud jsou data přicházející přes změny, musím změnit datový soubor, a třídu, která data jsou rekonstruován do. špatná špatná špatná.

Má někdo musel udělat něco vzdáleně takhle? Nějaká rada? Už jsem položil otázku o tisku HTML bez zásahu uživatele, a poté, co ztrácíme asi 3 dny na to, že jsem dospěl k závěru, že nelze provést, alespoň ne s volně dostupného nástroje.

All pomoc je oceňována.

EDIT: Jsme na verzi 2.0 .NET framework.

Položena 11/08/2008 v 18:37
zdroj uživatelem
V jiných jazycích...                            


11 odpovědí

hlasů
13

Věřte mi, budete trávit víc peněz, se snaží hledat / vyvinout řešení pro to jak ve srovnání s nákupem komponent třetích stran. Nepoužívejte znovu vynalézat kolo a jít na placené řešení.

Tisk je složitý problém a rád bych vidět den, kdy se k tomu přidává lepší rámec podpory.

Odpovězeno 11/08/2008 v 20:20
zdroj uživatelem

hlasů
8

Tisk z služba systému Windows je opravdu bolestivé. Zdá se, že práce ... někdy ... ale nakonec to craches nebo výjimku z času na čas, bez jasného důvodu. Je to opravdu beznadějné. Oficiálně to ještě není podporován , a to bez jakéhokoli vysvětlení, ani žádný návrh na alternativní řešení.

V poslední době jsem byl konfrontován s problémem a po několika neúspěšných pokusech a experimenty, přišel jsem nakonec dva životaschopné řešení:

  • Napište svůj vlastní tisk DLL pomocí Win32 API (v C / C ++ například), pak použijte ji ze svého provozu s P / Invoke (funguje)
  • Napište vlastní + komponenty COM tisk a poté jej používá ze svého provozu. Toto řešení s úspěchem jsem si vybral v poslední době (ale to bylo stranou COM + součást třetí, nevlastní písemná) Funguje to naprosto v pořádku taky.
Odpovězeno 11/08/2008 v 20:01
zdroj uživatelem

hlasů
5

Udělal jsem to. Je to bolest v A * S. Problém je v tom, že tisk vyžaduje, aby GDI motoru musí být na svém místě, což obvykle znamená, že budete mít na ploše, který načte pouze v případě, že jste přihlášen. Pokud se snažíte, aby to ze služby na serveru, pak se za normálních okolností nejsou přihlášeni.

Takže nejprve nelze spustit jako normální uživatel služby, ale jako skutečný uživatel, který má interaktivní přihlašovací práva. Pak budete muset vyladit položky registru služby (jsem zapomněl, jak v současné době, by musel najít kód, který mohu udělat dnes, pokud jste opravdu zájem). Konečně, máte se modlit.

Váš největší dlouhodobá bolest hlavy bude s tiskové ovladače. Pokud jsou spuštěny jako služby bez přihlášeného uživatele, některé ovladače tisku rádi pop-up dialogy z času na čas. Co se stane, když vaše tiskárna došel toner? Nebo z papíru? Řidič může pop-up dialog, který nebude nikdy neviděl, a držet frontu tiskárny, protože je přihlášen nikdo!

Odpovězeno 07/10/2008 v 15:21
zdroj uživatelem

hlasů
4

Tisk z provozu je špatný nápad. Síťové tiskárny jsou připojeny „per-uživatel“. Můžete označit službu má být spuštěn jako konkrétního uživatele, ale já bych za to, že špatnou bezpečnostní praxi. Byste měli být schopni se připojit na místní tiskárně, ale já bych ještě váháte, než jít touto cestou.

Nejlepší možností je, že má služba úložiště dat a mají aplikace uživatelsky zahájil dělat tisku tím, že žádá službu pro data. Nebo společného umístění, že data jsou uložena jako databáze.

Potřebujete-li mít data vytisknou pravidelných intervalech, nastavení události Task přes Plánovač úloh. Zahájení procesu z provozu bude vyžadovat znát uživatelské jméno a heslo, které je opět špatná bezpečnostní praxe.

Co se týče samotného tisku pomocí nástroje třetí strany ke generování sestavy bude nejjednodušší.

Odpovězeno 11/08/2008 v 23:08
zdroj uživatelem

hlasů
3

Chcete-li odpověď na vaši první otázku, může to být docela rovně vpřed v závislosti na typu dat. Máme celou řadu aplikací založených na službách, které dělají přesně to, co žádáte. Obvykle jsme se analyzovat příchozího souboru a zabalit vlastní PostScript nebo PCL kolem něj. Máte-li rozložení je poměrně jednoduchá, pak tam jsou některé velmi základní PCL kódy můžete ji zabalit s poskytovat font / tisku layup chcete (já bych být více než rádi, aby vám nějaké pokyny zde v režimu offline).

Jeden máte připravený soubor tisku můžete jej poslat do tiskárny UNC, která je sdílena, přímo na místně instalované tiskárny, nebo dokonce na IP adresu zařízení (data RAW nebo LPR typu).

Pokud však budete na cestě PDF, nejjednodušší způsob je odeslat ve formátu PDF na tiskárně, která podporuje přímý tisk PDF (mnoho z nich nyní). V tomto případě stačí poslat soubor PDF k zařízení a pryč vytiskne.

Druhou možností je, aby zahájily Ghostscript , která by měla být zdarma pro vaše potřeby (kontrolu licencí, protože mají několik různých verzí, některé GNU, některé GPL atd), a to buď pomocí že je postaven ve funkci tisku nebo jednoduše převést do PostScriptu a odeslat zařízení. Použil jsem Ghostscriptem mnohokrát v aplikacích služby, ale ne velký fanoušek, jak si bude v podstatě být ostřelování ven a provádění příkazového řádku aplikace si dělat konverze. Jak již bylo řečeno, je to stabilní aplikace, která má sklon k neúspěchu elegantně

Odpovězeno 07/10/2008 v 15:08
zdroj uživatelem

hlasů
1

Použili jsme DevExpres XtraReports tisknout ze služby bez jakýchkoliv problémů. Jejich model zpráva je podobná jako u Windows Forms, takže si mohl dynamicky vložit textové prvky, a poté vydá příkaz k tisku.

Odpovězeno 27/08/2009 v 20:13
zdroj uživatelem

hlasů
1

Pokud můžete výstup post skript některé tiskárny bude tisknout nic, co dostane FTPed do určitého adresáře na ně.

Použili jsme to dostat přes tiskové kreditů, které naše univerzita vystavených na nás, ale pokud vaše služby výstupy do PS pak stačí FTP soubor PS do tiskárny.

Odpovězeno 07/10/2008 v 15:26
zdroj uživatelem

hlasů
1

To nemusí být to, co hledáte, ale když jsem potřeboval to udělat rychle a špinavý, bych:

  1. Vytvořte samostatnou aplikací WPF (takže jsem mohl použít vestavěný-in manipulaci dokument)
  2. Dát tato služba schopnost spolupracovat s plochou (všimněte si, že nemáte ve skutečnosti mají ukázat něco na ploše, nebo se přihlásit na tuto práci)
  3. Mají službu spustit aplikaci, a dát mu data k tisku.

Dalo by se pravděpodobně také štamprle to vytisknout z webového prohlížeče, který je provozován ze služby (i když bych doporučil vytvoření vlastního shell IE, spíše než použití plné prohlížeče).

Pro podrobnější (také zdarma) řešení, je nejlepší je pravděpodobně ručně formátování dokumentu sami (za použití GDI + dělat layout pro Vás). Je to únavné, náchylné k chybám, časově náročné a odpady spoustu papíru během vývoje, ale také vám dává maximální kontrolu nad tím, co se děje na tiskárnu.

Odpovězeno 11/08/2008 v 18:46
zdroj uživatelem

hlasů
0

Tisk pomocí System.Drawing.Printing nepodporuje MS, podle Yann Trevin své odpovědi. Nicméně, měli byste být schopni používat nový, WPF na bázi System.Printing (I myslím )

Odpovězeno 14/07/2009 v 23:25
zdroj uživatelem

hlasů
0

V odpovědi na vaši otázku o tisku PDF, nenašel jsem elegantní řešení. Byl jsem „shell“ ing out společnosti Adobe, která byla nespolehlivá a vyžadoval, aby uživatel byl přihlášen po celou dobu. Chcete-li tento konkrétní problém, požádal jsem, že soubory zpracováváme (faktury) jsou formátované jako vícestránkové soubory TIFF místo, které je možné rozdělit od sebe a tištěných pomocí funkcí nativní .NET tisku. Pozice Adobe se zdá být „dostat uživatele k zobrazení souboru v Adobe Readeru a mohou klepněte na tlačítko Tisk“. Zbytečný.

Jsem stále zájem najít dobrý způsob, jak produkovat kvalitní zprávy, které mohou být výstupem z webového serveru ...

Odpovězeno 21/10/2008 v 14:09
zdroj uživatelem

hlasů
0

Myslím, že jsme se jít cestou třetích stran. Líbí se mi, XSL -> HTML -> PDF -> Printer průtok ... Winnovative v HTML do PDF vypadá dobře pro první část, ale běžím do bloku najít dobré řešení pro tisk PDF ... nějaké návrhy? V ideálním případě se licence bude na vývojáře bázi, nikoli na nasazené runtime bázi.

Odpovězeno 11/08/2008 v 21:38
zdroj uživatelem

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