03 - Open Source03d - Python

Comporre Pdf in Python

Last Updated on 14 Dicembre 2019 by Roberto De Pedrini

Leggendo l’articolo, anche poetico, del nostro Champion Ibm Roberto De Pedrini, riguardo il merge di diversi pdf, mi è venuta l’ispirazione di raccontare un po’ come fare un pdf in Python.

E’ molto semplice, è sufficiente installare il package fpdf (pip install fpdf) e poi con poche istruzioni si ottengo dei fantastici pdf con i quali possiamo costruire dei graziosi report, con i dati proveniente dal nostro IbmI.

Programma Python

from fpdf import FPDF
import webbrowser
import os.path
from DbPoweri import DbPoweri
from time import gmtime, strftime
 
class StampaPeso():
    def __init__(self):
        pass
    def testata(self, datai, dataf, datain , datafi):
        pdf = FPDF()
        pdf.add_page()
        pdf.set_font("Arial", size=20)
        self.page=1
        pdf.cell(200, 10, txt="Riepilogo produzione:" +datai+"-"+dataf , ln=1, align="C")
        pdf.set_font("Arial", size=12)
        self.dettaglio(pdf, datain , datafi)  
        a=strftime("%Y-%m-%d %H-%M-%S", gmtime())
Aggiungo la variabile "a" per decodificare in modo univoco il pdf con data e time 

        if os.path.exists("C:\\temp\\StampaProduzionePeso"+a+".pdf")  is False:
#SCRIVE IL PDF NELLA CARTELLA
            pdf.output( "C:\\temp\\StampaProduzionePeso"+a+".pdf","F").encode('latin-1')
#APRE IL BROWSER PDF
            webbrowser.open_new_tab(r''  'C://temp//StampaProduzionePeso'+a+'.pdf')
        else:
            print ("error")
            return
    def dettaglio(self,pdf,datain, datafi):
        pdf.set_font('Arial', '', 10)
        c=DbPoweri()
        c.connection()
#ROWS LISTA DELLE COLONNE DALLA FETCH DI CONNESSIONE SUL DATABASE IBMI
#ROWS1 LISTA DELLE COLONNE di totalizzazione DALLA FETCH DI CONNESSIONE SUL DATABASE IBMI 
        rows, col_names=c.peso(c.c1, datain, datafi)
        rows1, col_namest=c.totpeso(c.c1, datain ,datafi)
        pdf.set_fill_color(192,192,192)    
#PDF.CELL COSTRUISCO LA CELLA
#(WIDTH,HEIGHT, TXT, BORDER 0:NO BORDER 1:BORDER,
# 0 CONTINUA A DESTRA, 1 INIZIA UNA NUOVA LINEA
# ALIGN L:LEFT C:CENTER R:RIGHT)    
# INDICA SE LA CELLA PUO' ESSERE COLORATA True, TRASPARENTE False
        pdf.cell(10, 10, 'Cod', 1, 0, 'C',fill = True)
        pdf.cell(40, 10, 'Qta_Grammatura', 1, 0, 'C',fill = True)
        pdf.cell(40, 10, 'Qta_KG', 1, 1, 'C',fill = True)
        pdf.ln(0)
        nr=0
        posizione=0
        for riga in rows:
            w_x=0
            for col in riga:
                w_x+=1
                if w_x==1:
                    cod=col
                if w_x==2:
                    gramm=col
                if w_x==3:
                    peso=col
            pdf.set_fill_color(192,192,192)
            pdf.cell(10, 8, str(cod), 1, 0, 'L')
            pdf.cell(40, 8, str(gramm), 1, 0, 'R')
            pdf.cell(40, 8, str(peso), 1, 1, 'R')  
           
        for riga in rows1:
            w_x=0
            for col in riga:
                w_x=w_x+1
                if w_x==1:
                    gramm=col
                if w_x==2:
                    peso=col
            pdf.cell(10, 8, "", 1, 0, 'L') 
            pdf.cell(40, 8, str(gramm), 1, 0, 'R')
            pdf.cell(40, 8, str(peso), 1, 1, 'R')  

Conclusioni

Ecco lo sviluppo del pdf. Con poche istruzioni si riescono a fare delle stampe eccellenti. Questa tecnica può essere usata, inoltre, per lanciare la stampa dei pdf collegati a particolari disegni di produzione o eseguire delle funzioni di stampa per le certificazioni e così via.
Insomma questo linguaggio dimostra di essere molto versatile e si integra perfettamente con il nostro IbmI.
Happy coding!

Related Posts
DB2 for i SQL – Stringhe – POSSTR-LOCATE-LOCATE_IN_STRING (IT)

Introduzione Spesso, nelle nostre applicazioni, abbiamo la necessità di lavorare con le stringhe di testo e l'SQL del DB2 può Read more

DB2 for i & SQL – FAQ & Howto (Part. 1) (IT)

Database DB2 e SQL ... forse lo strumento più potente e completo che abbiamo sulla piattaforma IBM i: ecco una Read more

Annuncio IBM i 7.4

Arriva direttamente con l'uovo di Pasqua questo annuncio IBM per le novità della versione IBM i 7.4, versione iNext secondo Read more

Generated Always Columns – Approfondimenti (IT)

Introduzione "Generated Always Column": sono colonne, campi, di una tabella il cui contenuto è controllato direttamente dal sistema ... e Read more

About author

Project manager, consulente aziendale gestionale, sviluppo applicazioni con Rpgfree , Python, JavaScript. Sono entrato nel mondo IT quando è nato l'As400 , sono un sostenitore della piattaforma Ibm-I e delle sue enormi potenzialità e credo nelle risorse offerte dalla comunità dell'open source. Sono grato di collaborare con FAQ400 perchè condivido pienamente gli obiettivi.

6 Comments

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *