behaviour change from 2.5 to 3.0 (or 3.3)

Yitzchak Scott-Thoennes <[email protected]>
Newsgroups gmane.comp.python.reportlab.user
Message-ID <CAN7g7HVBk37SswcW_bQCXz6BxAO6D_SWj65SLd2J+vNK1JMsTQ@mail.gmail.com>
I'm upgrading a server from ubuntu 12.04 (with reportlab 2.5) to 14.04
(with reportlab 3.0) and seeing a difference I can't explain.  I'd
appreciate it if someone else could explain it.
I'd even more appreciate suggestions for improvement.

The following code results in "X  test" horizontally aligned in 2.5 but
puts the X a line below test in 3.0 or 3.3:

from reportlab.lib.pagesizes import letter
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import Paragraph, SimpleDocTemplate
from reportlab.platypus.flowables import Spacer, Flowable

def main(file):
    baseStyle = ParagraphStyle('style', leftIndent = 5)

    story = [
        HorizFlowable([
            Cell('X', 10, baseStyle),
            Paragraph('text', baseStyle),
        ])
    ]

    doc = SimpleDocTemplate(
        file,
        pagesize = letter,
    )
    doc.build(list(story))

class Cell(Paragraph):
    """
    Flowable with a fixed width
    """
    __parent = Paragraph

    def __init__(self, text, width, *args, **kw):
        self.width = width
        self.__class__.__parent.__init__(self, text, *args, **kw)

    def wrap(self, aw, ah):
        return self.__class__.__parent.wrap(self, self.width, ah)

class HorizFlowable(Flowable):
    """
    Wrap a list of flowables and lays them out horizontally, sort of like
    an html table with only one row.
    """

    def __init__(self, content=None, *args, **kw):
        Flowable.__init__(self, *args, **kw)
        if not content:
            content = list()
        self._content = content

    def append(self, item):
        self._content.append(item)

    def wrap(self, availWidth, availHeight):
        height = 0
        colwidth = availWidth / len(self._content)
        width = availWidth
        for flowable in self._content:
            (w, h) = flowable.wrapOn(self.canv, width, availHeight)
            # you can't always have all the width
            if w == width and flowable != self._content[-1]:
                (w, h) = flowable.wrapOn(self.canv, colwidth, availHeight)
            width -= w
            if h > height:
                height = h
        self.width = availWidth - width
        self.height = height
        return self.width, self.height

    def draw(self):
        x = 0
        for flowable in self._content:
            flowable.drawOn(self.canv, x, self.height - flowable.height)
            x += flowable.width

main('output.pdf')
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.