Newsgroup: it.comp.appl.access
Titolo: creazione file pdf per ogni pagina del report

Buonasera.
con il comando 
DoCmd.OutputTo acOutputReport, ecc...
riesco a creare e salvare nel percorso da me indicato il file pdf.
Mi servirebbe però che venissero creati tanti file pdf per ogni singola pagina del report.
E' possibile farlo direttamente con un comando Vba, piuttosto che aprire il pdf in acrobat pro e dividerlo?
Grazie.

It happens that 
coopsoc...@gmail.com
 formulated :

Questa stampa le prime tre pagine di un report,
separatamente.
============================================
Private Sub Command86_Click()
Dim i As Integer
DoCmd.OpenReport "Report1", acViewPreview
For i = 1 To 3
    DoCmd.PrintOut acPages, i, i
Next
DoCmd.Close acReport, "Report1"
End Sub
===========================================
 
Bruno

>>>>  
http://www.bb2002.it
 :)  <<<<<
........... [ al lavoro ] ...........


Grazie tante Bruno.
Ma stampa tre pagine per For i = 1 To 3?
Come faccio a crearne tanti quanti sono le pagine, se non ne conosco il numero?
Grazie.


Non lo conoscevo e ti ringrazio per la segnalazione.
In ogni modo il mio obiettivo è di ottenere in automatico la creazione e, se possibile, il salvataggio del file pdf per singola pagina.
Ciao.
Giuseppe


Come non sai il nuemro di Pagine...??? 
Appena aperto il Report in modalità Preview... recuperi l'istanza e leggi la Proprietà PAGES...
 
Private Sub Command86_Click()
 Dim i As Integer
 Dim rpt As Access.Report
 DoCmd.OpenReport "Report1", acViewPreview
 Set rpt=Reports("Report1")
 For i = 1 To rpt.pages
     DoCmd.PrintOut acPages, i, i
 Next
 set rpt=nothing
 DoCmd.Close acReport, "Report1"
End Sub
 
Saluti
@Alex


Ciao Alex grazie tante e scusa per il notevole ritardo ma ho dovuto momentaneamente accantonare.
Con il tuo codice non capisco se crea o no il file, e se lo crea non me lo apre o non so se lo salva, dove lo salva.
Ho messo l'interruzione al codice a 
docmd.openReport "SchedaRilevSpesa", acViewPreview e si crea regolarmente.
Prima salvavo il report con questo codice:
Dim percorso As Variant
Dim struttura As String
struttura = Nz(DLookup("DescrStruttura", "tblStrutture", "idStruttura=" & IdStruttura))
percorso = "D:\Strutture\" & struttura & "\Schede rilevazione Spesa Mensile" & "\" & Anno & "\" & Format((Mese), "00")
DoCmd.OutputTo acOutputReport, "SchedaRilevSpesa", acFormatPDF, percorso & "\" & "Scheda Rilevazione Spesa " & struttura & " - " & Anno & "_" & Format((Mese), "00") & ".pdf"
con la modifica che voglio apportare mi deve salvare invece un file per ogni pagina che rileva in modalità Preview come dici tu.
Come combino il codice esistente con quello che mi hai gentilmente scritto tu?
Grazie in anticipo e scusa se non ho saputo mettere in pratica la tua soluzione.
Giuseppe


Ciao Giuseppe... come ben potrai vedere quello di cui parli NON E' il mio suggerimento... ma quello suggerito da BRUNO nel quale io ho integrato tecnicamente un suggerimento in risposta al dubbio che ti era venuto sulla questione della determinazione del NUMERO DI PAGINE, quindi dei chiedere a BRUNO nel caso in merito a come lui pensava di fare...
 
Per me, rimane abbastanza chiaro che quel metodo va bene per stampare su carta o su PDF con una VirtualPrinter, a quel punto la definizione del PATH+NOME deve passare per l'oggetto di Stampa usando questo metodo.
 
Personalmente peraltro, non lo trovo un gran bel metodo in relazione all'esigenza espressa (ma non ci sono alternative se parli di SINGOLO REPORT PER PAGINA), soprattutto nel caso di Intestazione REPORT o RAGGRUPPAMENTI Differenziati, ti perderesti sulle PAGINE>1 l'intestazione del REPORT, o le INSTESTAZIONI di SEZIONE(Gruppo)... 
 
Il problema in questa tua richiesta è la definizione di PAGINA come elemento DISCRIMINANTE... è un dato NON attinente con il Database.
 
Se invece, per SINGOLO REPORT riesci ad usare un metro di definizione o attribuzione di granularità più tecnicamente legata alla struttura Relazionale... un ID, un Tipo una periodicità o un altro criterio sempre riconducibile ai dati di Tabelle, potresti fare un ciclo su un Recordset estratto adeguatamente e generare un REPORT FILTRATO usando la WHERE CONDITION su OpenReport, così da mantenere tutte le caratteristiche Tecnico/Grafiche delle pagine come sopra indicato, per poi usare DoCmd.OutputTo... e defrinire li il PATH+NOME come già esposto.
 
Prova a pensarci meglio.
 
@Alex
 


Ciao Alex.
Per altri report, tipo le fatture, a fattura completata imposto l'origine del report con il where su IdFattura e ottengo la creazione del file pdf 
fattura per fattura in automatico con annesso salvataggio nel percorso indicato nella variabile.
Per questo tipo di report, perderei più tempo a creare tanti report in base ad un identificativo unico piuttosto che creare un file con più pagine e all'apertura dello stesso (automatico) procedere con la divisione del file con acrobat pro o affini.
Grazie comunque.
Giuseppe


potresti usare pdftk.exe che ti permette da riga di comandi di spezzare 
un pdf in n pagine
 
se salvi il tuo pdf in
c:\pippo\mio.pdf
e ci salvi dentro il programmino pdftk.exe
 
da access poi ti basta avviare
 
C:\pippo\pdftk.exe mio.pdf burst
 
e ti ritrovi n pagine in pdf
 
 
sempre se ho capito bene la tua esigenza
 
è free
https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
 
 
ciao
BFS
 


Grazie Fabio.
Appena mi libero ci provo.
Ciao
Giuseppe

Il giorno mercoledì 20 febbraio 2019 12:03:03 UTC+1, BFS ha scritto:

Buonasera.
Fabio ho applicato questo metodo, ma pare che Adobe Acrobat intercetti il file prima che pdftk venga eseguita e mi dà errore di run-time '53.
Il codice è questo:
    strProgramName = "strPercorsoFile & ' \ ' & 'Scheda Rilevazione Spesa ' & strStruttura & ' - ' & cmbAnno & '_' & Format((cmbMese), '00') & '\' & pdftx.exe"
    strArgument = strPercorsoFile & "\" & "Scheda Rilevazione Spesa " & strStruttura & " - " & cmbAnno & "_" & Format((cmbMese), "00") & " - " & strASLServizio
 
    Call Shell("""" & strProgramName & """ """ & strArgument)
Con il debug se copio la stringa della variabile strArgument e la copio nella barra degli indirizzi di esplora risorse, mi apre correttamente il file.
Come faccio ad impedire tale errore?
Grazie.

   & '\' & pdftx.exe"
 
errore di battitura?
 
il programma si chiama pdftk e non pdftx
forse sta li il problema
 
ciao
BFS


Si Fabio era un errore di battitura ma era errata anche la dichiarazione della prima variabile.
Adesso il codice viene eseguito interamente ma:
1) quando il vba lancia l'eseguibile, parte l'installazione del software (ogni volta) e siccome lavoro su un server, mi chiede l'autorizzazione con l'inserimento delle credenziali dell'amministratore. 
2) Anche se le inserisco, a conclusione dell'installazione, esce il messaggio "Enable These Extra Features by Upgdrading to PDFtk Pro for Only $3,99! e ovviamente il file pdf di tre pagine non viene splittato.
3) Ho provato a installare il programma dall'utente Amministratore e a tornare nella mia utenza ma la procedura si ripete come ai punti 1 e 2.
Cosa sbaglio?
 

 Pro for Only $3,99! 
 
si possono anche spendere, un pacchetto di sigarette costa molto di più
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........


Il problema non è l'acquisto (abbiamo un pacchetto di 5 licenze Adobe Acrobat PRO DC), ma se è corretta la procedura.


ma se hai acrobat pro puoi usare direttamente da vba le sue librerie
vedi qui
 
'
http://www.tek-tips.com/viewthread.cfm?qid=1538892
 
'Tools > References > Acrobat
Sub Main()
   Dim PDDoc As Acrobat.CAcroPDDoc, newPDF As Acrobat.CAcroPDDoc
   Dim PDPage As Acrobat.CAcroPDPage
   Dim thePDF As String, PNum As Long
   Dim f As String, i As Integer, Result As Variant, NewName As String
 
   f = ThisWorkbook.Path & "\"
   thePDF = f & "PaySlips.pdf"
 
   Set PDDoc = CreateObject("AcroExch.pdDoc")
   Result = PDDoc.Open(thePDF)
   If Not Result Then
     MsgBox "Can't open file: " & thePDF
     Exit Sub
   End If
 
   '...
   PNum = PDDoc.GetNumPages
 
   For i = 0 To PNum - 1
     Set newPDF = CreateObject("AcroExch.pdDoc")
     newPDF.Create
     NewName = f & " Page_" & i & "_of_" & PNum & ".pdf"
     newPDF.InsertPages -1, PDDoc, i, 1, 0
     newPDF.Save 1, NewName
     newPDF.Close
     Set newPDF = Nothing
   Next i
End Sub
 
non avendo il pro non posso dirti se funziona
 
ciao


Grazie Fabio, appena posso ci provo.

Il giorno mercoledì 6 maggio 2020 08:20:01 UTC+2, BFS ha scritto:

Ciao Fabio.
Ho effettuato l'acquisto di PDFtk Pro e l'ho installato sul server come Amministratore.
Adesso il programma si apre nella versione completa ma lo split del file non lo esegue perchè il file non viene automaticamente caricato nè ovviamente eseguito lo split.
Come faccio a far fare automaticamente queste ultime due operazioni?
 
Il codice attuale è:
Dim strProgramName As String
Dim strArgument As String
 
strProgramName = strPercorsoFile & "\" & "PdftkXp.exe"



non conosco la versione pro, secondo me basta la free per fare quello 
che chiedi
 
cmq qui c'è la quida
https://www.pdflabs.com/docs/pdftk-man-page/
 
 
 
e di sicuro nella tua istruzione manca il parametro "burst" che è quello 
che dice che il pdf va splittato
 
qui trovi esempi
 
https://www.pdflabs.com/docs/pdftk-cli-examples/
 
 
nel tuo caso ti serve questo
 
Burst a single PDF document into pages and dump its data to doc_data.txt
 
     pdftk in.pdf burst
 
 
ciao
BFS