Reportlab文本背景大小与字体大小不匹配

2 投票
1 回答
6276 浏览
提问于 2025-04-17 16:12

我想要在一个简单的黑色条上放一个白色文字的标题(这个条上会有页面的内容,所以做一个真正的标题会很复杂)。问题是,文字的背景似乎没有随着文字的大小变化而变化,这在我的 MWI 中可以看到:

from reportlab.lib import colors
from reportlab.lib.enums import TA_JUSTIFY, TA_RIGHT, TA_CENTER, TA_LEFT
from reportlab.lib.pagesizes import letter, landscape
from reportlab.platypus import PageTemplate, Frame, NextPageTemplate, BaseDocTemplate, SimpleDocTemplate, Paragraph, Spacer, Image, Table, TableStyle, PageBreak
from reportlab.platypus import ListFlowable, ListItem
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import inch
from reportlab.rl_config import defaultPageSize
from reportlab.pdfbase.pdfmetrics import stringWidth
from reportlab.pdfgen import canvas

#c = canvas.Canvas("tables.pdf")
doc = SimpleDocTemplate("mwi.pdf",pagesize=letter,
                        rightMargin=72,leftMargin=72,
                        topMargin=72,bottomMargin=60)

styles=getSampleStyleSheet()
styles.add(ParagraphStyle(name='Table Top Black Back', fontName ='Helvetica',fontSize=14, backColor = colors.black, textColor=colors.white, alignment=TA_LEFT))
styles.add(ParagraphStyle(name='Table Top Red Back', fontName ='Helvetica',fontSize=9, backColor = colors.red, textColor=colors.black, alignment=TA_LEFT))

styleN = styles["BodyText"]

# Header
# report: topic/subtopic overview
report = []
ptext = 'Test' 
report.append(Paragraph(ptext, styles["Table Top Black Back"]))
report.append(Spacer(1, 24))

ptext = 'Test' 
report.append(Paragraph(ptext, styles["Table Top Black Back"]))
report.append(Spacer(1, 24))

ptext = 'Test' 
report.append(Paragraph(ptext, styles["Table Top Red Back"]))
report.append(Spacer(1, 48))


# Build Document
doc.build(report)

1 个回答

0

首先,从你的代码来看,它无法编译,因为出现了错误。

ImportError: cannot import name ListFlowable
ImportError: cannot import name ListItem

我把这些导入去掉了,因为这里不需要。

背景大小不匹配的原因是你没有在段落中指定“行距”属性。你改变了“字体大小”,但没有改变“行距”属性。

什么是“行距”呢?

行距就是相邻文本行之间的间距;一个好的经验法则是把它设置为字体大小的20%大。要实现双倍行距,可以使用较大的行距。

默认情况下,字体大小设置为10,行距设置为12。

所以在你上面的例子中,当你把字体大小设置为14,但行距仍然是12时,这就是为什么你的文本看起来不合适的原因。

解决这个问题的方法是在你上面的例子中定义一个稍大的行距。

我不认为这是个bug,而是一个设计上的不太理想的考虑。这是一个非常主观的话题,不太清楚当时reportlab开发者在想什么。

from reportlab.lib import colors
from reportlab.lib.enums import TA_JUSTIFY, TA_RIGHT, TA_CENTER, TA_LEFT
from reportlab.lib.pagesizes import letter, landscape
from reportlab.platypus import PageTemplate, Frame, NextPageTemplate, BaseDocTemplate, SimpleDocTemplate, Paragraph, Spacer, Image, Table, TableStyle, PageBreak
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import inch
from reportlab.rl_config import defaultPageSize
from reportlab.pdfbase.pdfmetrics import stringWidth
from reportlab.pdfgen import canvas

#c = canvas.Canvas("tables.pdf")
doc = SimpleDocTemplate("mwi.pdf",pagesize=letter,
                    rightMargin=72,leftMargin=72,
                    topMargin=72,bottomMargin=60)

styles=getSampleStyleSheet()
styles.add(ParagraphStyle(name='Table Top Black Back', fontName ='Helvetica',fontSize=14, leading=16,backColor = colors.black, textColor=colors.white, alignment=TA_LEFT))
styles.add(ParagraphStyle(name='Table Top Red Back', fontName ='Helvetica',fontSize=9, leading=12, backColor = colors.red, textColor=colors.black, alignment=TA_LEFT))

styleN = styles["BodyText"]

# Header
# report: topic/subtopic overview
report = []
ptext = 'Test' 
report.append(Paragraph(ptext, styles["Table Top Black Back"]))
report.append(Spacer(1, 24))

ptext = 'Test' 
report.append(Paragraph(ptext, styles["Table Top Black Back"]))
report.append(Spacer(1, 24))

ptext = 'Test' 
report.append(Paragraph(ptext, styles["Table Top Red Back"]))
report.append(Spacer(1, 48))

# Build Document
doc.build(report)

希望这能帮到你。祝你在reportlab编程中愉快。

撰写回答