Python Reportlab 单位,cm 和 inch,翻译不同
Python Reportlab units, cm and inch, are translated differently
如果我使用 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()
这不是错误,文本打印在不同位置的原因如下:
c.translate(inch, inch)
c.translate(cm, cm)
这些语句将 canvas 原点 1 cm/inch 向上和向右移动。由于 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()
这不是错误,文本打印在不同位置的原因如下:
c.translate(inch, inch)
c.translate(cm, cm)
这些语句将 canvas 原点 1 cm/inch 向上和向右移动。由于 Reportlab 基于此原点绘制,因此文本位于不同的位置。