Newsgroup: it.comp.appl.access
Titolo: Pdf For Vb Access 97

Vorrei sviluppare nel mio gestionale:
la fatturazione in PDF via E-mail.
Dovresti stampare un PDF per
ogni fattura/e di ogni singolo cliente,
inserire il file con l'indirizzo E-mail
del cliente in posta elettronica.
Adesso uso l'ocx di MAPI
per inviare direttamente un file .htm
in posta elettronica. Questo funziona a meraviglia...
Se qualcuno conosce un OCX PDF free che
svolge la funzione di:
da Vb. stampa il file (e questo lo fanno in tanti)
e lo invia nel comando Mapi ma però da ocx
o da codice Vb.
Grazie mille a chi mi darà un suggerimento
per ampliare il mio gestionale; ci sto lavorando dal 1998...
Davide

 ha scritto nel messaggio
news:c11ng9$4br$1...@lacerta.tiscalinet.it...

Ho sviluppato qualcosa di simile recentemente. Non erano fatture, ma
documenti per importazioni.
Però non ho utilizzato OCX,  Ghostscript e GSView e, inoltre, ho installato
sul pc anche una stampante che potesse generare file .PS (la stampante come
hardware non esiste). Purtroppo non ti posso specificare il mio codice,
perchè in questo momento mi è difficile estrarlo dal programma. In sostanza
prima stampo il documento in formato PS e poi con GSView lo converto in PDF
o altri formati.
Comunque nel sito troverai la tutta la documentazione necessaria.
Sito ufficiale è 
http://www.cs.wisc.edu/~ghost/
GhostScript lo puoi trovare al sito
http://www.cs.wisc.edu/~ghost/doc/AFPL/get813.htm
GSView lo puoi trovare al sito
http://www.cs.wisc.edu/~ghost/gsview/get46.htm
Esempi 
http://www.cs.wisc.edu/~ghost/doc/gsapi.htm
Inoltre puoi trovare nei siti italiani PDFWriter (ricerca così) dichiarato
free, ma ho qualche dubbio che sia completamente free.
Ciao
Eugenio

Scusami, ma nella fretta ho scritto :
"Perň non ho utilizzato OCX,  Ghostscript e GSView ... "
Volevo dire : " Perň non ho utilizzato OCX,  ma Ghostscript e GSView ..."
Ciao
Eugenio

 ha scritto nel messaggio
news:c11ng9$4br$1...@lacerta.tiscalinet.it...


Sono andato a vedere!
Dove tro la sintassi?
"Eugenio" <Ci...@Eugenio.it> ha scritto nel messaggio
news:c11t0b$7li$1...@lacerta.tiscalinet.it...


 Dove tro la sintassi?
Nel file "gsapi_vb.zip" c'è un file che si chiama "gsapi_vb6.bas". Aprendolo
con VB e troverai il modulo.
Per comodità ti riporto il contenuto
****************************************************************************
****************
****************************************************************************
****************
****************************************************************************
****************
' Copyright (c) 2002 Dan Mount and Ghostgum Software Pty Ltd
'
' Permission is hereby granted, free of charge, to any person obtaining
' a copy of this software and associated documentation files (the
' "Software"), to deal in the Software without restriction, including
' without limitation the rights to use, copy, modify, merge, publish,
' distribute, sublicense, and/or sell copies of the Software, and to
' permit persons to whom the Software is furnished to do so, subject to
' the following conditions:
'
' The above copyright notice and this permission notice shall be
' included in all copies or substantial portions of the Software.
'
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
' MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
' BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
' ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
' CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
' SOFTWARE.
' This is an example of how to call the Ghostscript DLL from
' Visual Basic 6.  This example converts 
colorcir.ps
 to PDF.
' The display device is not supported.
'
' This code is not compatible with 
VB.NET
.  There is another
' example which does work with 
VB.NET
.  Differences include:
' 1. 
VB.NET
 uses GCHandle to get pointer
'    VB6 uses StrPtr/VarPtr
' 2. 
VB.NET
 Integer is 32bits, Long is 64bits
'    VB6 Integer is 16bits, Long is 32bits
' 3. 
VB.NET
 uses IntPtr for pointers
'    VB6 uses Long for pointers
' 4. 
VB.NET
 strings are always Unicode
'    VB6 can create an ANSI string
' See the following URL for some VB6 / 
VB.NET
 details
'
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvb600/html/vb6tovbdotnet.asp
Option Explicit
'------------------------------------------------
'API Calls Start
'------------------------------------------------
'Win32 API
'GhostScript API
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal
dest As Long, ByVal source As Long, ByVal bytes As Long)
Private Declare Function gsapi_revision Lib "gsdll32.dll" (ByVal
pGSRevisionInfo As Long, ByVal intLen As Long) As Long
Private Declare Function gsapi_new_instance Lib "gsdll32.dll" (ByRef
lngGSInstance As Long, ByVal lngCallerHandle As Long) As Long
Private Declare Function gsapi_set_stdio Lib "gsdll32.dll" (ByVal
lngGSInstance As Long, ByVal gsdll_stdin As Long, ByVal gsdll_stdout As
Long, ByVal gsdll_stderr As Long) As Long
Private Declare Sub gsapi_delete_instance Lib "gsdll32.dll" (ByVal
lngGSInstance As Long)
Private Declare Function gsapi_init_with_args Lib "gsdll32.dll" (ByVal
lngGSInstance As Long, ByVal lngArgumentCount As Long, ByVal lngArguments As
Long) As Long
Private Declare Function gsapi_run_file Lib "gsdll32.dll" (ByVal
lngGSInstance As Long, ByVal strFileName As String, ByVal intErrors As Long,
ByVal intExitCode As Long) As Long
Private Declare Function gsapi_exit Lib "gsdll32.dll" (ByVal lngGSInstance
As Long) As Long
'------------------------------------------------
'API Calls End
'------------------------------------------------
'------------------------------------------------
'UDTs Start
'------------------------------------------------
Private Type GS_Revision
    strProduct As Long
    strCopyright As Long
    intRevision As Long
    intRevisionDate As Long
End Type
'------------------------------------------------
'UDTs End
'------------------------------------------------
'------------------------------------------------
'Callback Functions Start
'------------------------------------------------
'These are only required if you use gsapi_set_stdio
Public Function gsdll_stdin(ByVal intGSInstanceHandle As Long, ByVal strz As
Long, ByVal intBytes As Long) As Long
    ' We don't have a console, so just return EOF
    gsdll_stdin = 0
End Function
Public Function gsdll_stdout(ByVal intGSInstanceHandle As Long, ByVal strz
As Long, ByVal intBytes As Long) As Long
    ' If you can think of a more efficient method, please tell me!
    ' We need to convert from a byte buffer to a string
    ' First we create a byte array of the appropriate size
    Dim aByte() As Byte
    ReDim aByte(intBytes)
    ' Then we get the address of the byte array
    Dim ptrByte As Long
    ptrByte = VarPtr(aByte(0))
    ' Then we copy the buffer to the byte array
    CopyMemory ptrByte, strz, intBytes
    ' Then we copy the byte array to a string, character by character
    Dim str As String
    Dim i As Long
    For i = 0 To intBytes - 1
        str = str + Chr(aByte(i))
    Next
    ' Finally we output the message
    Debug.Print (str)
    MsgBox (str)
    gsdll_stdout = intBytes
End Function
Public Function gsdll_stderr(ByVal intGSInstanceHandle As Long, ByVal strz
As Long, ByVal intBytes As Long) As Long
    gsdll_stderr = gsdll_stdout(intGSInstanceHandle, strz, intBytes)
End Function
'------------------------------------------------
'Callback Functions End
'------------------------------------------------
'------------------------------------------------
'User Defined Functions Start
'------------------------------------------------
Public Function AnsiZtoString(ByVal strz As Long) As String
    Rem We need to convert from a byte buffer to a string
    Dim byteCh(1) As Byte
    Dim bOK As Boolean
    bOK = True
    Dim ptrByte As Long
    ptrByte = VarPtr(byteCh(0))
    Dim j As Long
    j = 0
    Dim str As String
    While bOK
        ' This is how to do pointer arithmetic!
        CopyMemory ptrByte, strz + j, 1
        If byteCh(0) = 0 Then
            bOK = False
        Else
            str = str + Chr(byteCh(0))
        End If
        j = j + 1
    Wend
    AnsiZtoString = str
End Function
Public Function CheckRevision(ByVal intRevision As Long) As Boolean
    ' Check revision number of Ghostscript
    Dim intReturn As Long
    Dim udtGSRevInfo As GS_Revision
    intReturn = gsapi_revision(VarPtr(udtGSRevInfo), 16)
    Dim str As String
    str = "Revision=" & udtGSRevInfo.intRevision
    str = str & "  RevisionDate=" & udtGSRevInfo.intRevisionDate
    str = str & "  Product=" & AnsiZtoString(udtGSRevInfo.strProduct)
    str = str & "  Copyright = " & AnsiZtoString(udtGSRevInfo.strCopyright)
    Debug.Print (str)
    MsgBox (str)
    If udtGSRevInfo.intRevision = intRevision Then
        CheckRevision = True
    Else
        CheckRevision = False
    End If
End Function
Public Function CallGS(ByRef astrGSArgs() As String) As Boolean
    Dim intReturn As Long
    Dim intGSInstanceHandle As Long
    Dim aAnsiArgs() As String
    Dim aPtrArgs() As Long
    Dim intCounter As Long
    Dim intElementCount As Long
    Dim iTemp As Long
    Dim callerHandle As Long
    Dim ptrArgs As Long
    ' Print out the revision details.
    ' If we want to insist on a particular version of Ghostscript
    ' we should check the return value of CheckRevision().
    CheckRevision (704)
    ' Load Ghostscript and get the instance handle
    intReturn = gsapi_new_instance(intGSInstanceHandle, callerHandle)
    If (intReturn < 0) Then
        CallGS = False
        Return
    End If
    ' Capture stdio
    intReturn = gsapi_set_stdio(intGSInstanceHandle, AddressOf gsdll_stdin,
AddressOf gsdll_stdout, AddressOf gsdll_stderr)
    If (intReturn >= 0) Then
        ' Convert the Unicode strings to null terminated ANSI byte arrays
        ' then get pointers to the byte arrays.
        intElementCount = UBound(astrGSArgs)
        ReDim aAnsiArgs(intElementCount)
        ReDim aPtrArgs(intElementCount)
        For intCounter = 0 To intElementCount
            aAnsiArgs(intCounter) = StrConv(astrGSArgs(intCounter),
vbFromUnicode)
            aPtrArgs(intCounter) = StrPtr(aAnsiArgs(intCounter))
        Next
        ptrArgs = VarPtr(aPtrArgs(0))
        intReturn = gsapi_init_with_args(intGSInstanceHandle,
intElementCount + 1, ptrArgs)
        ' Stop the Ghostscript interpreter
        gsapi_exit (intGSInstanceHandle)
    End If
    ' release the Ghostscript instance handle
    gsapi_delete_instance (intGSInstanceHandle)
    If (intReturn >= 0) Then
        CallGS = True
    Else
        CallGS = False
    End If
End Function
Private Function ConvertFile() As Boolean
    Dim astrArgs(10) As String
    astrArgs(0) = "ps2pdf" 'The First Parameter is Ignored
    astrArgs(1) = "-dNOPAUSE"
    astrArgs(2) = "-dBATCH"
    astrArgs(3) = "-dSAFER"
    astrArgs(4) = "-r300"
    astrArgs(5) = "-sDEVICE=pdfwrite"
    astrArgs(6) = "-sOutputFile=c:\out.pdf"
    astrArgs(7) = "-c"
    astrArgs(8) = ".setpdfwrite"
    astrArgs(9) = "-f"
    astrArgs(10) = "c:\gs\gs7.04\examples\
colorcir.ps
"
    ConvertFile = CallGS(astrArgs)
End Function
Private Function TestGS() As Boolean
    Dim astrArgs(3) As String
    astrArgs(0) = "gs" 'The First Parameter is Ignored
    astrArgs(1) = "-dBATCH"
    astrArgs(2) = "-c"
    astrArgs(3) = "(Hello world) print"
    TestGS = CallGS(astrArgs)
End Function
'------------------------------------------------
'User Defined Functions End
'------------------------------------------------
Sub Main()
    Call ConvertFile
    'Call TestGS
    MsgBox ("Done")
End Sub
****************************************************************************
****************
****************************************************************************
****************
****************************************************************************
****************
Ciao
Eugenio

Provo e che DIO mi aiuti...
Ciao e grazie
Davide
"Eugenio" <Ci...@Eugenio.it> ha scritto nel messaggio
news:c11tv2$966$1...@lacerta.tiscalinet.it...



[CUT]
Hai scelto la strada piů difficile....!
Se usavi un pacchetto Free del tipo CUTEPDF che non fa
altro che installare una Stampante Virtuale (Distiller) ti bastava
impostare la Stampante predefinita a "Distiller" e mandare in stampa.
Ciao.
@Alex.

 ha scritto nel messaggio
news:c1327g$khe$1...@lacerta.tiscalinet.it...



Si certamente hai ragione per gestire grossi quantitativi
è necessario ricorrere a qualche cosa di Automatico
infattti io ho usato CUTEPDF nella versione da 30 "Euri"
a carico dell'Utente finale e 10 righe di codice con WinSock
che guarda caso è pure un OCX.........!!!!
Saluti.
@Alex.

 ha scritto nel messaggio
news:c1327g$khe$1...@lacerta.tiscalinet.it...

Ciao Alex
Mi daresti un aiutino a far capire al Sig. Davide Spagnoli che dovrebbe
rispondere dopo il testo e non prima? ;-)
Daniele

 ha scritto nel messaggio
news:4naZb.346045$_P.11...@news4.tin.it...

Si, sig. Daniele... Ho capito
Ciao!

 ha scritto nel messaggio
news:c13blq$r85$1...@lacerta.tiscalinet.it...

Ciao, Alex!
Tutto bene?
Ho installato CutePDF Form Filler  ma è un programma esterno.
Ho installato CutePDF Printer  quello free...
Ci sono delle spiegazioni:
Developer Kit (PDF Printer with programmatic access only)
 Integrating custom PDF Printer  with your application is quite easy. You
can print to the PDF Printer driver just as you would any other printer. The
registry keys below allow programmatic access to the display mode and
filename.
Setting the display mode:
HKEY_CURRENT_USER\Software\Custom PDF Printer\BypassSaveAs
(0 = show Save as dialog box after spooling, 1 = do not show Save as dialog
box.)
Note: the values above are of type string (REG_SZ), not DWORD.
Setting the filename:
HKEY_CURRENT_USER\Software\Custom PDF Printer\OutputFile
(Use the key above to set the output file for the PDF. A full pathname is
required.)
 Sample Code (PDF Printer with programmatic access only)
 The sample code below convert a MS Word file to a PDF file in a Visual
Basic application.
 Private Sub Print_PDF()
     Dim lRetVal As Long
     Dim hKey As Long
     Dim sValue As String
     lRetVal = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\Custom PDF
Printer",  _
                    0&, vbNullString, REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS, _
                    0&, hKey, lRetVal)
     sValue = "C:\Sample.pdf"
     RegSetValueExString hKey, "OutputFile", 0&, REG_SZ, sValue, Len(sValue)
     sValue = "1"
     RegSetValueExString hKey, "BypassSaveAs", 0&, REG_SZ, sValue,
Len(sValue)
     Dim worddoc As Document
     Set worddoc = wordapp.Documents.Open("C:\Sample.doc")
     wordapp.ActivePrinter = "Custom PDF Printer"
     wordapp.PrintOut
     worddoc.Close
     sValue = "0"
     RegSetValueExString hKey, "BypassSaveAs", 0&, REG_SZ, sValue,
Len(sValue)
     RegCloseKey (hKey)
End Sub
RegCreateKeyEx , RegSetValueExString hKey è una function di Vb Access 97?
Bho...  mi dice errore
Seconto te questo potrebbe fare al mio caso:
Da dentro l'applicazione e non esternamente
ogni cliente e documento deve generare il suo pdf ed inviarlo in posta
per l'invio della fattura o documento?
Seconto te?
Ciao! Davide


Non conoscevo CutePDF. A parte PDFwriter, che ho trovato free (?) in alcuni
siti, conoscevo altri tools, ma a mio parere non fanno al caso di Davide
(esempio: PDF995 e PDF creator), perchè nelle versioni free non consentono
la gestione da codice (salvo smentita, ovviamente). Inoltre PDFCreator è
lentissimo e PDF995 ad ogni stampa ti rimanda al sito internet.
Comunque l'ho provato e funziona benissimo.
Però ho fatto una prova con un report di 12 pagine confrontandolo con
PDFWriter, che ho trovato free (?) in alcuni siti : CutePDF ha creato un
file di 177k contro i 54k di PDFwriter.
Ho voluto segnalare Ghostscript, perchè è l'unico tools free ben documentato
che ho trovato nella mia ricerca e perchè oltre a file PDF consente di
generare anche immagini di formato quali tiff (nella mia applicazione in
alternativa alla mail posso inviare fax), jpeg, e altri. E' a mio parere un
bello strumento.
Grazie
Ciao
Eugenio

 Developer Kit (PDF Printer with programmatic access only)
[CUT]
Secondome hai installato la CustomEdition non è FREE come invece lo è
la "CutePDF Printer", che però non è configurabile....!
In realtà ho fatto una prova e basta salvare nel registro il
Percorso e lo mantiene in memoria, quello che non puoi ByPassare
è la Maschera Popup di Richiesta di Salvataggio, di conseguenza
devi farlo a mano.
Se invece compri la versione Custom il prezzo è di $299 ma puoi
configurare con il codice che hai visto tutto.
Le 2 Funzioni non sono di Default presenti, ma sono 2 funzioni
che vanno a scrivere nei Registri di Windows e che puoi trovare
in siti dedicati a VB/Accees....!
Non sò qual'è il tuo caso...., ma dovendo gestire molte stampe
credo tu sia un pò costretto a dirottarti su altri prodotti.
Io ti consiglio questo sito che realizza qualche cosa ti molto
utile a prezzi decisamente bassi, e appositamente per Access:
http://ourworld.compuserve.com/homepages/attac-cg/
PDF and Mail Class Library for Access  
Single Workstation prices are:Standard Edition: $55 US 
PDF Pro Edition:  $75 US 
PDF Pro Plus Edition: $99 US 
Ciao.
@Alex.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

"Eugenio" <Ci...@Eugenio.it> ha scritto nel messaggio
news:c14p1v$uf2$1...@lacerta.tiscalinet.it...

Grazie Eugenio, sei sempre tanto gentile.
Il mio problema è:
ho 70/80 fatture generate, quindi devo generare il file in pdf x ogni
cliente
e spedirlo in posta elettronica col controllo MAPI.
Pero, devo farlo internamente al programa:
n 1 fattura per un cliente in pdf temporaneo genetata cliente 1 indirizzo di
posta: 
pi...@pippo.it
n 2 "                    "
"         
pl...@pluto.it
 e via via..
e mammano che genera la fattura lo allega in posta e lo invia
col controllo Mapi. Invio già dell conferme d'ordine ai clienti col Mapi
funzia benissimo anche se vecchio...
Se hai qualche idea dimmelo!
Ciao!


Ciao Davide
Per favore confermami se ho capito bene il tuo problema.
Vuoi stampare dalla tua applicazione le fatture e mentre vengono stampate
vuoi che il tuo report sia in pdf.
Ti disturba che il tool di generazione del file pdf ti chieda per ogni
fattura dove salvare il file pdf e come chiamarlo.
Inoltre l'applicazione deve essere in grado di prendere automaticamente
questo file pdf e allegarlo ad una mail.
Ho capito bene?
Avrei bisogno di conoscere quale istruzione utilizzi per allegare i tuoi
documenti.
Ciao
Eugenio

 Ho capito che i tool ci sono... e tanti
Il problema e solo:
deve generarmi il pdf del report o fattura di Access
sul desktop o ecc.  ogni cliente, una volta che è generato il pdf,
lo sposto io dentro nel controllo MAPI ecc.
Morale della favola: deve generarmi un pdf  da linea di comando:
loop
c:\gswiew32. Bho la sintassi / stampa report FATTURA1.ps
c:\windows\desktop\pluto.pdf
copio il file e lo spedisco al controllo MAPI
elimino il file pluteo.pdf
e di nuovo
c:\gswiew32. Bho la sintassi / stampa report FATTURA2.ps
c:\windows\desktop\pluto.pdf
copio il file e lo spedisco al controll MAPI
elimino il file pluto.pdf
fino a che sono finiti documenti
ECC.
spero di essere stato chiaro
Grazie se conosci la sintassi di  gswiew32
xkè devo ancora capirci qls
Ciao!

"Eugenio" <Ci...@Eugenio.it> ha scritto nel messaggio
news:c157mn$csk$1...@lacerta.tiscalinet.it...

Hai ragione per tutto, in effetti occorre valutare bene le esigenze.
Io ho consigliato per queste esigenze una soluzione differente,
dai un'occhiata quì:
http://ourworld.compuserve.com/homepages/attac-cg/
Non è free, ma se si è disposti ad utilizzare OCX(sulla fiducia)
per inviare Mail(di fatturazione) depongo le armi.....!
Quando invio documenti Fiscali e/o contabili escludo sempre
prodotti di basso costo di cui non vedo CODICE sorgente...!!!!
Per quanto riguarda il problema PDF il sito segnalato potrebbe
risolvere entrambi i problemi....., trovo in ogni caso la tua soluzione
decisamente funzionante, forse un pò brigosa.....!
Saluti a tutti.
@Alex.

 ha scritto nel messaggio
news:c15ajh$hkr$1...@lacerta.tiscalinet.it...

Alex, Grazie.
Vovevo chiederti anche se si poteva fare una cosa simile
con GSview ecc. anche con riga di comando...
Ho sfgoliato in giro x capire la sintassi delle righe di
comando... e tutto buio..
Sai qls in merito?

 Sai qls in merito?
Non ho mai usato GSView, ma mi pare che Eugenio ti abbia
fornito anche il codice di Gestione, non semplice per chi non ha
molta familiarità, ma se insisti e dietro compenso culinario(una cena)
Eugenio ti manda un esempio...!
Io non avendo esigenze così grosse(1 Fattura per volta) non ho mai
sviluppato con questi prodotti
quindi non posso esserti d'aiuto in modo più approfondito....!
Ciao.
@Alex.

 ha scritto nel messaggio
news:c15dkg$kch$1...@lacerta.tiscalinet.it...

Ok grazie.
Ciao!

 > [CUT]
Ciao Davide.
Valutando meglio le tue esigenze ritengo sia il caso di abbandonare Gsview
ed utilizzare PDFwriter.
PDFwriter deve essere installato sul tuo computer e lo puoi trovare qui:
http://sit.provincia.napoli.it/download.htm
L'installazione avviene in due modi diversi a seconda se si tratta di W9x/Me
o W2000/XP
In W9x/Me genera il file C:\Windows\System\PDFWritr.ini, in W2000/XP
utilizza il registro di configurazione del pc
HKEY_CURRENT_USER\Software\Adobe\Acrobat PDFWriter.
Quindi anche il codice VBA è diverso e ti riporto i due esempi.
Ho creato una maschera con pulsante Stampa che emette cinque volte il report
"Fattura"
Ad ogni emissione esegue una pausa per consentire al sistema di rilasciare
il file PDFwritr.ini
**************
Windows 9x/Me
**************
Private Sub Stampa_Click()
On Error GoTo Err_Stampa_Click
Dim strTitolo As String, strFileName As String
Dim i As Integer, j As Integer
For i = 1 To 5
    Select Case i
        Case 1
            strTitolo = "Primo"
        Case 2
            strTitolo = "Secondo"
        Case 3
            strTitolo = "Terzo"
        Case 4
            strTitolo = "Quarto"
        Case 5
            strTitolo = "Quinto"
    End Select
    strFileName = "C:\" & strTitolo & ".PDF"
    SetPdfFileName (strFileName)
    DoCmd.OpenReport "report1", acViewNormal
    'Pausa per dar modo al sistema di rilasciare il file PDFwritr.ini
    For j = 0 To 5000
    DoEvents
    Next j
Next i
Exit_Stampa_Click:
    Exit Sub
Err_Stampa_Click:
    MsgBox ERR.Description
    Resume Exit_Stampa_Click
End Sub
'---------------------------------------------------------------------------
------------------------------
'Questa sub è consigliabile che venga inserita in un modulo
'deve essere copiata così com'è
'---------------------------------------------------------------------------
------------------------------
Public Sub SetPdfFileName(strFileName As String)
Dim lngFile As Long
On Error GoTo Err_SetPdfFileName
    lngFile = FreeFile
    Open "C:\Windows\System\PDFWritr.ini" For Output As #lngFile
    Print #lngFile, "[Acrobat PDFWriter]"
    Print #lngFile, "compatibility=1"
    Print #lngFile, "PDFFileName=""" & strFileName & """"
    Close #lngFile
Exit_SetPdfFileName:
    Exit Sub
Err_SetPdfFileName:
    MsgBox ERR.Description
    Resume Exit_SetPdfFileName
End Sub
*********
W2000/XP
*********
Private Sub Stampa_Click()
Dim strPathDoc As String
Dim strReport As String
Dim strFileName As String
Dim I As Integer
On Error GoTo Err_Stampa_Click
strPathDoc = "c:\"
strReport = "Fattura"
For I = 1 To 5
    Select Case I
        Case 1
            strFileName = "Primo.pdf"
        Case 2
            strFileName = "Secondo.pdf"
        Case 3
            strFileName = "Terzo.pdf"
        Case 4
            strFileName = "Quarto.pdf"
        Case 5
            strFileName = "Quinto.pdf"
    End Select
    Call SaveReportAsPDF(strReport, strPathDoc & strFileName)
Next I
Exit_Stampa_Click:
    Exit Sub
Err_Stampa_Click:
    MsgBox Err.Description
    Resume Exit_Stampa_Click
End Sub
'---------------------------------------------------------------------------
------------------------------
'Questa sub è consigliabile che venga inserita in un modulo
'deve essere copiata così com'è
'---------------------------------------------------------------------------
------------------------------
Option Compare Database
Option Explicit
 Public Const REG_SZ As Long = 1
   Public Const REG_DWORD As Long = 4
   Public Const HKEY_CLASSES_ROOT = &H80000000
   Public Const HKEY_CURRENT_USER = &H80000001
   Public Const HKEY_LOCAL_MACHINE = &H80000002
   Public Const HKEY_USERS = &H80000003
   Public Const ERROR_NONE = 0
   Public Const ERROR_BADDB = 1
   Public Const ERROR_BADKEY = 2
   Public Const ERROR_CANTOPEN = 3
   Public Const ERROR_CANTREAD = 4
   Public Const ERROR_CANTWRITE = 5
   Public Const ERROR_OUTOFMEMORY = 6
   Public Const ERROR_ARENA_TRASHED = 7
   Public Const ERROR_ACCESS_DENIED = 8
   Public Const ERROR_INVALID_PARAMETERS = 87
   Public Const ERROR_NO_MORE_ITEMS = 259
   Public Const KEY_QUERY_VALUE = &H1
   Public Const KEY_SET_VALUE = &H2
   Public Const KEY_ALL_ACCESS = &H3F
   Public Const REG_OPTION_NON_VOLATILE = 0
   Declare Function RegCloseKey Lib "advapi32.dll" _
   (ByVal hKey As Long) As Long
   Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias _
   "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
   ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions _
   As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes _
   As Long, phkResult As Long, lpdwDisposition As Long) As Long
   Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
   "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
   ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As _
   Long) As Long
   Declare Function RegQueryValueExString Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, ByVal lpData _
   As String, lpcbData As Long) As Long
   Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, lpData As _
   Long, lpcbData As Long) As Long
   Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, ByVal lpData _
   As Long, lpcbData As Long) As Long
   Declare Function RegSetValueExString Lib "advapi32.dll" Alias _
   "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
   ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As _
   String, ByVal cbData As Long) As Long
   Declare Function RegSetValueExLong Lib "advapi32.dll" Alias _
   "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
   ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, _
   ByVal cbData As Long) As Long
'**********************************************************
Public Sub SaveReportAsPDF(strReportName As String, strPath As String)
    Dim strOldDefault As String
    strOldDefault = QueryKey("Software\Microsoft\Windows
NT\CurrentVersion\Windows",
"Device")
    SetKeyValue "Software\Microsoft\Windows NT\CurrentVersion\Windows",
"Device", "Acrobat PDFWriter", REG_SZ
    SetKeyValue "Software\Adobe\Acrobat PDFWriter", "PDFFilename", strPath,
REG_SZ
    SetKeyValue "Software\Adobe\Acrobat PDFWriter", "bExecViewer", 0, REG_SZ
    DoCmd.OpenReport strReportName
    SetKeyValue "Software\Microsoft\Windows NT\CurrentVersion\Windows",
"Device", strOldDefault, REG_SZ
End Sub
   Public Function SetValueEx(ByVal hKey As Long, sValueName As String,
_
   lType As Long, vValue As Variant) As Long
       Dim lValue As Long
       Dim sValue As String
       Select Case lType
           Case REG_SZ
               sValue = vValue & Chr$(0)
               SetValueEx = RegSetValueExString(hKey, sValueName, 0&, _
                                              lType, sValue, Len(sValue))
           Case REG_DWORD
               lValue = vValue
               SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, _
   lType, lValue, 4)
           End Select
   End Function
   Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As _
   String, vValue As Variant) As Long
       Dim cch As Long
       Dim lrc As Long
       Dim lType As Long
       Dim lValue As Long
       Dim sValue As String
       On Error GoTo QueryValueExError
       ' Determine the size and type of data to be read
       lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
       If lrc <> ERROR_NONE Then Error 5
       Select Case lType
           ' For strings
           Case REG_SZ:
               sValue = String(cch, 0)
   lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, _
   sValue, cch)
               If lrc = ERROR_NONE Then
                   vValue = Left$(sValue, cch - 1)
               Else
                   vValue = Empty
               End If
           ' For DWORDS
           Case REG_DWORD:
   lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, _
   lValue, cch)
               If lrc = ERROR_NONE Then vValue = lValue
           Case Else
               'all other data types not supported
               lrc = -1
       End Select
QueryValueExExit:
       QueryValueEx = lrc
       Exit Function
QueryValueExError:
       Resume QueryValueExExit
   End Function
Public Function CreateNewKey(sNewKeyName As String, lPredefinedKey As Long)
    Dim hNewKey As Long         ' Handle to the new key
    Dim lRetVal As Long         ' Result of the RegCreateKeyEx function
    lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString,
REG_OPTION_NON_VOLATILE, _
        KEY_ALL_ACCESS, 0&, hNewKey, lRetVal)
    RegCloseKey (hNewKey)
End Function
Public Function SetKeyValue(sKeyName As String, sValueName As String,
vValueSetting
As Variant, lValueType As Long)
    Dim lRetVal As Long         ' Result of the SetValueEx function
    Dim hKey As Long            ' Handle of open key
    ' Open the specified key
    lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, KEY_SET_VALUE,
hKey)
    lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
    RegCloseKey (hKey)
End Function
Public Function QueryKey(sKeyName As String, sValueName As String)
    Dim lRetVal As Long         ' Result of the API functions
    Dim hKey As Long            ' Handle of opened key
    Dim vValue As Variant       ' Setting of queried value
    lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, KEY_QUERY_VALUE,
hKey)
    lRetVal = QueryValueEx(hKey, sValueName, vValue)
    QueryKey = vValue
    RegCloseKey (hKey)
End Function

 
http://sit.provincia.napoli.it/download.htm
Il link non è attivo pdfwriter su questa pagina non è corretto
MAssimiliano

 ha scritto nel messaggio
news:Suj_b.10555$HO2....@news.edisontel.com...

Pazienza!
Però esistono i motori di ricerca.
Ciao
Eugenio


hai trovato dove scaricare pdfwriter perchè interessa anche a me ma non sono
riuscito a trovarlo. se ci sei riuscito posti il link per piacere. ciao e
grazie
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


http://lacodeworks.com/upload/pdfwritr.zip
Ciao
Eugenio


grazie mille


Il 01 Mar 2004, 14:37, "Eugenio" <Ci...@Eugenio.it> ha scritto:

ho scaricato il file che tu mi hai detto ho lanciato il setup e poi ho
provato a lanciare il modulo che avevi suggerito ma non funziona. guardando
dove si blocca ho scoperto che non ha creato il file pdfwrite.ini in nessuna
cartella.
io uso winnt e access97 se può essere utile
sai come mai non ho quel file?
l'installazione sembra essere riuscita visto che non mi ha dato nessun
errore e nelle stampanti posso aggiungere la stampante pdf.
aspetto buone nuove da chiunque ne abbia. ciao e grazie


 Inviato via 
http://arianna.libero.it/usenet/
Su una computer Nt in effetti non ho avuto modo di provarlo.
Nei post precedenti ho allegato il codice anche per 2000/XP e su quei S.O.
viene utilizzato il registro di configurazione invece che il file .ini.
Cosě a naso credo che utilizzi il registro anche in NT.
Ciao
Eugenio


grazie mille non avevo letto bene i tuoi post precedenti.
funziona tutto molto bene anche con nt. sei veramente in gamba. complimenti.
ciao e grazie ancora di tutto
