Skip to content

ALEX7320/reportepdfpython

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Generar reporte PDF Python 3

Al trabajar con pdf en Python se suele usar la libreria reportlab; sin embargo tambien hay otra manera, la cual es trabajando con archivos excel y posteriromente convertirlos a pdf.

Lo importante en este algoritmo es saber el manejo de excel con la libreria xlsxwriter cuya documentación pienso que es muy comprensible, ademas de tener un conocimiento básico de rutas.

Nota Se publicó una guía sobre 'Como crear PDF en Python con FPDF' guía totalmente gratis en Youtube → ENLACE

Indice

Recursos utilizados

pip install PySide2 → (Solo para obtener ruta de guardado)

pip install XlsxWriter

pip install pywin32

Documentación

Rutas

Lo importante en trabajar con nuestra ruta actual Modulo: Fucion_pdf / ClaseGeneradorExcel() / init

raiz = os.getcwd()

En este caso utilizamos un icono en el Excel es por ello que tambien tenemos que indicar la ubicación de dicho archivo.

self.ruta_icon = raiz+r'\icon\icono.jpg'

Necesitamos trabajar con una carpeta auxiliar, donde se almacenara el excel generado (esta carpeta no estara repleto de archivo, solo de los excel que deseamos trabajar, cabe recalcar que los nuevos no se vuelve a almacenar, simplemente reemplazaran al existente) para ello se creo el aux_excel

Ahora dependiendo de cuantos PDF deseamos generar, tendremos que tener una ruta de excel y pdf para cada uno, primero haciendo referencia a la ruta auxiliar (aux_excel)

self.rep_uno_ex = raiz+r'\aux_excel\reporte_uno.xlsx' # entrada excel
self.rep_uno_pd = raiz+r'\aux_excel\reporte_uno.pdf' # salida pdf

self.rep_dos_ex = raiz+r'\aux_excel\reporte_dos.xlsx' # entrada excel
self.rep_dos_pd = raiz+r'\aux_excel\reporte_dos.pdf' # salida pdf

Diseño

Enfocandonos en la creación de la hoja necesitamos conocimiento previo en xlsxwriter, para realizar las plantillas.

Documentación xlsxwriter

Y es alli donde le pasaremos la ruta auxiliar del 1er excel.

Modulo: Fucion_pdf / ClaseGeneradorExcel() / def gene_reporte_uno(sefl)

workbook = xlsxwriter.Workbook(self.rep_uno_ex)
worksheet = workbook.add_worksheet()
worksheet.set_paper(9)  # A4
worksheet.set_portrait() # vertical

# configuraciones aqui

workbook.close()

Tenemos que tener en cuenta que si tenemos varias hojas que comparten el mismo estilo, tenemos que pasarle el workbook esto para que sea el objeto al que van dirijido los estilos.

self.gen_estilos(workbook)

Una vez realizado la plantilla, procedemos a pregarlo en su respectiva función:

    def gene_reporte_uno(self):
		pass
		
    def gene_reporte_dos(self):
		pass

Conversión

Primero se debio instanciar el convertidor de PDF

Modulo: Fucion_pdf / ClaseGeneradorExcel() / init

self.raiz_manip_pdf = ClaseManipularPdf()

Necesitamos tener estos parametros en cuenta

def convertirdor_pdf(self, ingreso, salida):
    '''
    ingreso : ruta excel
    salida : ruta pdf
    '''

Recordemos que al final de cada plantilla se realiza la conversión, cons sus respectivas rutas.

        # conversion pdf *-*-*-*-*-*-*-*-*
        self.raiz_manip_pdf.convertirdor_pdf(
            ingreso= self.rep_uno_ex, 
            salida= self.rep_uno_pd
            )

Este algoritmo convertira el excel a pdf, teniendo en cuenta sus respectivas rutas de entrada y salida.

app = win32.gencache.EnsureDispatch("Excel.Application")
app.Interactive = False
app.Visible = False
app.DisplayAlerts = False

Workbook = app.Workbooks.Open(ingreso)

# salida
Workbook.ExportAsFixedFormat(0, salida)
Workbook.RefreshAll()
app.Quit()

Guardado

Al igual que en todo lo demas, necesitamos la ruta del pdf, en donde con el QFileDialog se elejira la ruta de guardao, y el shutil.move movera el archivo con el nombre asignado por el usuario.

Por ultimo el archivo pdf se abrira automaticamente con el webbrowser.

def guardarArchivo(self,ruta_pdf):
    """guardado del archivo"""

    # obtener ruta de guardado
    ruta = QFileDialog.getSaveFileName(None, 'Seleccionar archivo','','Texto (*.pdf)')
    
    if(ruta[0]!=''):
        # mover archivo pdf y cambiar nombre
        shutil.move(ruta_pdf,ruta[0])

        # abrir pdf    
        webbrowser.open(ruta[0], new=2)

    else:
        print('No se guardo archivo.')

Fuentes

Previsualización

Uno

Dos

Releases

No releases published

Packages

No packages published

Languages