上标传递给 reportlab drawString() 方法的字符串中的符号

Superscript a symbol in a string passed to reportlab drawString() method

当使用 reportlab 通过 drawString() 方法?

例如,打印一个字符串,如 '37%',我希望 '%' 符号是上标。

我想我目前的解决方法是使用对 drawString() 方法的两个单独调用,并为每个方法指定单独的字体大小,并使用有效模拟上标符号的坐标。是否有任何其他可行的解决方法将此限制为 drawString() 方法的一次调用?

您可以使用 matplotlib.pyplot 来执行此操作:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.set(title= r'This is an expression:  ^{\%}$')

plt.show()

如果您最终需要大量使用数学和公式,您不妨考虑使用可以转换为 pdf 的 LaTex。

我认为 drawString 方法无法满足您的要求,但 reportlab 提供了另一种方法。

这篇文章应该对你有很大的帮助:https://www.blog.pythonlibrary.org/2018/02/06/reportlab-101-the-textobject/

直接从文章改编给我们这个代码:

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

def apply_scripting(textobject, text, rise):
    textobject.setFont("Helvetica-Oblique", 8)
    textobject.setRise(rise)
    textobject.textOut(text)
    textobject.setFont("Helvetica-Oblique", 12)
    textobject.setRise(0)

def main():
    canvas_obj = canvas.Canvas("textobj_rising.pdf",
                               pagesize=letter)

    # Create textobject
    textobject = canvas_obj.beginText()
    textobject.setFont("Helvetica-Oblique", 12)

    # Set text location (x, y)
    textobject.setTextOrigin(10, 730)

    textobject.textOut('37')
    apply_scripting(textobject, '%', 4)

    canvas_obj.drawText(textobject)
    canvas_obj.save()


if __name__ == '__main__':
    main()

创建这样的 pdf:

与 drawString 两次相比,此方法的优势在于您无需计算放置 % 符号的坐标。