Trapping fine spooling stampa documento word da vb.net

venerdì 22 aprile 2011 - 12.12
Tag Elenco Tags  VB.NET  |  .NET 2.0  |  Windows Server 2003  |  Windows XP  |  Visual Studio 2008  |  SQL Server 2005  |  Office 2000

fulvioavatar Profilo | Newbie

Ciao a tutti, mi sono appena iscritto al foruma e spero risolviate questo mio problema.
Ho scritto una applicazione in vb.net installata su un server aziendale che deve gestire le code di stampa inviate dalla intranet.
Il programma legge le richieste da una tabella sqlserver dove viene specificato il percorso di un documento word 2000 e la stampante di rete sulla quale indirizzare la stampa.
Il problema è che da tale server il tempo di spooling delle pagine da word alla stampante è molto alto.
Io ho scritto un loop di attesa, in modo da non chiudere il documento prima che sia terminata la fase di spooling.
Preferirei però gestire la cosa riuscendo a capire quando è finito lo spooling delle pagine alla stampante: quando uno apre word e stampa un documento tale tempo è indicato dal succedersi delle pagine inviate alla stampante visualizzato nella barra inferiore.
Come faccio a testare tale operazione con vb.script?
Vi posto il codice dove inserire l'istruzione, se esiste.
Ciao e grazie per le risposte.

Dim objWordMaster As New Word.Application
objWordMaster.WordBasic.FilePrintSetup(Printer:=strStampante, _
DoNotSetAsSysDefault:=1)
Dim objDocMaster As New Word.Document
objDocMaster = objWordMaster.Documents.Open(strDoc)
Dim wait As Date = Now
With objWordMaster
'.Visible = True
.ActiveDocument.PrintOut()
Dim i As Integer = 0
While DateDiff(DateInterval.Second, wait, Now) < My.Settings.SecWaitSpooling
End While
End With
objDocMaster.Close(False)
objWordMaster.Quit(False)
objWordMaster = Nothing

AntCiar Profilo | Expert

Ciao.

Io una volta ho dovuto fare una utilitì che stampava in successione dei file (potevano essere di qualsiasi tipo: excell,word,pdf...)
Per non "intasare" di code di stampa ho utilizzato un approccio che mi esulasse dal sapere che tipo di file dovevo stampare.

Ho usato il Process passando al parametro "verb" il valore "print".
ti posto il codice.

Process ps = new Process();
ps.StartInfo = new ProcessStartInfo();
ps.StartInfo.FileName = pathFile;
ps.StartInfo.CreateNoWindow = false;
ps.StartInfo.UseShellExecute = true;
ps.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
ps.StartInfo.Verb = "print";
ps.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
ps.Start();
ps.Close();
Cristian Barca

fulvioavatar Profilo | Newbie

Grande!!!
Ho provato l'istruzione e lo spooling è istantaneo.
Per completare l'opera però manca una cosa fondamentale.
il servizio offerto dall'applicativo deve consentire una stampa non su una sola stampante predefinita, ma accetta in input il percorso di rete della stampante da utilizzare e che non dovrebbe essere utilizzata come nuova stampante di default.
E' possibile indicare al process la stampante da utilizzare senza modificare quella di default?

AntCiar Profilo | Expert

>Grande!!!
>Ho provato l'istruzione e lo spooling è istantaneo.
>Per completare l'opera però manca una cosa fondamentale.
>il servizio offerto dall'applicativo deve consentire una stampa
>non su una sola stampante predefinita, ma accetta in input il
>percorso di rete della stampante da utilizzare e che non dovrebbe
>essere utilizzata come nuova stampante di default.
>E' possibile indicare al process la stampante da utilizzare senza
>modificare quella di default?
>

Ciao.
Non so se è possibile passare anche la stampante. Devo vedere un po su internet se porta qualcosa.
Ciao ciao
Cristian Barca

fulvioavatar Profilo | Newbie

Al limite va bene anche la soluzione di settare la stampante di default cambiandola in base alla richiesta di stampa.
Con Imports System.Drawing.Printing riesco a vedere le stampanti installate:

Dim pkInstalledPrinters As String

For Each pkInstalledPrinters In _
PrinterSettings.InstalledPrinters
cmbStampanti.Items.Add(pkInstalledPrinters)
Next pkInstalledPrinters

Ma non trovo il metodo per settare quella di default.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5