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!

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

Rispondi

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