Newsgroup: it.comp.appl.access
Titolo: Quando termina la generazione del file PDF?

Ho provato a cercare nel NG ma non ho trovato nulla.
C'č un modo per sapere il momento preciso della fine della generazione del
file PDF dopo l'utilizzo della stampa virtuale.
Una volta intercettato l'evento file "unlocked" procederei poi al
confezionamento e-mail con allegati ecc.
Ciň che faccio poco elegantemente e  provare e rinominare il file finché non
viene piů restituito errore in un while impostata con un timeout. Non appena
il ren va a buon fine posso procedere all'inserimento dell'allegato. Ma č
una soluzione poco "professionale" direi.
Qualcuno ha suggerimenti.
Vi ringrazio.
Daniele

"OneEDP" <one NON emmedi PROVARCI @ NEMMENO 
tin.it
INTESI?> ha scritto nel messaggio
news:9if2d.5743$2T6.1...@twister1.libero.it...

Come mandi l'email???
MAssimiliano

 ha scritto nel messaggio
news:vKg2d.17928$B06....@news.edisontel.com...

togli Upper Case anti spamming...
Ciao

"OneEDP" <one NON emmedi PROVARCI @ NEMMENO 
tin.it
INTESI?> ha scritto nel messaggio
news:lWg2d.5959$2T6.1...@twister1.libero.it...

On ci siamo capiti.
Con quale metodo mandi le email con allegati???
Cdo, winsock, sendobject...
MAssimiliano


Aaaa...bischero che sono.
Metodo Outlook.MailItem.Attachments.Add di VBA Outlook 2000.
Visto che mi chiedi con quale metodo invio l'e-mail devo precisarti che
all'utente viene data la possibilità di modificare il corpo del messaggio
durante la generazione in backgrounde del file PDF (un po' pericoloso
direi...)... infatti durante la digitazione l'utente si vede inserire
l'allegato PDF una volta che l'utente ha combinato i suoi guai spetterà a
lui inviare con un paio di click.
Altrimenti una volta abilitato Express Click-Yes l'e-mail in alcuni casi
viene inviata automaticamente senza intervento dell'utente.
Spero di essere stato chiaro.
Ciao
Daniele

"OneEDP" <one NON emmedi PROVARCI @ NEMMENO 
tin.it
INTESI?> ha scritto nel messaggio
news:clh2d.6290$zF3.1...@twister2.libero.it...

Usa il metodo CDO è comodissimo, indolore,
gestisci lui la generazione del PDF e non
costringi il
cliente all'acquisto della licenza di office -
lavora con OE-.
MAssimiliano

"OneEDP" <"OneEDP"> wrote in message
news:9if2d.5743$
2T6.1...@twister1.libero.it

Se il PDF viene generato in BackGround non riesci a determinare
il termine.
Per farlo devi avere un processo attivo e testare la fine
del processo con le API.
Ciao.
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Si dovrebbero scrivere decine di righe...
Questa è un'alternativa senza un timeout
    On Error Resume Next
    Kill strNomeAllegatoCompleto
    STAMPA IL REPORT SULLA STAMPANTE PDF
    'termina il ciclo quando l'allegato sarà completamente generato in PDF
    Do
        Name strNomeAllegatoCompleto As strNomeAllegatoCompleto
        DoEvents
    Loop Until Err.Number <> conFileInesistente
    On Error GoTo Err_cmdCreaEmail_Click
    OK ORA L'ALLEGATO E' PRONTO
Se ci sono alternative ti sarei grato... anche perché sarebbe difficile
andare a scovare le API che servono in questo caso.
Grazie
Daniele



In passato ho avuto difficoltà nel trovare documentazione su CDO. Non saprei
da dove cominciare...
Ciao e grazie.
Daniele

"OneEDP" <one NON emmedi PROVARCI @ NEMMENO 
tin.it
INTESI?> ha scritto nel messaggio
news:HBh2d.6061$2T6.1...@twister1.libero.it...

Imnserisci le librerie cdo.
Dim mymsg as new cdo.message
with msg
    .to = "one NON emmedi PROVARCI @ NEMMENO
tin.it
"
    .subject = "Prova Invio email"
    .from = "one NON emmedi PROVARCI @ NEMMENO
tin.it
"
    .addattachment "strNomeAllegatoCompleto"
    .htmlBody = tuocontrollo & chr(13) & chr(10)
"ciao OneEDP"
    .send
end msg
ciao MAssimiliano


Questo presume che l'allegato sià già pronto. Occorrerebbe fare qualche
passo indietro... prima di addattachment... cmq manca l'help dei metodi e
proprietà dove li scovo? Ho registrato CDO.DLL nei riferimenti ma non ho
altro.
Quali sono le nuove dritte?
Grazie
Daniele

"OneEDP" <one NON emmedi PROVARCI @ NEMMENO 
tin.it
INTESI?> ha scritto nel messaggio
news:KXh2d.6375$zF3.1...@twister2.libero.it...

Ho saltato la parte della generazione del pdf,
perchè la ritenevo già pronta.
Come generi il pdf?
Con quale programma e quale istruzione?
MAssimiliano

 ha scritto nel messaggio
news:o1i2d.17961$B06....@news.edisontel.com...

Semplicemente con DoCmd.PrintOut acPrintAll dopo aver selezionato il report
in anteprima e avere "invitato" l'utente a "stampare" in PDF. In seguito la
stampante virtuale farà il resto dopo aver indicato in una chiave del
registro di sistema in quale posizione e quale nome dare al file da
generare. (uso ghostscript e una stampante qualunque PS)...
Grazie
 Daniele

"OneEDP" <one NON emmedi PROVARCI @ NEMMENO 
tin.it
INTESI?> ha scritto nel messaggio
news:S7i2d.6126$2T6.1...@twister1.libero.it...

ma allora scusa non hai bisogno di printout
Ti basta docmd.openreport tuoreport
fatto così non dovresti avere problemi
MAssimiliano

 ha scritto nel messaggio
news:kci2d.17964$B06....@news.edisontel.com...

E' qui il punto. Dopo l'anteprima di stampa come fa CDO a sapere che la
generazione PDF è conclusa una volta che viene stampato il report con
ghostscript? Si rischia di generare errore o peggio di inserire un allegato
"vecchio".
Che ne pensi?
Ciao

"OneEDP" <one NON emmedi PROVARCI @ NEMMENO 
tin.it
INTESI?> ha scritto nel messaggio
news:mgi2d.6148$2T6.1...@twister1.libero.it...

Se vuoi fare un'anteprima, falla su un report
identico.
MAssimiliano

 ha scritto nel messaggio
news:5mi2d.17971$B06....@news.edisontel.com...

Temo che ci siamo persi per la fretta. Ti invito a leggere l'inizio del
thread: lì c'è il quesito principale... o forse non ho chiarito abbastanza.?
Grazie.
Daniele


Gaurda io non uso GhostScript ma win2pdf, ma tu
hai provato la funzione che c'è sul sitocomune
lanciare un'applicazione eattenderne la fine?
MAssimiliano

 MAssimiliano
Bhè in questo caso non c'è nessuna applicazione da lanciare con una shell.
Cmq il concetto è quello: uso una stampante virtuale che genera file pdf e
win2pdf fa la stessa cosa.
Ti ricordo che uso DoCmd.PrintOut... poi bisogna vedere che fine fa il file
PDF, se esiste, se è bloccato perché in fase di generazione, se è chiuso e
quindi disponibile ad uso e consumo.
Come diceva Alex una maniera è intercettare con le API ghostscript... ma è
troppo dispendioso.
Che ne pensi?
Ciao

Non te la prendere... risponderò domani ora spengo ogni 'osa.
Ciao Daniele

 Ciao
Guarda che io emetto ordini a ripetizione.
e lancio un
savesetting .....   ' in cui metto i riferiemnti
alal chiave di registro
docmd.openreport ....
e poi invio il file con cdo
e va che č unameraviglia.
Di piů non so aiutarti, se mi credi bene,
altrimenti credo di riuscire a dormire stanotte
cmq...
MAssimiliano

 Daniele
Non sarebbero necessarie decine di righe, ma per come stai lavorando tu
credo che la soluzione più semplice sia quella che hai esposto, e che
peraltro funziona bene.
Ha solo un difetto che potrebbe rilevarsi GRAVE:
supponi si pianti la generazione del file via VirtualPrinter....???
Usa le Api per gestire l'ESC all'interno del Loop
Ciao-
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

 ha scritto nel messaggio
news:cickt4$mhe$1...@lacerta.tiscalinet.it...

Ho omesso per brevità di inserire nel loop un controllo sul time out a max
120 secondi... sempre che il blocco della stampante virtuale non abbia
ripercussioni più gravi.
Ciao e graazie.



Ma no, perché non dovrei crederti... è solo che non l'ho mai usato e non
conosco nulla sulla libreria in questione... probabilmente cdo si comporta
in maniera diversa da VBA outlook.
Ciao e grazie ancora
Daniele


Ciao
Daniele

 Daniele
Ciao Daniele.
Non ho mai pensato a qualche cosa di simile, come
ti dicevo con le API e con Process control verifichi
un processo aperto, non credo sia possibile accedere ad
un processo se non riconoscibile, e non saprei come intercettarlo
senza aver le API del programma che usi per la Conversione.
Tempo fà Acrobat metteva a disposizione per la versione 3
la documentazione delle API di Acrobat e le modalità
di accesso.
Il problema è che con questi documenti qualche "Programmatore"
è riuscito a fare dei Wrapper verso le Dll senza dover
ricorrere ad Acrobat.
Risultato ora le API di Acrobat non hanno documentazione.
L'unico modo sicuro sarebbe quello di usare gli eventi previsti
dalla Dll dedicata alla creazione del PDF, è certo che
gestisca gli eventi.
Come dicevi però forse conviene non solo verificare l'esistenza del
file, ma anche gli attributi, sai che se non è ultimato risulta
bloccato.
Forse si potrebbe fare anche altro, ma dovrei smacchinare
ed ora non ho molto tempo a disposizione.
Ho 2 grossi studi in corso:
1)Controlli di Windows via API che inparte sono pubblicati
ma sto realizzando un Programmino finito +/- utile fatto tutto
con API(nessun controllo di Access).(a scopo di gioco per il sito
mentre per me è a scopo di imparare ad usare MFC)
2)Fare un Wrapper verso Winsok32, mi fanno incazzare gli OCX.
Ciao.
Alessandro.



Ti ringrazio
Ciao
Daniele


Caro NG devo delle scuse.
Ho sottovalutato il metodo Attachments.Add dell'oggetto MailItame di Outlook
9.0.
Effettivamente il metodo inserisce l'allegato non appena il file non è più
bloccato, ossia è terminata la generazione PDF da parte della stampante
virtuale PDF. Non occorre nessuna pippa mentale. Il metodo Add fa tutto il
resto... wait ed insert! Se il file allegato non viene generato (ossia non
esiste) Access invierà un errore avvertendo l'inesistenza del file da
allegare.
Bhe... l'unica accortezza è accertarsi di aver "iniziato" la generazione del
pdf prima di eseguire il metodo Add, altrimenti potrebbero crearsi degli
incovenienti... specialmente se il PC ha parecchie risorse impegnate...
forse qualche decina di millisecondi tra un'istruzione e l'altra io la
darei.
A carico del codice rimane naturalmente l'uso corretto dei nomi file e del
path.
Scusate ancora.
Ciao
Daniele.

"OneEDP" <one NON emmedi PROVARCI @ NEMMENO 
tin.it
INTESI?> ha scritto nel messaggio
news:U5C2d.8080$zF3.1...@twister2.libero.it...

Che è quello che ti ho detto solo che con i CDO
MAssimiliano


Inserisci i riferimenti, creati un with e metti il
punto di intellisense, ti usciranno tutti i metodi
e proprietà
MAssimiliano

 ha scritto nel messaggio
news:VSC2d.18216$B06....@news.edisontel.com...

L'avevo già fatto. Vorrei l'help in linea come per il tutto il resto (tasto
F1).
Ok?
Ciao

 > Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
La cosa potrebbe essere interessante, ma dubito di avere tempo
e voglia di mettermi a svilupparla.......!!!!!!
In ogni caso quanto da te trovato anche se per un linguaggio non
perfettamente identico a VB è comprensibile, ti allego un Link
nel quale trovi come inserire i riferimenti della DLL in questione
e per capire come renderla operativa.
http://www.cs.wisc.edu/~ghost/doc/gsapi.htm
L'esempio che scarichi è un Modulo in VB, che però ha bisogno
di un sacco di dipendenze, ma quello serve per convertire un File
in un PDF(è un Wrapper verso al DLL), da li devi solo capire la
modalità di approccio alle API.
La Dll deve essere nella stessa Dir del programma per non dover
usare il metodo di chiamata esplicito di percorso...!
Vedi un pò questo,  ovviamente a te serve Execute_End.
Il problema potrebbe derivare dal fatto che vuoi affidare al Converter
la GENERAZIONE del PDF, di conseguenza non credo ti sia possibile
agganciarti all'istanza aperta dal Wrapper per gestirne la fine......!!!!!!
' GhostScript function declarations
Private Declare Function gsdll_revision Lib "gsdll32.dll" ( _
    lpString As String, _
    lpString As String, _
    gsrev As Long, _
    gsdate As Long _
) As Integer
Private Declare Function gsdll_init Lib "gsdll32.dll" ( _
    ByVal lpGsBack As Any, _
    ByVal hwnd As Long, _
    ByVal argc As Long, _
    argv As Long _
) As Integer
Private Declare Function gsdll_execute_begin Lib "gsdll32.dll" () As
Integer
Private Declare Function gsdll_execute_cont Lib "gsdll32.dll" ( _
    ByVal pscommand As String, _
    ByVal commlen As Long _
) As Integer
Private Declare Function gsdll_execute_end Lib "gsdll32.dll" () As
Integer
Private Declare Function gsdll_exit Lib "gsdll32.dll" () As Integer
this code is called for each PS file converted.
    llaArgV(0) = agGetAddressForObject&(Argv0(0))
    llaArgV(1) = agGetAddressForObject&(Argv1(0))
    llaArgV(2) = agGetAddressForObject&(Argv2(0))
    llaArgV(3) = agGetAddressForObject&(Argv3(0))
    llaArgV(4) = agGetAddressForObject&(Argv4(0))
    llaArgV(5) = agGetAddressForObject&(Argv5(0))
    llaArgV(6) = agGetAddressForObject&(Argv6(0))
    llaArgV(7) = agGetAddressForObject&(Argv7(0))
    llaArgV(8) = agGetAddressForObject&(Argv8(0))
    ' rcode = gsdll_revision(vbNullString, vbNullString, 0, 0)
    rcode = gsdll_init(AddressOf Callback, frmAutoFax.hwnd, 8,
llaArgV(0))
    initret = rcode
    rcode = gsdll_execute_begin()
    rcode = gsdll_execute_end()
    rcode = gsdll_exit()
Ciao



Grazie mille!
Ciao
Daniele