“mailmerge” da fonte dati

  • Creatore
    Topic
  • #100729
    Up
    0
    Down
    ::


    Salve,
    Nell’ implementare “un altro pezzo” della mia documentazione, sono giunto al punto di fare una semplice lettera, destinata a più utenti.
    Ho ripreso un vecchio documento, fatto qualche anno fà, che utilizzava la classe datatool, per accedere un file .CSV

    MAGICAMENTE, non funziona più 😕

    Da una prima semplice occhiata, non sono riuscito a capire il problema. Allora mi chiedevo:
    Esiste una cosa più semplice dell’ utilizzo del pacchetto datatool, per caricare da un file (csv o altro) dei dati ? (ovviamente sto parlando di una cosa tipo: nome, cognome, indirizzo, citta…)

    Grazie
    Renato

    ps
    se avete dei semplici esempi per fare questa cosa con datatool…va ugualmente bene 🙂

Visualizzazione 14 filoni di risposte
  • Autore
    Risposte
    • #100730
      robitex
      Amministratore del forum
        Up
        0
        Down
        ::

        renareto” post=100428Salve,
        Nell’ implementare “un altro pezzo” della mia documentazione, sono giunto al punto di fare una semplice lettera, destinata a più utenti.
        Ho ripreso un vecchio documento, fatto qualche anno fà, che utilizzava la classe datatool, per accedere un file .CSV

        MAGICAMENTE, non funziona più 😕

        Da una prima semplice occhiata, non sono riuscito a capire il problema. Allora mi chiedevo:
        Esiste una cosa più semplice dell’ utilizzo del pacchetto datatool, per caricare da un file (csv o altro) dei dati ? (ovviamente sto parlando di una cosa tipo: nome, cognome, indirizzo, citta…)

        Grazie
        Renato

        ps
        se avete dei semplici esempi per fare questa cosa con datatool…va ugualmente bene 🙂

        Ciao Renato.
        Hai molte diverse soluzioni. La più semplice è usare LaTeX senza pacchetti aggiuntivi, tenendo i dati in un file TeX a parte.
        Mi spiego meglio: se usi una macro \lettera che prende i vari argomenti e compone la lettera, nel file hai una sequenza di queste macro che produrranno il mail merge.

        R.

      • #100731
        Up
        0
        Down
        ::


        Ciao,
        hai un esempio da farmi vedere?

        Renato

      • #100732
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::

          renareto” post=100439Ciao,
          hai un esempio da farmi vedere?

          Renato

          Per esempio leggi qui http://www.guitex.org/home/it/forum/5-tex-e-latex/18491-copertine-con-dati-variabili
          Guarda anche il pacchetto mailmerge.
          R.

        • #100733
          Up
          0
          Down
          ::


          Scusate,
          sto impazzendo da ieri, con questo esempio (in pratica, userò Datatool, per il mio compito, ma anche se ho già un esempio fatto, che non funziona più, non so perch, vorrei cminciare da zero).
          Stoprovando questo
          `%\documentclass[]{letteracdp}[2015/01/20]
          \documentclass[]{letter}
          \usepackage[T1]{fontenc}
          \usepackage{graphicx}
          \usepackage{tabularx}
          \usepackage{datatool}
          %\usepackage[english]{cdpbabel}
          %\usepackage[customletterhead]{cdpaddon}[2015/01/21]
          \usepackage{url,lipsum}
          \usepackage{epstopdf}
          %\usepackage{calctab}

          %nome,cognome,via,civico,localita,cap,prov
          \DTLloaddb{indirizzi}{indirizzi.csv}
          \DTLforeach*{indirizzi}{%
          \Nome=nome,\Cognome=cognome,%
          \Via=via,\Numero=civico,%
          \Citta=localita,\Prov=prov,\CAP=cap}{%

          \begin{letter}{\Nome\ \Cognome\\
          \Via, \Numero\\
          \CAP\ — \Citta\ (\Prov)}
          \opening{Caro socio,}

          \closing{Cordialmente,}
          \end{letter}
          }

          \signature{Massimiliano Dominici}
          \city{Pisa}
          \date{\today}
          \subject{Adesione al \GuITtext}`
          ma non c’è verso di compilare…potreste aiutarmi…:roll:

          Grazie

          Renato

        • #100734
          claudio
          Partecipante
            Up
            0
            Down
            ::


            nella sezione atri programmi hanno riaperto questo
            ciao
            claudio

          • #100735
            Up
            0
            Down
            ::


            Scusa, ma non capisco il collegamento…
            c’ è da qualche parte del codice che semplicemente:
            -legge un .csv
            – riporta il valore del campo in una variabile
            – infine utilizza il contenuto della variabile e ne scrive il valore?

            Grazie

            Renato

          • #100736
            Up
            0
            Down
            ::


            ok, una parte…l’ ho risolta. Questo codice:
            `\documentclass[]{letter}
            \usepackage[T1]{fontenc}
            \usepackage{graphicx}
            \usepackage{tabularx}
            \usepackage{datatool}
            %\usepackage[english]{cdpbabel}
            %\usepackage[customletterhead]{cdpaddon}[2015/01/21]
            \usepackage{url,lipsum}
            \usepackage{epstopdf}
            %\usepackage{calctab}
            \begin{document}
            %nome,cognome,via,civico,localita,cap,prov
            \DTLloaddb{indirizzi}{indirizzi.csv}
            \DTLforeach*{indirizzi}{%
            \Nome=nome,\Cognome=cognome,%
            \Via=via,\Numero=civico,%
            \Citta=localita,\Prov=prov,\CAP=cap}{%
            \begin{letter}{\Nome\ \Cognome\\
            \Via, \Numero\\
            \CAP\ — \Citta\ (\Prov)}
            \opening{Caro socio,}

            \closing{Cordialmente,}
            \end{letter}
            \end{document}
            }
            \signature{Massimiliano Dominici}
            \city{Pisa}
            \date{\today}
            \subject{Adesione al \GuITtext}`

            riesce a produrre una lettera, pescando la prima riga del .csv. (non avevo messo la lettera dentro al document, cioè non avevo messo il tag `\begin{document}…\end(document)`

            ma come faccio a fare tante lettere quante sono le righe del .csv? Crede

          • #100737
            claudio
            Partecipante
              Up
              0
              Down
              ::


              il collegamento era un a sistema sql per gestire una basa dati…
              ciao
              claudio

            • #100738
              OldClaudio
              Partecipante
                Up
                0
                Down
                ::


                Nel 1991 non esisteva ancora LaTeX2e; non esistevano nemmeno l’infinità di pacchetti oggi disponibili.
                Eppure ebbi l’audacia di scrivere al prima guida per l’uso di LATeX presso la Hoepli. Ora credo che sia esaurita e fuori stampa ed è giusto che sia così. Dopo questi quasi 25 anni sarebbe un oggetto interessante solo per uso archeologico.

                Però già allora fra gli esempi avevo messo un esempio per scrivere lettere con il medesimo testo a una moltitudine di destinatari; se si poteva fare con LaTeX209 e senza pacchetti esterni, vuol dire che quel paio di macro che servivano erano alla portata di chiunque.
                No, quest’affermazione è troppo forte; allora per imparare ad usare LaTeX si era fortunati se si riusciva a comperare negli USA la prima edizione del manuale di LaTeX di Leslie Lamport. Nessun’altra guida era disponibile (e infatti questa assenza mi spinse a scrivere la mia). In qui tempi per capire fino in fondo come funzionava bisognava cercare di interpretare il codice sorgente del nucleo di LaTeX.

                Lasciamo perdere i ricordi nostalgici, ma davvero come hai usato un comando che contiene “foreach”. Quella è la chiave per fare tutto quello che vuoi fare, anche se nell’esempio che hai mostrato e che conteneva quel “foreach” ti eri dimenticato di aprire e poi chiudere l’ambiente document.

              • #100739
                Up
                0
                Down
                ::


                Penultima cosa…e poi è finita anche questa 😉
                ho completato anche la lettera (classe letteracdp, su carta intesta ottenuta con classe letteracdp)
                mi manca una cosa…(forse due 🙄 )

                1 – posso inserire un immagine (la mia firma scansionata – immagine raster – ) nella linea sovrastante il mio nome? Sto cercando in qualche opzione di \makesignature, ma non trovo nulla…
                2 – il documento mi esce in due pagine. E’ possibile farlo entrare in un unica pagina, oviamente senza cambiare le proporzioni fra gli spazi?

                Ho provato a riddurre il carattere (da 12 a 10 punti, 8 non è possibile).

                Renato

                ps
                ovviamente, alla fine invierò il listato

              • #100740
                Up
                0
                Down
                ::

                renareto” post=100495Penultima cosa…e poi è finita anche questa 😉

                2 – il documento mi esce in due pagine. E’ possibile farlo entrare in un unica pagina, ovviamente senza cambiare le proporzioni fra gli spazi?

                In scrlttr2 c’è l’opzione “enlargefirstpage=true”, non so se esista qualcosa di simile in letteracdp. Puoi provare altrimenti \enlargethispage{1\baselineskip} (guarda l’Arte pag. 187,188)

                Ciao
                Andrea

              • #100741
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Che problema c’è a scandire al tua forma e salvarla in formato png. Il risultato dopo averla scontornata è che puoi sempre inserirla dove ti pare con \includegraphics, senza ricorrere all’ambiente figure.
                  Ma il formato png ti permette di gestire la trasparenza, in modo che quando inserisci la firma puoi sovrascivere qualcosa, ma solo dove “passa la penna”, non di ricoprire la pagina con il rettanglo a sfondo bianco opaco che rachcide la firma.
                  Per rendere “trasparente” le parti bianche del file che contiene la firma puoi ricorrere al programma gratuito di elaborazione di immagini GIMP (Gnu Image Managment Progra); probabilmente anche altri programmi gratuiti o commerciale possono farlo. È interessante avere i background trasparente, perché puoi applicarla anche su carta colorata.

                • #100742
                  Up
                  0
                  Down
                  ::

                  OldClaudio” post=100500Che problema c’è a scandire al tua forma e salvarla in formato png. Il risultato dopo averla scontornata è che puoi sempre inserirla dove ti pare con \includegraphics, senza ricorrere all’ambiente figure.
                  Ma il formato png ti permette di gestire la trasparenza, in modo che quando inserisci la firma puoi sovrascivere qualcosa, ma solo dove “passa la penna”, non di ricoprire la pagina con il rettanglo a sfondo bianco opaco che rachcide la firma.
                  Per rendere “trasparente” le parti bianche del file che contiene la firma puoi ricorrere al programma gratuito di elaborazione di immagini GIMP (Gnu Image Managment Progra); probabilmente anche altri programmi gratuiti o commerciale possono farlo. È interessante avere i background trasparente, perché puoi applicarla anche su carta colorata.

                  si, ma io dicevo, come faccio a metterla lì dove devo metterla. cioè sulla riga tracciata dove sotto c’ è il mio nome. Non ho visto paramtri particolari in \includegraphics che me lo permettano.
                  l’ immagine ce l’ ho in diversi formati (dal .xcf, poi posso salvare qualsiasi raster in qualsiasi modo).
                  Il problema è quello di posizionarlo lì, dove serve. (come dicevo, immaginavo un qualche parametro di makesignature)

                  Renato

                • #100743
                  OldClaudio
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    Io in raaltà non la metterei in automatico; prima farei il pdf, poi userei AcrobatReader per firmarla; probabilmnete non c’è nsa sicurezza maggiore, ma io faccio così.

                    Se invece vuoi metterla in automatico, allora, diamine, come faresti a mettere una “a” sopra o soto, a destra o a sinistra di una parola già esistente nel file sorgente? Bene, invece di una “a” ci metti \includegraphics.

                    Sulla stessa riga è particolarmente facile, perché si basta usare una \makebox di larghezza nulla; supra o sotto richiede di usare \raisebox per lazare o abbassare la \makebox di larghezza nulla con un valore dell’alzata positivo o negativo. Se quella dimensione in altezza ti scompone il resto, metti il tutto dentro l’argomento di \smash il cui significato è trasparente.

                    Poi, se non si fosse prevenuti verso sistemi troppo semplici, si potrebbe usare l’ambiente picure di dimensioni nulle con cui si può mettere qualunque cosa in qualunque punto della lettera.

                  • #100744
                    Up
                    0
                    Down
                    ::


                    Leggo per caso, con notevole ritardo, questa domanda:

                    renareto” post=100495Penultima cosa…e poi è finita anche questa 😉
                    ho completato anche la lettera (classe letteracdp, su carta intesta ottenuta con classe letteracdp)
                    mi manca una cosa…(forse due 🙄 )

                    1 – posso inserire un immagine (la mia firma scansionata – immagine raster – ) nella linea sovrastante il mio nome? […]

                    La risposta è stata già data, in pratica, da @OldClaudio. Per i pigerrimi :wink:, ecco però un esempio compilabile:
                    `
                    \documentclass
                    [twoside,boldsubject,italicsignature,shortindent,signaturerule]
                    {letteracdp}
                    \usepackage[T1]{fontenc}
                    \usepackage[italian]{cdpbabel}
                    \usepackage{graphics}
                    \usepackage{lipsum}

                    \address{
                    Silvestro \textsc{Gatto}\\
                    Dipartimento di Ornitologia\\
                    Prospettiva dei Cardellini, 28\\
                    PESCHIERA DEL GATTA
                    }
                    \signature{Silvestro Gatto\hwsignatureabove[-1.75ex]{Firma}}
                    % Si suppone che `Firma.png' (o altri formati) sia il file che contiene
                    % l'immagine della firma.
                    \place{Peschiera del Gatta}
                    \date{1~aprile 2015}

                    % Il primo argomento opzionale regola la posizione verticale dell'immagine che
                    % contiene la firma: bisogna andare un po' per tentativi.
                    \newcommand*\hwsignatureabove[2][0pt]{%
                    \unskip\\*[-\baselineskip]%
                    \raisebox{#1}[0pt][0pt]{\includegraphics{#2}}%
                    }

                    % Non badate alle due linee seguenti: sono solo un mio sintomo nevrotico!
                    \hfuzz = 0pt
                    \vfuzz = 0pt
                    \lastlinefit = 750

                    \begin{document}

                    \begin{foldedletter}[Tina Taria]{
                    Pregistissima\\
                    D.E.S. Tina \textsc{Taria}\\
                    Piazza della Posta, 1\\
                    35123\quad PADOVA\quad PD
                    }[
                    Firma a mano.
                    ]

                    \opening{Carissima Tina,}

                    \lipsum[1-2]

                    \closing{Cordiali saluti.}

                    \end{foldedletter}

                    \end{document}
                    `
                    Perché il risultato sia minimamente accettabile, è indispensabile che il file grafico che contiene la firma supporti quanto meno la trasparenza, per mezzo di un colore trasparente; un supporto completo del «canale alfa» è però altamente raccomandabile.

                    Ciao.


                    Gustavo

                Visualizzazione 14 filoni di risposte
                • Devi essere connesso per rispondere a questo topic.

                Go to top