Vra

Ek werk op'n projek nou wat behels die ontvangs van'n boodskap van'n ander aansoek, die opmaak van die inhoud van die boodskap, en stuur dit na'n drukker.Die tegnologie van keuse is C# windows-diens.Die uitset kan genoem word'n verslag, dink ek, maar'n verslagdoening enjin is nie nodig nie.'n eenvoudige templating enjin, soos StringTemplate, of selfs XSLT uitdruk HTML sou goed wees.Die probleem wat ek het, is die vind van'n gratis manier om te druk hierdie soort van die uitset van'n diens.Aangesien dit lyk dat dit sal werk, ek werk op'n prototipe met behulp van Microsoft se RDLC, mense aan'n plaaslike verslag en dan die lewering van dit as'n beeld om'n geheue stroom, wat ek sal dan druk.Kwessies met wat:

  • Multi-page druk sal wees om'n groot kopseer.
  • Nog steeds het om te gebruik PrintDocument te druk die geheue stroom, wat nie ondersteun in'n Windows-Diens (al is dit dalk werk - nie gekry het wat ver met die prototipe nog)
  • As die data oor te kom veranderinge, ek het om te verander die dataset en die klas wat die data word deserialized in.sleg sleg sleg.

Het iemand gehad het om iets te doen afstand soos hierdie?Enige raad?Ek het reeds gepos'n vraag oor die druk HTML-sonder toevoer van die gebruiker, en na om te mors oor 3 dae op dat, ek het gekom tot die gevolgtrekking gekom dat dit kan nie gedoen word nie, ten minste nie met enige vrylik beskikbaar instrument.

Alle hulp sal waardeer word.

EDIT:Ons is op weergawe 2.0 van die .NET framework.

Was dit nuttig?

Oplossing

Glo my, sal jy meer geld te spandeer probeer om te soek / ontwikkel 'n oplossing vir hierdie as in vergelyking met die koop van 'n derde party komponent. Moenie weer die wiel uitvind en gaan vir die betaal oplossing.

Printing is 'n komplekse probleem en ek wil graag die dag toe beter raamwerk ondersteuning is bygevoeg vir hierdie sien.

Ander wenke

Druk uit 'n Windows diens is regtig pynlik. Dit blyk te werk ... soms ... maar uiteindelik is dit craches of gooi 'n uitsondering van tyd tot tyd, sonder enige duidelike rede. Dit is regtig hopeloos. Amptelik, is dit selfs nie ondersteun , sonder enige verduideliking of enige voorstel vir 'n alternatiewe oplossing.

Onlangs het ek is gekonfronteer met die probleem en na 'n paar onsuksesvolle proewe en Experiment, het ek uiteindelik met twee lewensvatbare oplossings:

  • Skryf jou eie drukwerk DLL met behulp van die Win32 API (in C / C ++ byvoorbeeld), gebruik dit dan uit jou diens met P / roep (werk goed)
  • Skryf jou eie drukwerk COM + komponent, gebruik dit dan uit jou diens. Ek het hierdie oplossing met sukses onlangs gekies (maar dit was 'n derde party COM + komponent, nie die eienaar van geskrewe) Dit werk ook absoluut fine.

Ek het dit gedoen. Dis 'n pyn in die A * s. Die probleem is dat die druk vereis dat GDI-enjin in plek moet wees, wat gewoonlik beteken dat jy moet die lessenaar, wat net laai wanneer jy ingeteken het. As jy probeer om dit te doen uit 'n diens op 'n bediener, dan sal jy normaalweg nie in geteken nie.

So eerste jy kan nie hardloop as die normale diens gebruiker, maar in plaas daarvan as 'n werklike gebruiker wat interaktiewe login regte het. Dan moet jy die diens register inskrywings aanpas (Ek vergeet hoe op die oomblik, sou hê om die kode wat ek vanaand kan doen as jy regtig belangstel vind). Ten slotte, jy het om te bid.

Jou grootste langtermyn hoofpyn sal wees met gedrukte bestuurders. As jy as 'n diens loop sonder 'n aangemeld gebruiker, 'n paar druk bestuurders wil pop-up vensters van tyd tot tyd. Wat gebeur wanneer jou drukker is uit toner? Of uit papier? Die bestuurder kan pop-up 'n dialoog wat nooit gesien sal word, en hou die drukker tou want niemand is aangeteken in!

Druk uit 'n diens is 'n slegte idee. Netwerk drukkers verbind "per-gebruiker". Jy kan die diens uit te voer as 'n spesifieke gebruiker merk, maar Ek sal dit oorweeg dat 'n slegte sekuriteit praktyk. Jy kan in staat wees om aan te sluit op 'n plaaslike drukker, maar ek wil nog huiwer voordat hulle dié roete.

Die beste opsie is om die diens winkel het die data en 'n gebruiker van stapel gestuur aansoek doen die druk deur te vra die diens vir die data. Of 'n gemeenskaplike plek wat die data gestoor word, soos 'n databasis.

As jy nodig het om die data gedruk as gereelde tussenposes, die opstel van 'n Taak gebeurtenis deur middel van die Taak Planner het. Bekendstelling van 'n proses van 'n diens sal vereis om te weet die gebruiker naam en wagwoord, wat weer is sleg sekuriteit praktyk.

As vir die druk self, gebruik 'n derde party instrument om die verslag te genereer sal die maklikste wees.

Om jou eerste vraag te beantwoord, kan hierdie redelik reguit vorentoe wees, afhangende van die data. Ons het 'n verskeidenheid van-Diens gebaseerde programme wat doen presies wat jy vra. Tipies, ontleed ons die inkomende lêer en draai ons eie Postscript of PCL rondom dit. As jy uitleg is redelik eenvoudig, dan is daar 'n paar baie basiese PCL kodes kan jy dit draai met die skrif / druk layup jy wil verskaf (Ek sal meer as gelukkig wees om jou 'n paar riglyne hier gee op die regte pad).

Een jy 'n gedrukte gereed lêer wat jy kan dit aan 'n UNC drukker wat gedeel stuur, direk na 'n plaaslik geïnstalleer drukker, of selfs om die IP van die toestel (RAW of tipe LPR data).

As jy egter gaan af in die PDF pad, die eenvoudigste metode is om die PDF uitvoer na 'n drukker wat direkte PDF druk (baie doen nou) ondersteun stuur. In hierdie geval jy net stuur die PDF na die toestel en weg dit druk.

Die ander opsie is om te begin Ghost wat gratis vir jou behoeftes moet wees ( check die lisensiëring as hulle 'n paar ander weergawe, sommige GNU, sommige GPL ens) en óf dit is gebou in die gedrukte media funksie of eenvoudig te skakel na Postscript en stuur dit na die toestel. Ek het Ghost baie keer gebruik in Service programme, maar nie 'n groot fan as wat jy basies sal granaat uit en uitvoering van 'n command line app om die omskakeling te doen. Dit gesê, is dit 'n stabiele artikels wat nie geneig is om grasieus misluk

Dit is dalk nie wat jy soek nie, maar as ek nodig het om hierdie vinnige en vuil te doen, sou ek:

  1. Skep 'n aparte WPF aansoek (sodat ek kon gebruik die ingeboude dokument hantering)
  2. Gee die diens die vermoë om met die lessenaar (let op dat jy nie eintlik iets te wys op die lessenaar, of aangeteken vir hierdie om te werk)
  3. Het die diens hardloop die aansoek, en gee dit die data te druk.

Jy kan waarskynlik ook hierdie Jigger te druk van 'n webblaaier wat jy hardloop uit die diens (al het ek sou aanbeveel die bou van jou eie dop Internet Explorer, eerder as die gebruik van 'n volle leser).

Vir 'n meer gedetailleerde (ook gratis) oplossing, jou beste bet is waarskynlik met die hand die dokument self formaat (met behulp van GDI + om die uitleg te doen vir jou). Dit is vervelig, fout geneig, tydrowend, en afval 'n baie papier tydens die ontwikkeling, maar ook gee jou die meeste beheer oor wat gaan die drukker.

As jy kan uitvoer om script te plaas sommige drukkers sal enigiets wat kry FTPed om 'n sekere gids op hulle te druk.

Ons gebruik hierdie verby die gedrukte krediete wat ons universiteit blootgestel aan ons uit te kom, maar indien u diens uitgange na 'n PS dan kan jy net ftp die PS lêer na die drukker.

Ons gebruik DevExpress 'XtraReports om druk uit 'n diens sonder enige probleme . Hul verslag model is soortgelyk aan dié van Windows Vorms, sodat jy kan dinamiese voeg tekselemente en dan reik die opdrag druk.

Ek dink ons is gaan om te gaan die derde party roete.Ek hou van die XSL -> HTML -> PDF -> Drukker vloei...Winnovative se HTML te PDF lyk goed vir die eerste deel, maar ek hardloop in'n blok die vind van'n goeie PDF te druk oplossing...enige voorstelle?Ideaal gesproke die lisensie sou wees op'n ontwikkelaar basis, nie op'n ontplooi runtime basis.

In antwoord op jou vraag oor PDF druk, het ek nie gevind 'n elegante oplossing. Ek was "dop" ing uit te Adobe wat onbetroubaar was en vereis 'n gebruiker ingeteken wees om te alle tye. Om hierdie spesifieke probleem op te los, versoek ek dat die lêers ons te verwerk (fakture) geformateer as multi-bladsy TIFF-lêers in plaas wat uitmekaar kan verdeel word en gedruk die gebruik van inheemse NET druk funksies. posisie Adobe se blyk te wees "kry die gebruiker in staat om die lêer in Adobe Reader en hulle kan druk op". Nutteloos.

Ek is nog steeds gretig om 'n goeie manier van die vervaardiging van gehalte verslae wat uitset van die web bediener kan wees vind ...

Druk behulp System.Drawing.Printing word nie ondersteun deur MS, soos per reaksie Yann Trevin se. Maar, kan jy in staat wees om die nuwe, WPF-gebaseerde, System.Printing gebruik (I dink )

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top