首页 > 编程问答 >Python 和 ReportLab。如何更改 Table 对象中的字体和字体大小?

Python 和 ReportLab。如何更改 Table 对象中的字体和字体大小?

时间:2024-07-26 07:19:17浏览次数:12  
标签:python reportlab

我需要更改表对象(ReportLab)中特定单元格的文本样式。 据我了解,它可以通过 TableStayle 类完成,但我找不到示例。

my_table = Table(data, colWidths=column_widths, rowHeights = row_heghts)

my_colour_black = [0, 0, 0]
my_colour_ligt_gray = [0.8, 0.8, 0.8]
my_colour_gray = [0.5, 0.5, 0.5]
my_colour_dark_gray = [0.2, 0.2, 0.2]
my_colour_white = [1, 1, 1]

my_table.setStyle(TableStyle([
    ('ALIGN',(0,0),(-1,0),'CENTER'),
    ('VALIGN',(0,0),(-1,0),'MIDDLE'),
    ('TEXTCOLOR',(0,0),(-1,0), my_colour_black),
    ('BACKGROUND',(0,0),(-1,0),my_colour_ligt_gray),
    ('ALIGN',(0,1),(-1,-1),'RIGHT'),
    ('VALIGN',(0,1),(-1,-1),'MIDDLE'), 
    ('TEXTCOLOR',(0,1),(-1,-1),my_colour_gray),
    ('INNERGRID', (0,0), (-1,-1), 0.5, my_colour_white),
    ]))

我试图在原始文档和其他公共资源(Google)中找到答案,但没有找到。 原始文档中提到了“FONT、FONTNAME(或FACE)、FONTSIZE(或SIZE)”,但没有示例如何使用它。


可以通过定义一个包含 SPAN TableStyle 命令来更改 ReportLab 表格中特定单元格的字体和字体大小,然后将字体名称和大小应用于该范围。

以下是操作方法:

from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from reportlab.lib import colors

doc = SimpleDocTemplate("table_style.pdf", pagesize=letter)
elements = []

data= [['Row 1, Col 1', 'Row 1, Col 2'],
       ['Row 2, Col 1', 'Row 2, Col 2']]

# 表格宽度
table = Table(data)

# 表格样式
style = TableStyle([
    ('ALIGN',(0,0),(-1,0),'CENTER'),
    ('VALIGN',(0,0),(-1,0),'MIDDLE'),
    ('TEXTCOLOR',(0,0),(-1,0), colors.black),
    ('BACKGROUND',(0,0),(-1,0),colors.lightgrey),
    ('ALIGN',(0,1),(-1,-1),'RIGHT'),
    ('VALIGN',(0,1),(-1,-1),'MIDDLE'), 
    ('TEXTCOLOR',(0,1),(-1,-1),colors.gray),
    ('INNERGRID', (0,0), (-1,-1), 0.5, colors.white),

    # 将字体更改为特定单元格
    ('SPAN',(0,0),(1,0)), # 应用跨度的单元格范围
    ('FONTNAME', (0, 0), (1, 0), 'Helvetica-Bold'), # 设置字体名称
    ('FONTSIZE', (0, 0), (1, 0), 14), # 设置字体大小
])
table.setStyle(style)

elements.append(table)
doc.build(elements)

在这个例子中:

  1. 我们导入了必要的 ReportLab 库。
  2. 我们创建了一个简单的文档和一个包含一些数据的表格。
  3. TableStyle 中,我们除了其他样式属性外,还包括三个新的样式命令:
  4. ('SPAN',(0,0),(1,0)) : 这将创建一个跨越第一行中前两个单元格的跨度。对跨度应用的任何样式都将应用于跨度内的所有单元格。
  5. ('FONTNAME', (0, 0), (1, 0), 'Helvetica-Bold') : 这会将第一行中前两个单元格(在跨度内)的字体设置为“Helvetica-Bold”。
  6. ('FONTSIZE', (0, 0), (1, 0), 14) : 这会将第一行中前两个单元格(在跨度内)的字体大小设置为 14。

通过这种方式,可以将 SPAN 命令与 FONTNAME FONTSIZE 组合在一起,以更改 ReportLab 表格中任何单元格或单元格范围的字体和字体大小。

标签:python,reportlab
From: 74272597

相关文章

  • 如何在Python中查找字符串中所有出现的子字符串,同时忽略某些字符?
    我想找到所有出现的子字符串,同时忽略某些字符。我怎样才能在Python中做到这一点?示例:long_string='thisisat`es"t.Doesthetestwork?'small_string="test"chars_to_ignore=['"','`']print(find_occurrences(long_string,small_string......
  • 如何让 python 为我提供正确的函数解决方案并根据符号更改零的格式?
    我正在尝试制作一个二次公式计算器。一切看起来都很好,但是,当我输入一些函数(例如x^2-2x+1和x^2+2x+1)时,当它们有不同的解决方案时,它会给我相同的零。我遇到的另一个问题是,在代码的末尾,format_solution(root),我希望它能够根据符号改变格式。例如,如果零是(x-1),我不希望它输入(......
  • PYTHON 代码执行错误 - 冻结 importlib._bootstrap>(1165)_find_and_load()?
    在MACOS10.15(CATALINA)上执行此PYTHON代码时出现以下错误。我正在使用IDLEShell编写PYTHON3.11。Python3.11.4(v3.11.4:d2340ef257,Jun 62023,19:15:51)[Clang13.0.0(clang-1300.0.29.30)]ondarwinType"help","copyright","credits"o......
  • 如何修复我的 python flet 音频可视化工具在终端中不出现错误的情况下无法工作
    标题:音频播放,但频谱可视化未在FletAudioVisualizer中显示我正在使用Flet框架开发音频可视化器。声音播放正确,但频谱可视化未显示。这是我的代码:importfletasftimportnumpyasnpfrompydubimportAudioSegmentfrompydub.utilsimportmake_chunksimportm......
  • 使用隐式 __init__ 方法向 python 数据类添加显式 dunder 方法
    我在python中创建了一个数据类,选择使用隐式定义的__init__方法。然后,我尝试显式重写比较dunder方法之一(__eq__)。因为没有明确的__init__方法,所以'this'参数不存在,所以python抛出了一个NameError。为了做到这一点,即使自动生成的很好,我是否也必......
  • 84 我正在使用 Python 开发 selenium 自动化项目。我收到错误 .NoSuchElementExceptio
    场景是这样的,我将打开一个网页,在使用selenium单击该网页后,它会要求位置访问权限,屏幕上会出现一堆按钮,我正在尝试定位其中一个按钮,但即使正确给出了Xpath地址,我得到.NoSuchElementException:错误能够单击目标按钮你正在使用Selenium在Python中开发自动化项目,并遇到......
  • 在Python 3中删除两个指定字符串之间的字符串
    我正在从事一个NLP项目,该项目要求我从一段文本中删除计算机代码。代码包含在标签<pre><code>和</code></pre>之间。现在我可以做一个简单的正则表达式匹配,但我想概括这个函数,以便它可以删除任何两个指定字符串之间的文本,即使它们是嵌套的。例如,如果我有一个......
  • Azure Open AI - Python 和 Java API 之间 gpt4o 的结果截然不同
    我使用Java和PythonAPI对AzureOpenAI进行相同的调用,但收到截然不同的结果:相同的系统提示相同的用户提示适用于Java和Python的azureai包的相同(最新)版本尽管输入的用户和系统提示完全相同,但响应却非常不同-python提示是“正确的”并......
  • leetcode 输出错误? (Python)
    我的VSCode/本地终端给出了[1,4,1,5,1,6]的正确输出,但不知何故leetcode给了我完全不同的输出。我在这里错过了什么吗?这怎么可能?顺便说一下,这是wigglesort2将我的本地代码复制粘贴到leetcode中给出了不同的输出数组很难在没有看到你的代码的情况下......
  • 当 python 窗口的一部分不在屏幕上时,如何让它自己被记录?
    在Windows10中,大多数应用程序窗口都可以使用OBS等程序进行记录。当窗口被拖动以致其部分内容在显示屏上不可见时,通常OBS仍会接收窗口的内容,即使它在屏幕上不可见。但是,在编写python应用程序时,这似乎不以相同的方式工作。我尝试了几种不同的类似GUI的模块......