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

时间:2017-07-26 19:47:47

标签: python reportlab superscript

使用'%'方法通过reportlab方法将该字符串写入PDF时,是否有一种简单的方法可以在Python中上标字符串的子字符串(例如drawString()符号)? / p>

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

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

2 个答案:

答案 0 :(得分:1)

如果您最终在数学和公式上做了大量工作,则不妨考虑使用可转换为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文件:

pdf with superscript

相对于drawString,此方法的优点是您无需弄清楚放置%符号的坐标。

答案 1 :(得分:0)

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

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

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

plt.show()