Maison  >  Article  >  développement back-end  >  Comment générer automatiquement des rapports PDF en utilisant Python ?

Comment générer automatiquement des rapports PDF en utilisant Python ?

WBOY
WBOYavant
2023-04-23 11:25:152167parcourir

En raison des exigences professionnelles, j'ai souvent besoin de générer de nombreux rapports PDF pour que les clients puissent vérifier les effets du produit et expliquer le processus.

Chaque fois que vous devez rédiger des documents selon un certain format et générer des rapports PDF, un travail aussi répétitif est vraiment fatiguant.

Je pense pouvoir utiliser Python pour générer un rapport pour les utilisateurs, qui doit insérer des images, des tableaux, des descriptions de texte, etc.

L'utilisation du module tiers non standard python reportlab peut répondre au besoin de générer directement des rapports PDF Puisqu'il s'agit d'une bibliothèque non standard, vous devez utiliser pip pour installer le module.

Utilisez pip pour installer le module reportlab afin de prendre en charge la génération de documents PDF.

pip install reportlab -i https://pypi.tuna.tsinghua.edu.cn/simple

Si l'environnement C++ est manquant lors du processus d'installation et que la build échoue, vous pouvez directement choisir d'utiliser le fichier wheel pour installer le module reportlab. L'adresse de téléchargement du fichier

Comment générer automatiquement des rapports PDF en utilisant Python ?

.whl est la suivante : https://www.lfd.uci.edu/~gohlke/pythonlibs/

Une fois le téléchargement terminé, stockez-le sur le disque local et installez le module reportLab selon le chemin de stockage. Pour la méthode d'installation, veuillez vous référer à la méthode d'installation ci-dessous.

pip install wheel -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install D:\downloads\reportlab-3.5.57-cp36-cp36m-win_amd64.whl

Importez à l'avance les objets python qui doivent être utilisés dans le module reportlab dans le bloc de code actuel.

from reportlab.pdfbase import pdfmetrics  # 注册字体
from reportlab.pdfbase.ttfonts import TTFont  # 字体类
from reportlab.platypus import Table, SimpleDocTemplate, Paragraph, Image  # 报告内容相关类
from reportlab.lib.pagesizes import letter  # 页面的标志尺寸(8.5*inch, 11*inch)
from reportlab.lib.styles import getSampleStyleSheet  # 文本样式
from reportlab.lib import colors  # 颜色模块
from reportlab.lib.units import cm  # 单位:cm

Une fois le module importé, la première étape consiste à définir les polices utilisées dans le document PDF. Les polices peuvent être définies selon vos propres préférences.

# Registering a font named 'simfang' with the file 'simfang.ttf'.
pdfmetrics.registerFont(TTFont('simfang', 'simfang.ttf'))

La police que j'ai choisie ici est simfang.ttf Concernant la police par défaut dans le système Windows, vous pouvez la voir dans le chemin ci-dessous.

Comment générer automatiquement des rapports PDF en utilisant Python ?

Avant de développer du code métier, nous pouvons amener la partie publique vers l'extérieur. Ici, en utilisant la fonction getSampleStyleSheet, nous obtiendrons toutes les feuilles de style et les utiliserons ensuite à d'autres endroits.

# Getting a list of styles that can be used in the document.
style_list = getSampleStyleSheet()

1. Insérer un titre PDF

Définissez l'objet de style de police du grand titre sur Titre1, la couleur de la police sur vert, la taille sur 18 et en gras.

def insert_full_title(title_name=None):
    """
    This function takes in a title name and returns the full title name.

    :param title_name: The name of the title you want to insert
    """
    font_ = style_list['Heading1']
    font_.fontName = 'simfang'
    font_.fontSize = 18
    font_.leading = 50
    font_.textColor = colors.green
    font_.alignment = 1
    font_.bold = True
    return Paragraph(title_name, font_)

Comment générer automatiquement des rapports PDF en utilisant Python ?

2. Insérer un sous-titre PDF

Définissez l'objet de style de police du sous-titre sur Normal, la couleur de la police sur rouge, la taille sur 15 et non en gras.

def insert_lettle_title(lettle_name=None):
    """
    :param lettle_name: The name of the lettle you want to insert
    """
    font_ = style_list['Normal']
    font_.fontName = 'simfang'
    font_.fontSize = 15
    font_.leading = 30
    font_.textColor = colors.red
    return Paragraph(lettle_name, font_)

Comment générer automatiquement des rapports PDF en utilisant Python ?

3. Insérez du texte de paragraphe ordinaire

Pour le texte ordinaire, définissez l'objet de style de police sur Normal, la couleur de police par défaut, la taille sur 12 et non en gras, et activez le mode de retour à la ligne automatique.

def insert_text(text=None):
    """
    > This function inserts text into the current document

    :param text: The text to insert
    """
    font_ = style_list['Normal']
    font_.fontName = 'simfang'
    font_.fontSize = 12
    font_.wordWrap = 'CJK'
    font_.alignment = 0
    font_.firstLineIndent = 32
    font_.leading = 25
    return Paragraph(text, font_)

Comment générer automatiquement des rapports PDF en utilisant Python ?

4. Insérer des images PDF

L'insertion d'images dans des objets de document PDF est relativement simple. Il vous suffit de définir le chemin local vers lequel les images doivent être insérées.

def insert_image(image_path=None):
    """
    > This function inserts an image into the notebook

    :param image_path: The path to the image you want to insert
    """
    img = Image(image_path)
    img.drawWidth = 5 * cm
    img.drawHeight = 8 * cm
    return img

Comment générer automatiquement des rapports PDF en utilisant Python ?

5. Insérer des tableaux PDF

Lors de l'insertion d'un tableau, le format du tableau peut être défini en fonction de vos propres préférences, telles que le titre du tableau, le style de police, la taille de la police et si une fusion est nécessaire pour contrôler les objets de table qui doivent être insérés.

def insert_table(*args):
    """
    It inserts a table into the database.
    """
    col_width = 120
    style = [
        ('FONTNAME', (0, 0), (-1, -1), 'simfang'),  # 字体
        ('FONTSIZE', (0, 0), (-1, 0), 12),  # 第一行的字体大小
        ('FONTSIZE', (0, 1), (-1, -1), 10),  # 第二行到最后一行的字体大小
        ('BACKGROUND', (0, 0), (-1, 0), '#d5dae6'),  # 设置第一行背景颜色
        ('ALIGN', (0, 0), (-1, -1), 'CENTER'),  # 第一行水平居中
        ('ALIGN', (0, 1), (-1, -1), 'LEFT'),  # 第二行到最后一行左右左对齐
        ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),  # 所有表格上下居中对齐
        ('TEXTCOLOR', (0, 0), (-1, -1), colors.darkslategray),  # 设置表格内文字颜色
        ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),  # 设置表格框线为grey色,线宽为0.5
    ]
    table = Table(args, colWidths=col_width, style=style)
    return table

Comment générer automatiquement des rapports PDF en utilisant Python ?

Ceux ci-dessus sont les objets couramment utilisés dans les documents PDF Enfin, en ajoutant les paramètres de contenu correspondants, le document PDF peut être généré et enregistré sur le disque local.

# A special variable in Python that evaluates to `True` if the module is being run as the main program.
if __name__ == '__main__':
    pdf_ = list()

    pdf_.append(insert_full_title('数据测试报告'))
    pdf_.append(insert_text(
        'Python 是一门编程语言。 您可以在服务器上使用 Python 来创建 Web 应用程序。通过实例学习 我们的 TIY 编辑器使学习 Python 变得简单,它能够同时显示代码和结果。 '))
    pdf_.append(insert_image('./excle源数据.png'))
    pdf_.append(insert_lettle_title('数据内容展示:'))
    data = [
        ('职位名称', '平均薪资', '较上年增长率'),
        ('数据分析师', '18.5K', '25%'),
        ('高级数据分析师', '25.5K', '14%'),
        ('资深数据分析师', '29.3K', '10%')
    ]
    pdf_.append(insert_table(*data))

    doc = SimpleDocTemplate('测试报告.pdf', pagesize=letter)
    doc.build(pdf_)

Comment générer automatiquement des rapports PDF en utilisant Python ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer