03 - Open Source03d - Python

Comporre Pdf in Python

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
Invio messaggi Slack con NodeJs da IBM i (IT)

Premessa Slack è un software che rientra nella categoria degli strumenti di collaborazione aziendale utilizzato per inviare messaggi in modo Read more

HAI LETTO IL MANUALE ?

È la domanda che faccio sempre ai miei colleghi programmatori quando mi chiedono qualcosa: "Hai letto il manuale?". Lo sappiamo, Read more

SQL and DB2 for i – FAQ & Howtos – (Parte 4 IT)

Eccoci alla quarta parte di questo "FAQ & Howtos" per SQL e DB2 for i ... le precedenti 3 "puntate" Read more

SQL and DB2 for i – FAQ & Howtos – (Parte 3 IT)

iDB2-FAQ-021 – Stored Procedure e Linked Server da MS SQL Server a DB2 for i From Microsoft MS SQL Server 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.

5 Comments

Rispondi

%d blogger hanno fatto clic su Mi Piace per questo: