Python Reportlab单位(cm和inch)的翻译方式不同

时间:2016-03-18 07:54:16

标签: python pdf reportlab

如果我使用带有cm或inch设置的ReportLab(例如3.2.0)绘制两个PDF文件,我会得到两个不同的PDF。

我有两个功能让我看起来完全相同。在一个中,我将文本放置到位(5.0 *英寸,10.0 *英寸),在另一个中,我将它们放入(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()

Pic 1: Outcome of function cm_test()

Pic 2: Outcome of function inch_test()

1 个答案:

答案 0 :(得分:1)

这不是错误,文本在不同地方打印的原因如下:

c.translate(inch, inch)
c.translate(cm, cm)

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