Python Reportlab 单位厘米和英寸的转换方式不同

Cre*_*bit 5 python pdf reportlab

如果我使用 ReportLab(版本 3.2.0)以厘米或英寸设置绘制两个 PDF 文件,我会得到两个不同的 PDF。

我有两个在我看来完全相等的函数。在一个中,我将文本放置在位置 (5.0*inch, 10.0*inch) 中,在另一个中,我将它们放置在 (5.0*2.54*cm, 10.0*2.54*cm) 中。显然,我使用 2.54 将长度从英寸转换为厘米。

问题是文本被放置在不同的位置。我是否遗漏了什么,这是一个错误还是发生了什么事?

下面我添加了复制我的问题的代码以及两个结果的图片。

from reportlab.pdfgen import canvas
from reportlab.lib.units import inch, cm
from reportlab.lib.pagesizes import A4

def cm_test():
    c = canvas.Canvas("inch.pdf", pagesize=A4)
    c.translate(inch, inch)
    text_object = c.beginText(5.0*inch, 10.0*inch)
    text_object.textLine("INCH: text located here")
    c.drawText(text_object)
    c.save()

def inch_test():
    c = canvas.Canvas("cm.pdf", pagesize=A4)
    c.translate(cm, cm)
    text_object = c.beginText(5.0*2.54*cm, 10.0*2.54*cm)
    text_object.textLine("CM: text located here")
    c.drawText(text_object)
    c.save()

if __name__ == "__main__":
    cm_test()
    inch_test()
Run Code Online (Sandbox Code Playgroud)

图1:cm_test()函数的结果

图2:函数inch_test()的结果

B8v*_*ede 5

这不是错误,而是文本在不同位置打印的原因,如下所示:

c.translate(inch, inch)
c.translate(cm, cm)
Run Code Online (Sandbox Code Playgroud)

这些语句将画布原点向上和向右移动 1 厘米/英寸。由于 Reportlab 基于此原点进行绘制,因此文本被放置在不同的位置。