[Risolto]Trasformare file.txt in PDF o LibreOffice

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
raffaele63
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 348
Iscrizione: lunedì 3 ottobre 2011, 12:27
Desktop: Lubuntu
Distribuzione: Lubuntu 22.04.1 LTS (Jammy Jellyfis
Sesso: Maschile

[Risolto]Trasformare file.txt in PDF o LibreOffice

Messaggio da raffaele63 »

Salve a tutti,
nel gestionale per società sportive che ho realizzato (utilizzando Python 2.7 e MySQL 5.5 e come interfaccia Tkinter) ho necessità di poter visualizzare e stampare se occorre, quanto precedentemente inserito e salvato, non solo a video (cosa che già avviene di per se) ma da formato .txt in PDF e che rispetti le caratteristiche riportate a video (es. suddivisione in colonne dei dati estratti ).

Nel manuale di Python, ho trovato come creare, modificare e salvare i fili con estensione .txt oppure .dat, ma non riesco ad ottenere dei risultati che mi soddisfino, per questo motivo sono alla ricerca di un aiuto.

Ho trovato nel Gestore Pacchetti di Lubuntu, il pacchetto Python-pkPdf, è possibile utilizzarlo con il programma che ho creato? oppure come si deve usare?

Grazie.
Ultima modifica di raffaele63 il sabato 2 gennaio 2016, 22:38, modificato 1 volta in totale.
Bisognerebbe evitare di predicare ai giovani il successo nella solita forma come lo scopo principale nella vita.
Il motivo più importante per lavorare a scuola e nella vita è il piacere nel lavoro, piacere nel suo risultato e la conseguenza del valore del risultato per la comunità. ( A.E. )
Avatar utente
cortinico
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 477
Iscrizione: venerdì 15 maggio 2015, 16:49
Desktop: Unity
Distribuzione: Ubuntu 15.04 amd64
Sesso: Maschile
Località: Pisa
Contatti:

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da cortinico »

Allora puoi provare ad utilizzare PyPDF2
Ecco qua il link: https://github.com/mstamy2/PyPDF2
Nel repository trovi anche qualche file di esempio che ti permette di capire come funziona la libreria, non dovrebbe essere difficile :)
"Look wide, and even when you think you are looking wide – look wider still!"
http://ncorti.com
raffaele63
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 348
Iscrizione: lunedì 3 ottobre 2011, 12:27
Desktop: Lubuntu
Distribuzione: Lubuntu 22.04.1 LTS (Jammy Jellyfis
Sesso: Maschile

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da raffaele63 »

Salve cortinico,
ho guardato all'indirizzo segnalato, ma non è proprio quello che io stavo cercando (avevo visto la prima versione).

Googolando ho invece trovato questo che rientra più nell'ordine di quanto ho in mente.

Nel senso che una volta creata la giusta disposizione delle righe e delle colonne, richiamando la macro dal programma ottengo una impaginazione corretta (questo è quanto vorrei sviluppare).

Ora, devo solo capire bene come applicare tutto questo (sempre che sia possibile).

Ovviamente se avete informazioni o consigli, relativi a quanto sopra scritto, ed al suo sviluppo per favore lasciate pure un vostro commento.

Da parte mia, appena avrò novità sulla corretta esecuzione di questa fase, segnalerò la stessa al forum.
Bisognerebbe evitare di predicare ai giovani il successo nella solita forma come lo scopo principale nella vita.
Il motivo più importante per lavorare a scuola e nella vita è il piacere nel lavoro, piacere nel suo risultato e la conseguenza del valore del risultato per la comunità. ( A.E. )
raffaele63
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 348
Iscrizione: lunedì 3 ottobre 2011, 12:27
Desktop: Lubuntu
Distribuzione: Lubuntu 22.04.1 LTS (Jammy Jellyfis
Sesso: Maschile

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da raffaele63 »

Salve,
al link che ho indicato nel messaggio precedente, vi è uno script Python che genera una Macro in Libre Office,
e lanciando la Macro si ottiene la stringa sul foglio di lavoro.

Però ho bisogno per favore di ricevere alcune informazioni su dove poter leggere documentazione ulteriore per approfondire l'argomento (es. sul tutorial ufficiale oppure sulla libreria di riferimento ecc.) oppure avere esempi più dettagliati dai quali prendere spunti (anche se non è la cosa più corretta).

Inoltre vorrei inserire nel gestionale di mio realizzo, il comando per avviare appunto la macro, quindi prima bisogna far aprire Libre Office: questo comando è possibile darlo, come spiegato al capitolo 2.2.4 del tutorial?
Bisognerebbe evitare di predicare ai giovani il successo nella solita forma come lo scopo principale nella vita.
Il motivo più importante per lavorare a scuola e nella vita è il piacere nel lavoro, piacere nel suo risultato e la conseguenza del valore del risultato per la comunità. ( A.E. )
Avatar utente
cortinico
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 477
Iscrizione: venerdì 15 maggio 2015, 16:49
Desktop: Unity
Distribuzione: Ubuntu 15.04 amd64
Sesso: Maschile
Località: Pisa
Contatti:

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da cortinico »

Perdonami ma non mi è chiaro cosa c'entri adesso Libreoffice, visto che nel primo messaggio parlavi di conversione da .txt a .pdf, giusto?
"Look wide, and even when you think you are looking wide – look wider still!"
http://ncorti.com
raffaele63
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 348
Iscrizione: lunedì 3 ottobre 2011, 12:27
Desktop: Lubuntu
Distribuzione: Lubuntu 22.04.1 LTS (Jammy Jellyfis
Sesso: Maschile

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da raffaele63 »

Si scusami, nel messaggio ho parlato solo di PDF (ma non nel titolo) è stato un mio refuso.

Quanto sto cercando di generare è un foglio (LibreOffice o PDF) nel quale far convogliare in modo ordinato i dati che provengono da scelte utente (nel caso specifico una classifica contenente dati quali: nomi.società,settori ecc.).

Quindi è vero che posso trasformare il file in PDF, ma è altrettanto vero che con LibreOffice posso creare un foglio standard dove immettere quei tipi di dati.

La mia idea è il trasporto dei dati in un file .txt o .dat e passarli al foglio di LO organizzato (dal quale è poi possibile, se voluto, la trasformazione in PDF).

Il tuo suggerimento è stato prezioso perché mi ha aiutato a fare chiarezza e se hai suggerimenti dove poter reperire documentazione relativa a quanto esposto oppure se esistono strade più consone, sappi che sono ben accette. Resto in attesa. Grazie.
Bisognerebbe evitare di predicare ai giovani il successo nella solita forma come lo scopo principale nella vita.
Il motivo più importante per lavorare a scuola e nella vita è il piacere nel lavoro, piacere nel suo risultato e la conseguenza del valore del risultato per la comunità. ( A.E. )
fabio massacci
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 289
Iscrizione: mercoledì 11 giugno 2014, 14:12
Desktop: Lubuntu
Distribuzione: Ubuntu 20.04.3 LTS

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da fabio massacci »

scusa ma se vuoi creare un foglio di lavoro leggibile da libreoffice basta che produci un file .cvs, che è perfettamente leggibile in libre

https://it.wikipedia.org/wiki/Comma-separated_values

edit: file csv
raffaele63
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 348
Iscrizione: lunedì 3 ottobre 2011, 12:27
Desktop: Lubuntu
Distribuzione: Lubuntu 22.04.1 LTS (Jammy Jellyfis
Sesso: Maschile

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da raffaele63 »

Salve a tutti,
ho trovato uno script di Python che cito
"Make some simple multipage pdf files."
ed è così.
Quindi una parte del mio problemino sembrerebbe andata a buon fine, resta comunque da sistemare la disposizione dei dati: nel file.dat che uso per prova, inserisco i dati presi da Mysql con una SELECT, ma restano conseguenziali, cioè Nome Cognome Società Squadra ed ovviamente avendo nomi o cognomi più lunghi rispetto ad altri ottengo
Concorrenti page 1 of 1
Brignola Gianni apsd Napolisud A; ;
Fiorentino Bruno apsd Napolisud A; ;
Borghini Aldo apsd Napolisud A; ;
;
mentre io vorrei vedere una lista ordinata (volevo postarvi un esempio ma a video non risultano i giusti spazi tra un dato ed un altro)
vorrei sapere dove trovare documentazione per ottenere la giusta impaginazione.
Bisognerebbe evitare di predicare ai giovani il successo nella solita forma come lo scopo principale nella vita.
Il motivo più importante per lavorare a scuola e nella vita è il piacere nel lavoro, piacere nel suo risultato e la conseguenza del valore del risultato per la comunità. ( A.E. )
axelcode72
Prode Principiante
Messaggi: 7
Iscrizione: giovedì 10 dicembre 2015, 18:04
Sesso: Maschile

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da axelcode72 »

Se hai un minimo di conoscenza di Java potresti usare questa libreria che fa esattamente quello di cui hai bisogno:

GlobalReports
www.globalreports.it - La libreria per la creazione di file PDF
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2886
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da rai »

Non so se ho capito cosa intendi per "vedere una lista ordinata" ma nella shell puoi usare comodamente l'utility column

Codice: Seleziona tutto

$ echo -e $testo
Brignola Gianni apsd Napolisud A
Fiorentino Bruno apsd Napolisud A
Borghini Aldo apsd Napolisud A
$ echo -e $testo | column -t
Brignola    Gianni  apsd  Napolisud  A
Fiorentino  Bruno   apsd  Napolisud  A
Borghini    Aldo    apsd  Napolisud  A
$ 
in ogni caso, e ammesso che sia quello che vuoi fare, potresti usare sempre python per tabulare i dati

Codice: Seleziona tutto

$ cat incolonna.py 
#!/usr/bin/env python

testo="""Brignola Gianni apsd Napolisud A; ;
Fiorentino Bruno apsd Napolisud A; ;
Borghini Aldo apsd Napolisud A; ;"""
tabella = testo.replace("; ;",'').split("\n")
tabella = [row.split() for row in tabella]
larghezze = []
trasposta = []
for y in range(len(tabella[0])):
    trasposta.append([])
    # itera su tutte le liste
    for x in range(len(tabella)):
        # crea una lista per ogni colonna
        trasposta[y].append(tabella[x][y])
# crea una lista con le larghezze max di ogni colonna
for y in range(len(trasposta)):
    max = 0
    for a in trasposta[y]:
        if len(a) > max:
            max = len(a)
    larghezze.append(max)
# padding di ogni elemento alla larghezza max
for row in tabella:
    for x in range(len(larghezze)):
        row[x] = row[x].ljust(larghezze[x]) + "  "
for z in range(len(tabella)):
	print("".join(tabella[z]))
$ incolonna.py 
Brignola    Gianni  apsd  Napolisud  A  
Fiorentino  Bruno   apsd  Napolisud  A  
Borghini    Aldo    apsd  Napolisud  A  
$
raffaele63
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 348
Iscrizione: lunedì 3 ottobre 2011, 12:27
Desktop: Lubuntu
Distribuzione: Lubuntu 22.04.1 LTS (Jammy Jellyfis
Sesso: Maschile

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da raffaele63 »

Salve,
axelcode72 ha scritto:Se hai un minimo di conoscenza di Java potresti usare questa libreria che fa esattamente quello di cui hai bisogno:

GlobalReports
grazie, ma ancora non ho preso in considerazione Java (nel senso che sto studiando Python da autodidatta) e non vorrei creare confusione nella mia zucca. ;) Comunque avevo letto in una discussione del forum qualcosa di similare. (Tieni presente quello che ho appena scritto).
Non so se ho capito cosa intendi per "vedere una lista ordinata"
Chiedo scusa per non essere stato più preciso nella descrizione, giusto per la cronaca intendo:

Prima Colonna, uno spazio abbastanza ampio, Seconda Colonna, uno spazio abbastanza ampio ecc.
Nome Cognome, spazio come sopra, Società, ancora idem di spazio ecc.

(Io ho provato a postare un esempio applicando spazi tra le colonne, ma quando faccio l'anteprima gli stessi non vengono rispettati, per cui ho scritto così).

Adesso mi studio quanto mi hai suggerito in Python, provando ad applicarlo (certo che di cicli ce ne sono abbastanza) e poi ci risentiamo se sei d'accordo. Grazie.
Bisognerebbe evitare di predicare ai giovani il successo nella solita forma come lo scopo principale nella vita.
Il motivo più importante per lavorare a scuola e nella vita è il piacere nel lavoro, piacere nel suo risultato e la conseguenza del valore del risultato per la comunità. ( A.E. )
raffaele63
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 348
Iscrizione: lunedì 3 ottobre 2011, 12:27
Desktop: Lubuntu
Distribuzione: Lubuntu 22.04.1 LTS (Jammy Jellyfis
Sesso: Maschile

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da raffaele63 »

Ciao a tutti,
di seguito riporto parte di codice che ad un certo punto mi procura questo:

Codice: Seleziona tutto

Traceback (most recent call last):
  File "/home/lucy/provapypdf.py", line 38, in <module>
    row[x] = row[x].ljust(larghezze[x])
TypeError: 'tuple' object does not support item assignment
Codice Python:

Codice: Seleziona tutto

import MySQLdb

larghezze = []
trasposta = []
Concorrenti = []
tabella = ('')
linend = ('\n')

conn=MySQLdb.connect(host=XXXXXXXXX,user=XXXXXXX,\
                             passwd=XXXXXXXX,db=XXXXXXX)
cursor = conn.cursor()
cursor.execute("""SELECT Concorrenti,Societa,Squadra from Lista_partecipanti""")
rows = cursor.fetchall()
for row in rows:
    tabella=rows

for y in range(len(tabella[0])):
    trasposta.append([])
    for x in range(len(tabella)):
        # crea una lista per ogni colonna
        trasposta[y].append(tabella[x][y])

for y in range(len(trasposta)):
    max = 0
    for a in trasposta[y]:
        if len(a) > max:
            max = len(a)
    larghezze.append(max)

for row in tabella:
    for x in range(len(larghezze)):
        row[x] = row[x].ljust(larghezze[x]) + " "
        
for z in range(len(tabella)):
    Concorrenti = z
    print ("".join(Concorrenti[z]))
Cortesemente chiedo quali modifiche posso apportare per rendere fluido il codice.
Bisognerebbe evitare di predicare ai giovani il successo nella solita forma come lo scopo principale nella vita.
Il motivo più importante per lavorare a scuola e nella vita è il piacere nel lavoro, piacere nel suo risultato e la conseguenza del valore del risultato per la comunità. ( A.E. )
Avatar utente
cortinico
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 477
Iscrizione: venerdì 15 maggio 2015, 16:49
Desktop: Unity
Distribuzione: Ubuntu 15.04 amd64
Sesso: Maschile
Località: Pisa
Contatti:

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da cortinico »

La domanda esula un po' dal titolo del thread,
potresti aprire un nuovo thread su questo problema?

L'errore che ti sta dando è comunque legato al fatto che stai cercando di riassegnare un oggetto di tipo tupla, che su python è immutabile :sisi:
"Look wide, and even when you think you are looking wide – look wider still!"
http://ncorti.com
raffaele63
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 348
Iscrizione: lunedì 3 ottobre 2011, 12:27
Desktop: Lubuntu
Distribuzione: Lubuntu 22.04.1 LTS (Jammy Jellyfis
Sesso: Maschile

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da raffaele63 »

In realtà quello che sto cercando di risolvere è sempre legato al mio problema iniziale (poiché lo script non si limita solo a queste poche righe).
Le cose si evolvono anche in conseguenza delle soluzioni trovate ed io, nel mio piccolo ho trovato valido passare (alla parte che crea il PDF) i dati anche senza salvarli precedentemente in un file.
Si può salvare solo il PDF (che è sempre un file) per tenere traccia dell'avvenimento, senza salvare anche il file.txt o altro tipo (questa soluzione è di oggi ed io ho postato come promesso).
L'errore che ti sta dando è comunque legato al fatto che stai cercando di riassegnare un oggetto di tipo tupla, che su python è immutabile :sisi:
Infatti la mia ultima domanda cerca una soluzione per aggirare l'immutabilità delle tuple.
Il codice suggeritomi "da rai » 15/12/2015, 19:24 " ha di molto migliorato la strada verso la risoluzione, però si basa su del testo mentre io ho tuple, quindi vorrei capire quel

Codice: Seleziona tutto

 row[x] = row[x].ljust(larghezze[x]) + " "
come e se si può sistemare per ottenere

Codice: Seleziona tutto

Brignola Gianni         apsd Napolisud   A 
Fiorentino Bruno       apsd Napolisud   A 
Borghini Aldo            apsd Napolisud   A 
Bolognino Raffaele     apsd Sunese       A 
Bisognerebbe evitare di predicare ai giovani il successo nella solita forma come lo scopo principale nella vita.
Il motivo più importante per lavorare a scuola e nella vita è il piacere nel lavoro, piacere nel suo risultato e la conseguenza del valore del risultato per la comunità. ( A.E. )
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2886
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da rai »

Non conosco MySQL né l'interfaccia Python che tu usi per cui mi limito al frammento di codice che si occupa dell'incolonnamento

A quanto pare il metodo cursor.fetchall() restituisce una tupla di tuple: qui non ho fatto altro che trasformare la tupla di tuple in lista di liste
puoi sempre farlo con for invece di usare map() [ma è meno efficiente e più complicato, in breve poco pythonico]

Codice: Seleziona tutto

$ cat incolonna.py
#!/usr/bin/env python

laTua_rows=(('Brignola', 'Gianni', 'apsd', 'Napolisud', 'A'),\
('Fiorentino', 'Bruno', 'apsd', 'Napolisud', 'A'),\
('Borghini', 'Aldo', 'apsd', 'Napolisud', 'A'))
tabella = map(list, laTua_rows)

# itera sulla dimensione delle liste (il numero di colonne)
numCol = len(tabella[0])
trasposta = []
for col in range(numCol):
    trasposta.append([])
    # itera su tutte le liste (il numero di righe)
    for riga in range(len(tabella)):
        # crea una lista temporanea contenente una lista per ogni colonna
        trasposta[col].append(tabella[riga][col])

# crea una lista con le larghezze max di ogni colonna
larghezze = []
for y in range(numCol):
    max = 0
    for a in trasposta[y]:
        if len(a) > max:
            max = len(a)
    larghezze.append(max)

# padding di ogni stringa alla larghezza max della propria colonna
for row in tabella:
    for col in range(len(larghezze)):
        row[col] = row[col].ljust(larghezze[col]) + "  "
for row in tabella:
    print("".join(row))
$ ./incolonna.py
Brignola    Gianni  apsd  Napolisud  A  
Fiorentino  Bruno   apsd  Napolisud  A  
Borghini    Aldo    apsd  Napolisud  A  
$ 
raffaele63
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 348
Iscrizione: lunedì 3 ottobre 2011, 12:27
Desktop: Lubuntu
Distribuzione: Lubuntu 22.04.1 LTS (Jammy Jellyfis
Sesso: Maschile

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da raffaele63 »

(versione Python 2.7.6, Databese Mysql 5.5, GUI Tkinter)
Salve a tutti,
allora la situazione che mi si presenta è la seguente:
con la soluzione suggeritami dell'utente rai (metto solo l'ultima parte)

Codice: Seleziona tutto

for row in Tabella:
        testo = (' '.join(row))
        print (testo)
ottengo quanto ricercato, ma se provo ad inserire 'testo' in un file .txt oppure nella parte che genera il file PDF, la stessa prende una, per cosi dire, 'piega diversa', cioè non rispetta più le distanze ordinate che aveva in precedenza.

Codice: Seleziona tutto

Brignola Gianno      apsd Napolisud   A;  
Fiorentino Bruno     apsd Napolisud   A;  
Brghini Aldo         apsd Napolisud   A;  
Bolognaro Silvio     apsd Napolisud   A;  
Masini Gianni        apsd Napolisud   B;  
Bolchini Vanni       apsd Suno        A;  
Bolognino Raffaele   apsd Suno        A;  
Brustia Franco       apsd Suno        A;  
Cassai Gianni        apsd Suno        A;  
Bruno Aldo           apsd Suno        B;  
Vassali Andrea       apsd Suno        B;  
Lilla Giorgio        apsd Crotonesi   A;  
Branca Nino          apsd Crotonesi   A;  
Mina Tony            apsd Crotonesi   A;  
Valli Sandro         apsd Crotonesi   A; 
esattamente così. Da inesperto quale sono, ho erroneamente pensato che bastasse assegnare 'testo' anche ad altra voce, ma purtroppo non funziona cosi. Ho provato ad inserire nel file.txt con metodi diversi, con pickle ma le 'onde' restano e lo sclero aumenta.
Non capisco perchè se con il ciclo for menzionato in precedenza, ottengo una lista ordinata, non sia possibile ottenerla anche successivamente se applicato ad altro. Dove è l'errore?
Bisognerebbe evitare di predicare ai giovani il successo nella solita forma come lo scopo principale nella vita.
Il motivo più importante per lavorare a scuola e nella vita è il piacere nel lavoro, piacere nel suo risultato e la conseguenza del valore del risultato per la comunità. ( A.E. )
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2886
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da rai »

ma se provo ad inserire 'testo' in un file .txt oppure nella parte che genera il file PDF, la stessa prende una, per cosi dire, 'piega diversa', cioè non rispetta più le distanze ordinate che aveva in precedenza.
il fatto è che non abbiamo visto questo script che genera il PDF nè sappiamo cosa vuole dato in pasto; inolte personalmente non mi è chiaro che vuoi dire con
assegnare 'testo' anche ad altra voce
comunque, se invece del print che ho messo nell'esempio assegni le stringhe a una var, non hai bisogno di pickle per salvare var su file

Codice: Seleziona tutto

$ cat incolonna.py 
#!/usr/bin/env python

laTua_rows=(('Brignola', 'Gianni', 'apsd', 'Napolisud', 'A'),\
('Fiorentino', 'Bruno', 'apsd', 'Napolisud', 'A'),\
('Borghini', 'Aldo', 'apsd', 'Napolisud', 'A'))
tabella = map(list, laTua_rows)

# itera sulla dimensione delle liste (il numero di colonne)
numCol = len(tabella[0])
trasposta = []
for col in range(numCol):
    trasposta.append([])
    # itera su tutte le liste (il numero di righe)
    for riga in range(len(tabella)):
        # crea una lista temporanea contenente una lista per ogni colonna
        trasposta[col].append(tabella[riga][col])

# crea una lista con le larghezze max di ogni colonna
larghezze = []
for y in range(numCol):
    max = 0
    for a in trasposta[y]:
        if len(a) > max:
            max = len(a)
    larghezze.append(max)

# padding di ogni stringa alla larghezza max della propria colonna
for row in tabella:
    for col in range(len(larghezze)):
        row[col] = row[col].ljust(larghezze[col]) + "  "

var = ''
for row in tabella:
    var += "".join(row)+"\n"

# salvi su file come stringa
with open('/tmp/file.txt', 'w') as f:
	f.write(var)

# carichi i dati dal file
with open('/tmp/file.txt', 'r') as f:
	var = f.read()

# fai quello che devi con la var
print(var) # tanto per esempio

$ ./incolonna.py 
Brignola    Gianni  apsd  Napolisud  A  
Fiorentino  Bruno   apsd  Napolisud  A  
Borghini    Aldo    apsd  Napolisud  A  

$ 
raffaele63
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 348
Iscrizione: lunedì 3 ottobre 2011, 12:27
Desktop: Lubuntu
Distribuzione: Lubuntu 22.04.1 LTS (Jammy Jellyfis
Sesso: Maschile

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da raffaele63 »

Grazie per le risposte.
Proverò ad esporre meglio quello che mi succede, premettendo che il mio linguaggio informatico non è sicuramente corretto (come ti sarai accorto :D )
per lo script lo si può trovare qui, (mi sono accorto dopo che la segnalazione di Cortinico già la indicava) ma il problema , secondo me non è li.
Dopo l'assegnazione dei dati al file:
  • - aprendo il file con Leafpad ottengo la lista dei dati non ordinati
    - aprendo il file con LibreOffice ho una lista perfetta
    - aprendo da LibreOffice il file (comando Inserisci / File) ottengo la lista dei dati non ordinati
    - ed anche nel PDF i dati restano non ordinati
Aggiungere 'testo':

Codice: Seleziona tutto

TEXT = """%s     pagina %d di %d

"""+testo
se guardi nell'URL che ti ho segnalato troverai questo parte di codice tranne la parte '+testo'.
Grazie e Buon Anno.
Bisognerebbe evitare di predicare ai giovani il successo nella solita forma come lo scopo principale nella vita.
Il motivo più importante per lavorare a scuola e nella vita è il piacere nel lavoro, piacere nel suo risultato e la conseguenza del valore del risultato per la comunità. ( A.E. )
raffaele63
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 348
Iscrizione: lunedì 3 ottobre 2011, 12:27
Desktop: Lubuntu
Distribuzione: Lubuntu 22.04.1 LTS (Jammy Jellyfis
Sesso: Maschile

Re: Trasformare file.txt in PDF o LibreOffice

Messaggio da raffaele63 »

Salve,
per tutto il giorno non ho avuto linea, la signora TIM ha problemi con i propri impianti e a noi poveri mortali non resta che accettare e pagare. Tempo fa avevo chiesto di attivare solo la linea Nacked (notare che le centraline sono presenti ed attive) ma il colosso mi ha risposto che non è possibile soddisfare la mia richiesta ecc.
Scusate lo sfogo ma troppo potere in mano a pochi è molto pericoloso per un sacco di motivi.

Tornando all'argomento principale del mio intervento, io avrei risolto perché grazie alla collaborazione di persone come rai, cortinico ed altri, posso mettere risolto alla discussione.

Spiegazione:
  • - salvo i dati estratti in un file denominato 'nome.txt';
    - apro LibreOffice (per la prima volta) / Nuovo;
    - copio il file 'nome.txt' con i comandi Inserisci / File;
    - chiudo salvando, ma l'estensione .txt non è prevista, quindi salvo .odt;
    - così il file 'nome.odt' è sempre presente e posso riutilizzarlo ogni volta che serve;
    - oppure salvo direttamente in PDF;
Spero che sia chiara l'esposizione del percorso che ho scelto, se qualcuno ha osservazioni da fare sono ben accette.
Bisognerebbe evitare di predicare ai giovani il successo nella solita forma come lo scopo principale nella vita.
Il motivo più importante per lavorare a scuola e nella vita è il piacere nel lavoro, piacere nel suo risultato e la conseguenza del valore del risultato per la comunità. ( A.E. )
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2886
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: [Risolto]Trasformare file.txt in PDF o LibreOffice

Messaggio da rai »

Ciao Raffaele
Mi fa piacere che hai risolto :birra: e visto che hai richiesto osservazioni, ecco le mie:
il fatto che l'output di quel codice, dopo il salvataggio su file, abbia un aspetto diverso a secondo di come lo apri dipende evidentemente dalla applicazione e in particolare (penso) dal tipo di font.
Inoltre, non so se hai veramente necessità di salvare le tabelle _su_file_di_testo_ invece di creare al volo i pdf, certo questa serie di passaggi di formato sembra farraginosa
Ho visto lo script che hai linkato da PyPDF2: non mi è sembrato un esempio particolarmente adeguato a quello che chiedevi ma mi ha incuriosito
Perciò l'ho modificato in modo che la funzione make_pdf_file() crei il pdf in dipendenza dal testo che passi come primo argomento( il secondo è il path del pdf di output)

Codice: Seleziona tutto

#!/usr/bin/env python
#-*- coding: utf-8 -*-

"Crea un semplice pdf; il n° di pagine dipende dalla lunghezza del testo."

from reportlab.pdfgen import canvas

point = 1 # un punto, in altezza è 1/72 di pollice
inch = 72

def make_pdf_file(input_text, output_filename):
    font = "Courier"  # NON proporzionale
    fontSize = 12 * point # in A4 ci entrano 59 righe se fontSize=12
    c = canvas.Canvas(output_filename)
    c.setFont(font, fontSize)
    margineSn = 1 * inch
    primoRigo = 10.7 * inch # posizione verticale del primo rigo
    rigo = primoRigo
    for line in input_text.split( '\n' ):
        if rigo <= inch:
            c.showPage() # crea una nuova pagina
            c.setFont(font, fontSize) # ma serve veramente a ogni nuova pagina? :(
            rigo = primoRigo
        c.drawString( margineSn, rigo, line )
        rigo -= fontSize # scendiamo di un rigo
    c.save()

if __name__ == "__main__":
# se esegui il file invece di usare la funzione
# crea un pdf di esempio
    text = ''
    for rigo in range(70):
        text = "{}#{:2d} ".format(text, rigo)
        for decina in range(6):
	        for n in range(10):
		        text = text + str(n)
	        text = text + '  '
        text = text + '\n'

    filename = "/tmp/simple.pdf"

    make_pdf_file(text, filename)
prova se si adatta a quello che ti serve

EDIT modificato il codice per mantenere lo stesso carattere ad ogni nuova pagina. Comunque non mi sembra sensato dovere fare così quindi se qualcuno conosce la libreria intervenga a correggermi ;-)
Ultima modifica di rai il lunedì 4 gennaio 2016, 13:00, modificato 1 volta in totale.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti