[reportlab-users] BUG+FIX: Paragraph splitting

Robin Becker robin at reportlab.com
Thu Dec 11 06:16:58 EST 2008


Dirk Holtwick wrote:

> Hi,

>

> I found an error for paragraphs that need to split and contain inline

> images. After a long search I found out that the reason was that

> "autoLeading" was not inherited to the resulting split-paragraphs.

>

> Here is the part in Paragraph.split that needs to be modified:

>

> -----------------8<---------------[cut here]

> func = self._get_split_blParaFunc()

> P1=self.__class__(None,style,bulletText=self.bulletText,frags=func(blPara,0,s))

>

> P1.blPara =

> ParaLines(kind=1,lines=blPara.lines[0:s],aH=availHeight,aW=availWidth)

> P1._JustifyLast = 1

> P1._splitpara = 1

> P1.height = height

> P1.width = availWidth

> P1.autoLeading = self.autoLeading # <-- BUGFIX

> if style.firstLineIndent != 0:

> style = deepcopy(style)

> style.firstLineIndent = 0

> P2=self.__class__(None,style,bulletText=None,frags=func(blPara,s,n))

> P2.autoLeading = self.autoLeading # <-- BUGFIX

> return [P1,P2]

> -----------------8<---------------[cut here]

>

>.......

Dirk are you setting the autoLeading directly on the Paragraph here? I know that
we have allowed this for certain attributes. It's a slippery slope, but I guess
since we've allowed this in the past it should go forward. Probably though since
autoLeading can be on the style we ought to check for existence rather than
assume that it's on the instance directly. I suggest the following patch.


> P1=self.__class__(None,style,bulletText=self.bulletText,frags=func(blPara,0,s))

> #this is a major hack

> P1.blPara = ParaLines(kind=1,lines=blPara.lines[0:s],aH=availHeight,aW=availWidth)

> P1._JustifyLast = 1

> P1._splitpara = 1

> P1.height = height

> P1.width = availWidth

> if style.firstLineIndent != 0:

> style = deepcopy(style)

> style.firstLineIndent = 0

> P2=self.__class__(None,style,bulletText=None,frags=func(blPara,s,n))

######################

> for a in ('autoLeading', #possible attributes that might be directly on self.

> ):

> if hasattr(self,a):

> setattr(P1,a,getattr(self,a))

> setattr(P2,a,getattr(self,a))

######################

> return [P1,P2]


Can you see if that works for you?
--
Robin Becker


More information about the reportlab-users mailing list