【问题标题】:Why am I seeing "IndexError: string index out of range"为什么我看到“IndexError:字符串索引超出范围”
【发布时间】:2014-03-10 01:58:37
【问题描述】:

我正在尝试使用 reportlab 的 pdfgen 来绘制 PDF,但是当我尝试保存我的画布时,我得到了这个疯狂的错误:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
/usr/local/bin/ipython-listener in <module>()
----> 1 c = set_canvas(); c.save()

/usr/lib/python2.7/dist-packages/reportlab/pdfgen/canvas.pyc in save(self)
   1191            If there is current data a ShowPage is executed automatically.
   1192            After this operation the canvas must not be used further."""
-> 1193         if len(self._code): self.showPage()
   1194         self._doc.SaveToFile(self._filename, self)
   1195 

/usr/lib/python2.7/dist-packages/reportlab/pdfgen/canvas.pyc in showPage(self)
    582 
    583         pageWidth = self._pagesize[0]
--> 584         pageHeight = self._pagesize[1]
    585         cM = self._cropMarks
    586         code = self._code

IndexError: string index out of range

这是相关代码:

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import landscape, letter
from reportlab.lib.units import inch

def set_canvas():
    c = canvas.Canvas("bingo.pdf")
    c.setPageSize(letter)
    c.setPageRotation(90)
    c.setFont('Helvetica-Bold', 14)
    return c

一旦加载,我运行 c = set_canvas()c.save() 并得到错误。如果我注释掉 setPageSize 行,它似乎可以工作:

def set_canvas():
    c = canvas.Canvas("bingo.pdf")
    c.setPageRotation(90)
    c.setFont('Helvetica-Bold', 14)
    return c

c = set_canvas()    
c.drawString(72, 72, "Why is this so hard?")
c.save()

但我只是在添加字体大小时才开始遇到这个问题。我无法弄清楚我在这里缺少什么。

【问题讨论】:

  • 似乎字母中的任何内容都不是设置 _pagesize[1].. 可能会检查默认设置,看看您是否可以创建自己的设置。
  • @clancer,这基本上让我找到了解决方案,所以请随时发布作为答案。我有一个函数将 letter 重新设置为默认值以外的值。

标签: python pdf-generation


【解决方案1】:

from reportlab.lib.pagesizes import landscape, letterletter 设置为元组(612.0, 792.0)——但我稍后在我的脚本中使用“字母”作为函数内部的变量,有效地将其重新定义为字符串。并且字符串没有索引[1],因此当reportlab 尝试使用pageHeight = self._pagesize[1] 设置pageHeight 时它超出了范围

不是没有,运行pylint 会让我更快地发现问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多