gpt4 book ai didi

python - 如何在 reportlab (python) 中使用 drawString 方法在一行中添加粗体和普通文本

转载 作者:太空狗 更新时间:2023-10-29 22:22:13 24 4
gpt4 key购买 nike

我是 reportlab 的新手lib,我正在学习它同时从事大学项目。我在 wxpython 中创建了一个桌面应用程序,这导致以 PDF 格式保存数据。

我想在我的 pdf 中添加 2 行。其中行以名为名称的用户输入开始,然后是一些单词,在第二行再次是一些单词,用户名,然后是一些单词......

我尝试使用一些 Paragraphcanvas方法和类,但我无法获得所需的输出。

期望的输出:

Alex 正在从事大学项目。

reportlab 是一个很好的库,Alex 喜欢它。

我的代码:

import os
import reportlab
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.pdfmetrics import registerFontFamily
from reportlab.pdfbase.ttfonts import TTFont

# Registered font family
pdfmetrics.registerFont(TTFont('Vera', 'Vera.ttf'))
pdfmetrics.registerFont(TTFont('VeraBd', 'VeraBd.ttf'))
pdfmetrics.registerFont(TTFont('VeraIt', 'VeraIt.ttf'))
pdfmetrics.registerFont(TTFont('VeraBI', 'VeraBI.ttf'))
# Registered fontfamily
registerFontFamily('Vera',normal='Vera',bold='VeraBd',italic='VeraIt',boldItalic='VeraBI')

# Output pdf file name.
can = canvas.Canvas("Bold_Trail.pdf", pagesize=A4)

# Setfont for whole pdf.
can.setFont('Vera', 12)

# student name variable.
student_name ="Alex"

# Content.
line1 = " is working on college project."
line2 = "Reportlab is very good lib, "
line3 = " liked it.<br>"

# Joining whole content together.
content = "<strong>" + student_name + "</strong>" + line1
content2 = line2 + "<strong>"+student_name + "</strong>" + line3

# drawString location calculation.
x = 0; y = 8.5 * 72

# First string.
can.drawString(x,y, content)

y = y - 72

# Second String.
can.drawString(x,y, content2)

# Create PDF.
can.save()

除了使用XML方法还有其他方法吗<strong><b>在上述程序中不起作用?

文字应保持在一行。

最佳答案

您可以使用 canvas 对象的 setFont 方法,在需要时将字体设置为 Bold,以及 Normal 否则。

* 更新 *

为了计算x 的正确值,您可以使用stringWidth 方法,它根据字符串的内容、字体名称和字体大小。您必须从 reportlab.pdfbase.pdfmetrics 导入它:

[...]
from reportlab.pdfbase.pdfmetrics import stringWidth
[...]

# student name variable.
student_name = 'Alex'

# Content.
line1 = " is working on college project."
line2 = "Reportlab is very good lib, "
line3 = " liked it"

# drawString location calculation.
x = 0
y = 8.5 * 72

# First string.
can.setFont('Helvetica-Bold', 8)
can.drawString(x, y, student_name)
can.setFont('Helvetica', 8)
textWidth = stringWidth(student_name, 'Helvetica-Bold', 8)
x += textWidth + 1
can.drawString(x, y, line1)

y = y - 72

# Second String.
x = 0
can.setFont('Helvetica', 8)
can.drawString(x, y, line2)
textWidth = stringWidth(line2, 'Helvetica', 8)
x += textWidth + 1
can.setFont('Helvetica-Bold', 8)
can.drawString(x, y, student_name)
textWidth = stringWidth(student_name, 'Helvetica-Bold', 8)
x += textWidth + 1
can.setFont('Helvetica', 8)
can.drawString(x, y, line3)

# Create PDF.
can.save()

或者您可以查看 ParagraphStyleParagraph(from reportlab.lib.styles import ParagraphStylefrom reportlab。 platypus import Paragraph) 但我不确定您是否可以在同一个字符串中连接两种不同的样式。

关于python - 如何在 reportlab (python) 中使用 drawString 方法在一行中添加粗体和普通文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27732213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com