【问题标题】:Why does ReportLab not draw my lines where I want it to?为什么 ReportLab 没有在我想要的地方画线?
【发布时间】:2015-10-31 18:55:19
【问题描述】:

抱歉标题。我不太清楚问题是什么,所以我无法更准确地表达。

我正在尝试在 ReportLab 中使用 Python 复制现有表单(仅在纸上可用)。

我测量现有表格并使用 ReportLab 绘制的值。这是一个例子:

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib.units import mm

def test():
    c = canvas.Canvas('test.pdf', pagesize=landscape(A4))
    h, w = A4

    c.line(21*mm, 37*mm, 278*mm, 37*mm) 

    c.showPage()
    c.save()

当我打印这个文件(没有缩放)并测量它时,这条线不在它应该在的位置。水平向右偏移约 5mm,垂直向上偏移约 3mm。

这是为什么呢?画布/页面周围是否有手册中未记录的边框?线条是否比其视觉表现更宽?

我知道我可以通过简单地在我的代码中添加偏移量来适应这个错误,但这已经是一项繁琐的任务,我想确保我不会遗漏 ReportLab 或 PDF 生成所固有的一些问题。

【问题讨论】:

  • 您的打印机精度如何?我会先看一下 PDF 里面的东西,看看里面的东西是否都在它的位置上。 Acrobat Pro 具有必要的测量工具。
  • 您是否将文件打印到 A4 纸上?如果是这样,你从纸的哪个角落测量?横向放置时,它应该位于页面的左下角(水平线靠近左下角)。

标签: python pdf reportlab


【解决方案1】:

在 A4 页面或您提到的页面大小中绘制标尺,您可以在页面中看到这些坐标,然后您可以根据绘制的坐标在页面中任何您需要的地方画线 def drawMyRuler(c): c.drawString(100,810, 'x100') c.drawString(200,810, 'x200') c.drawString(300,810, 'x300') c.drawString(400,810, 'x400') c.drawString(500,810, 'x500')

    c.drawString(10,100, 'y100')
    c.drawString(10,200, 'y200')
    c.drawString(10,300, 'y300')
    c.drawString(10,400, 'y400')
    c.drawString(10,500, 'y500')
    c.drawString(10,600, 'y600')
    c.drawString(10,700, 'y700')
    c.drawString(10,800, 'y800')
def test():
    c = canvas.Canvas('test.pdf', pagesize=landscape(A4))
    h, w = A4
    drawMyRuler(c)
    #remaining code as per drawMyRuler coordinates...

【讨论】:

  • 这对 OP 或遇到同样困境的路人都没有帮助。请求您为您的解决方案添加一点解释,以使其用户友好。
猜你喜欢
  • 2023-01-11
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
相关资源
最近更新 更多