"Stampa Unione" da Access a PDF editabile.

di il
5 risposte

"Stampa Unione" da Access a PDF editabile.

Buongiorno,

bonariamente l'ho intitolato così per cercare di inquadrare di cosa avrei bisogno e di seguito mi spiego.

Ho un PDF con dei campi editabili ed al contempo un database di Access già popolato con una lista di personale e vari dati relativi. Vorrei sapere se è possibile importare da Access questi dati nei moduli editabili del PDF in modo da poter creare un simil stampa unione. 

Grazie

5 Risposte

  • Re: "Stampa Unione" da Access a PDF editabile.

    Chi cerca trova…

    https://www.iprogrammatori.it/forum-programmazione/access/access-stampa-unione-pdf-editabile-t21273.html

  • Re: "Stampa Unione" da Access a PDF editabile.

    Peccato che il link nell'altro post non funzioni più

  • Re: "Stampa Unione" da Access a PDF editabile.

    Non avevo aperto il link…

    Credo che fosse da aprire come word e da li fare la stampa unione.

    https://support.microsoft.com/it-it/office/aprire-documenti-pdf-in-word-1d1d2acc-afa0-46ef-891d-b76bcd83d9c8

  • Re: "Stampa Unione" da Access a PDF editabile.

    Non sarebbe meglio generare il PDF da un Report o da un Template di Word…?


    Andare ad editare un PDF, cosa ovviamente fattibile, richiede a prescindere Librerie esterne come ADOBE WRITER, che espone il modello COM per interfacciarsi via Automazione, come PDFCreator ad esempio:

    https://sourceforge.net/projects/pdfcreator/

    Questo componente si istanzia come una DLL nel progetto quindi istruzioni alla mano vai ad aprire il Documento in PDF e punti ai Controlli Editabili di cui parli e di cui devi sapere il Nome…

  • Re: "Stampa Unione" da Access a PDF editabile.

    https://www.iprogrammatori.it/forum-programmazione/access/access-stampa-unione-pdf-editabile-t21273.html

    Peccato che il link nell'altro post non funzioni più

    Sono io l'autore di quel post e penso di ricordare a cosa mi riferivo. Non sono certo che il link sia l'equivalente di quello del 2014 ma la sostanza è quella.

    http://accessmvp.com/thedbguy/demos/fillablepdf.php

    Occhio, crea il pdf e lo popola con i dati contenuti nel file xfdf ma per la creazione del pdf si limita ad aprire il file xfdf con l'applicazione predefinita, in quel momento si perde ogni controllo sulla procedura, perché non viene avviato ad esempio un'istanza di Adobe Reader tramite codice. O se si può io non lo so fare.

    Integro con qualche informazione in più e nozioni acquisite nel frattempo.

    La struttura del file xfdf è più o meno questa

    <?xml version="1.0" encoding="UTF-8"?>
    <xfdf xmlns="http://ns.adobe.com/xfdf/"
          xml:space="preserve">
    	<f href="nomemodello.pdf"/>
    	<fields>
    		<field name="nomecampo1">
    			<value>Valore Campo 1</value>
    		</field>
    		<field name="nomecampo2">
    			<value>Valore Campo 2</value>
    		</field>
    		<field name="nomecampo3notes">
    			<value>Valore campo 3</value>
    		</field>
    		...
    	</fields>
    </xfdf>

    Trattandosi di un testo banale non serve passare da MSXML ma è sufficente la creazione del file con Open e Print, nativi VBA.

    Per generare F24 a raffica ho aggirato l'ostacolo unendo i vari file xfdf (creati sullo stile del codice presente dei demo di theDBguy) usando PDFtk. La prima fase, la più ingarbugliata, è quella di creare i vari file xfdf formalmente corretti, ognuno dei quali prende i dati dal database. Per ottenere poi il risultato che volevo era sufficiente una riga comandi, un file bat o vbs che ripeteva a raffica l'operazione di “unione”. L'attribuzione del nome al file pdf in quest'ultima fase avveniva prendendo il nome del file xfdf che era stato costruito ad hoc.

    Per capirci, per creare 3 file pdf da modello.pdf contenente campi compilabili, tramite vba ho creato 3 file xfdf chiamati Tizio.xfdf, Caio.xfdf e Sempronio.xfdf. Poi con la riga comandi o vbs mettevo in azione pdftoolkit che creava un pdf da ogni xfdf con lo stesso nome del file xfdf. Ecco quindi che si otteneva Tizio.pdf, Caio.pdf e Sempronio.pdf

    Ho scartabellato nelle directory e “vi vendo” i file come li avevo fatti a suo tempo, quando sapevo poco ma veramente poco.

    File bat

    rem se lo si usa in bat bisogna mettere due volte il segno di percentuale, mi sembra
    for %%I in (*.xfdf) do pdftk F24_editabile.pdf fillform "%%I" output "%%~nI.pdf" flatten

    Il file VBS invece era questo

    Option Explicit
    
    dim objFso
    dim objFolder
    Dim objFile
    dim nomefile
    
    Set objFso = CreateObject("Shell.Application")
    Set objFolder = objFso.Namespace("C:\Percorso\FileXPDF")
    
    Dim wshell 
    set wshell = CreateObject("Wscript.shell")
    
    For each objFile in ObjFolder.Items
    	If Right(objFile.Name, len(objFile.Name) - inStrRev(objfile.Name, ".")) = "xfdf" Then
    	nomefile = objFile.Name
    	dim rigacomando
    	rigacomando = "pdftk.exe F24_editabile.pdf fill_form " & chr(34) & nomefile & chr(34) & " output "
    	rigacomando = rigacomando & chr(34) & "PDF\" & Left(objFile.Name, inStrRev(objfile.Name, ".")-1)
    	rigacomando = rigacomando & ".pdf" & chr(34)
    	wshell.run rigacomando, 7, true
    	End If
    Next
    
    set wshell = Nothing
    Set objFso = Nothing
    Set objFolder = nothing
    Set objfile = Nothing

    Non so perché non l'ho fatto da VBA, non me lo ricordo, forse il bat / vbs era di immediato utilizzo senza ulteriore approfondimento. Poi non ho avuto più la necessità di riprenderlo in mano, quindi è praticamente fermo al 2015 circa, solo adesso vedrei bene aggiungere “flatten” alla stringa rigacomando (salvo non voler lasciare nei pdf i campi leggibili).

    	rigacomando = rigacomando & ".pdf flatten" & chr(34)

    Nella cartella di lavoro deve essere presente una sottocartella \PDF dove salvare i PDF (solo per non averli mescolati con gli xfdf). Lo so, il codice può crearla se non la trova ma nel 2015 non lo sapevo fare.

    PDFtk non ha la versione portable, quindi bisogna installarlo e poi fare riferimento al percorso in cui si trovano pdftk.exe e libiconv2.dll

    Per comodità li copiavo dove erano i file xfdf per non dover impostare altre directory nella riga comandi, già era complicato per me creare quella cosa.

    Ora è chiaro perché Adobe Acrobat si paga e fa tutto da VBA mentre per usare strumenti gratuiti si deve fare tutto sto lavoro?

    05/09/2023 - @Alex ha scritto:


    Non sarebbe meglio generare il PDF da un Report o da un Template di Word…?

    Andare ad editare un PDF, cosa ovviamente fattibile, richiede a prescindere Librerie esterne come ADOBE WRITER,

    Concordo al 1000%, anche se può essere un po' brigoso costruire il modello F24 e tutti i campetti su Word o nel report.

    come PDFCreator ad esempio:

    https://sourceforge.net/projects/pdfcreator/

    Questo componente si istanzia come una DLL nel progetto quindi istruzioni alla mano vai ad aprire il Documento in PDF e punti ai Controlli Editabili di cui parli e di cui devi sapere il Nome…

    oh, se qualcuno ci riesce con PdfCreator (che sia la versione 1.7.2 o una di quelle recenti, 5.x) lo scriva in grande qui perché cerco questa cosa da sempre.

    (ecco servito il pippone, dice qualcuno)

Devi accedere o registrarti per scrivere nel forum
5 risposte