Disebabkan keperluan kerja, saya sering perlu menjana banyak laporan PDF untuk pelanggan menyemak kesan produk dan menerangkan prosesnya.
Setiap kali anda perlu menulis dokumen dalam format tertentu dan menjana laporan PDF, kerja berulang itu benar-benar memenatkan.
Saya fikir saya boleh menggunakan python untuk menjana laporan untuk pengguna, yang perlu memasukkan gambar, jadual, penerangan teks, dsb.
Menggunakan reportlab modul bukan standard python pihak ketiga boleh memenuhi keperluan untuk menjana laporan PDF secara langsung Memandangkan ia adalah perpustakaan bukan standard, anda perlu menggunakan pip untuk memasang modul.
Gunakan pip untuk memasang modul reportlab, yang menyokong penjanaan dokumen PDF.
pip install reportlab -i https://pypi.tuna.tsinghua.edu.cn/simple
Jika persekitaran C++ tiada semasa proses pemasangan dan binaan gagal, anda boleh terus memilih untuk menggunakan fail roda untuk memasang modul reportlab.
Alamat muat turun fail .whl adalah seperti berikut: https://www.lfd.uci.edu/~gohlke/pythonlibs/
Simpan selepas muat turun selesai Pergi ke cakera setempat dan pasang modul reportLab mengikut laluan storan Untuk kaedah pemasangan, sila rujuk kaedah pemasangan di bawah.
pip install wheel -i https://pypi.tuna.tsinghua.edu.cn/simple pip install D:\downloads\reportlab-3.5.57-cp36-cp36m-win_amd64.whl
Import objek python yang perlu digunakan dalam modul reportlab ke dalam blok kod semasa terlebih dahulu.
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
Selepas modul diimport, langkah pertama ialah menetapkan fon yang digunakan dalam dokumen PDF Fon boleh ditetapkan mengikut pilihan anda sendiri.
# Registering a font named 'simfang' with the file 'simfang.ttf'. pdfmetrics.registerFont(TTFont('simfang', 'simfang.ttf'))
Fon yang saya pilih di sini ialah simfang.ttf Mengenai fon lalai dalam sistem Windows, anda boleh melihatnya dalam laluan di bawah.
Sebelum membangunkan kod perniagaan, kami boleh membawa bahagian awam ke luar Di sini, menggunakan fungsi getSampleStyleSheet akan mendapat semua helaian gaya, yang juga boleh digunakan dalam yang lain. tempat.
# Getting a list of styles that can be used in the document. style_list = getSampleStyleSheet()
Tetapkan objek gaya fon untuk tajuk besar kepada Tajuk1, warna fon kepada hijau, saiz kepada 18 dan tebal.
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_)
Tetapkan objek gaya fon sari kata kepada Normal, warna fon kepada merah, saiz kepada 15 dan tiada penambahan tebal.
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_)
Untuk teks biasa, tetapkan objek gaya fon kepada Normal, warna fon kepada lalai, saiznya. hingga 12 dan tiada tambahan Kasar, hidupkan mod pembalut talian automatik.
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_)
Memasukkan gambar ke dalam objek dokumen PDF adalah agak mudah. Anda hanya perlu menetapkan laluan setempat tempat gambar perlu dimasukkan Boleh.
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
Apabila memasukkan jadual, format jadual boleh ditetapkan mengikut pilihan anda sendiri , gaya fon dan fon jadual Parameter seperti saiz dan sama ada penggabungan diperlukan untuk mengawal objek jadual yang perlu dimasukkan.
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
Di atas ialah objek yang biasa digunakan dalam dokumen PDF Akhirnya, dengan menambahkan parameter kandungan yang sepadan, dokumen PDF boleh dijana dan disimpan ke cakera setempat .
# 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_)
Atas ialah kandungan terperinci Bagaimana untuk menjana laporan PDF secara automatik menggunakan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!