Newsgroup: it.comp.appl.access
Titolo: Controllo sullo spool di stampa.

Ciao a tutti,
mi sono quasi arreso e non ho trovato niente nemmeno qui.
Ho sviluppato un applicativo che gestisce la fatturazione, dal quale
posso stampare (creare) dei PDF tramite "PDF Creator 0.9.5".
Ho un report configurato per essere "stampato" con il suddetto. Nel
progr. ho impostato il path di salvataggio (dove poi andrò a reperire
il files) e il nome ("Fattura") che gli sarà attribuito. La procedura
consente la "stampa" multipla tramite una form dove posso impostare il
range temporale: es. stampo tutte le fatture di Maggio.
Dopo aver dato il comando di stampa, il "PDF Creator" si comporta come
qualsiasi stampante, quindi gestita dall'OS che si occupa dello
spooling: procedura asincrona.
Dopo che viene creato il file, lo rinomino (sempre in runtime) secondo
una nomenclatura specifica che rende univoco il file, cioè con data e
numero ("20080912032.pdf"); qui nasce il problema: devo attendere che
il file sia stato scritto, prima di rinominarlo, ma come faccio a
sapere quando? Ho tentato di risolvere con un ciclo che verifichi lo
stato del file, immaginando che l'OS lo consideri bloccato sino a fine
scrittura, ma non ho avuto esito. Potrei anche "ciclare" le dimensioni
del file, se sapessi quanto occuperà (credo sia impossibile).
Grazie in anticipo.
Fabrizio Alessandri.


Spiega come hai fatto a verificare lo stato del File...???
Se lo apri in Scrittura, finchè non è stato chiuso dallo Spooler
dovrebbe essere bloccato e restituire errore all'azione OPEN ma devi
aprire in SCRITTURA.
La'lternativa è di provare ad aprire un processo sulla stampa ed usare
il WaitForSingleObject(API) in questo caso non dovrebbe servire
interfacciarsi con lo Spooler, cosa peraltro abbastanza complessa.
Prova a vedere in questo Demo... la stampa ciclica si avvia solo
quando è stata ultimata quella precedente, proprio con la tecnica
sopradescrtitta, vedi se può esserti utile:
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=236
@Alex


Qualcosa non mi torna: da parecchio tempo uso PDFCreator per la fatturazione 
differita e non mi risulta si debba fare qualcosa di particolare per per 
verificare lo stato del file.
Ma tu utilizzi il codice d'esempio accluso nella documentazione?
Parametri di questo tipo:
      .cStart "/NoProcessingAtStartup"
      .cOption("UseAutosave") = 1
      .cOption("UseAutosaveDirectory") = 1
      .cOption("AutosaveDirectory") = PathFilePDF
      .cOption("AutosaveFilename") = NomeFilePDF
      .cOption("AutosaveFormat") = 0
      DefaultPrinter = .cDefaultPrinter
      .cDefaultPrinter = "PDFCreator"
      .cClearCache
Saluti.

 @Alex
Do subito un occhiata alla tua Demo.
Grazie Alex.
Fabrizio.
P.S.
ho temporaneamente risolto, dando un ritardo di 0,5" dopo ogni stampa,
ma è un rimedio orrendo.

 Saluti.
No, non sfrutto le "com" incluse nella documentazione; i settaggi li
imposto una volta per tutte alla prima installazione, tramite
l'interfaccia grafica, proprio perchè non ho necessità di cambiarli.
Quando detti un'occhiata alla documentazione, non ricordo di aver
trovato qualcosa che intercetti la fine del processo di stampa, cioè
quello che mi serve.
Grazie Simone.
Fabrizio.


Beh, se tu utilizzi il codice dell'esempio VB accluso al prodotto puoi 
risolvere senza problemi (include un temporizzatore per rendere "sincrono 
"il processo).
Saluti. 

 Saluti.
Scusa ma forse fraintendo: se "temporizza" (è ciò che sto facendo in
attesa di una soluzione alternativa) come fa a rendere sincrono il
processo? Se viceversa riconosce la fine stampa, è ciò che mi serve.
Grazie.
Fabrizio.


Prova il codice d'esempio di cui ti parlavo: genera il file .PDF (col nome 
che ti pare, tra l'altro) e subito dopo lo hai disponibile per farci ciň che 
vuoi.
Saluti: Simone 

 Saluti: Simone
UH!
se genera il file col "nome che voglio", il problema è risolto e fra
l'altro non devo fare tutte le operazioni che ho elencato (trovare,
rinominare, etc.) !
Ora che me lo ricordi, lo sapevo che c'era questa opzione... sono il
solito fenomeno    :-)
Grazie ancora.
Fabrizio.

 Saluti: Simone
Scusa Simone, non trovo più la documentazione e sul sito ufficiale non
la trovo; avresti mica un link?
Grazie.


Trovata, grazie lo stesso.