Как использовать разрыв слов в ReportLab?

Я использую MWLIB и ReportLab для преобразования статей MediaWiki в PDF.

Я получил эту действительно длинную ссылку, которая по любой причине заставляет в предложении выше очень длинные пробелы между словами. Я думаю, что ссылка делает такое длинное слово, что она просто вытягивает предложение выше.

Смотрите картинку здесь: http://imageshack.us/photo/my-images/543/tzfo.png/

Есть ли в любом случае, чтобы заставить слово разрывать слова длиннее, чем определенный набор символов в ReportLab? Я думаю, что это исправит это.

PS; Вот некоторый код:

Метод def breakLinesCJK() в reportlab / para.py. Он использует метод wordSplit() из reportlab.lib.textsplit.py

def breakLinesCJK(self, width):
    """Initially, the dumbest possible wrapping algorithm.
    Cannot handle font variations."""

    if not isinstance(width,(list,tuple)): maxWidths = [width]
    else: maxWidths = width
    style = self.style
    self.height = 0

    #for bullets, work out width and ensure we wrap the right amount onto line one
    _handleBulletWidth(self.bulletText, style, maxWidths)
    frags = self.frags
    nFrags = len(frags)
    if nFrags==1 and not hasattr(frags[0],'cbDefn'):
        f = frags[0]
        if hasattr(self,'blPara') and getattr(self,'_splitpara',1):
            return f.clone(kind=0, lines=self.blPara.lines)
        #single frag case
        lines = []
        lineno = 0
        if hasattr(f,'text'):
            text = f.text
        else:
            text = ''.join(getattr(f,'words',[]))

        print "USE WORDSPLIT ELSE TREPORTLAB EXT = '',JOIN"

        from reportlab.lib.textsplit import wordSplit
        lines = wordSplit(text, maxWidths[20], f.fontName, f.fontSize)
        #the paragraph drawing routine assumes multiple frags per line, so we need an
        #extra list like this
        #  [space, [text]]
        #
        wrappedLines = [(sp, [line]) for (sp, line) in lines]
        return f.clone(kind=0, lines=wrappedLines, ascent=f.fontSize, descent=-0.2*f.fontSize)
    elif nFrags<=0:
        return ParaLines(kind=0, fontSize=style.fontSize, fontName=style.fontName,
                        textColor=style.textColor, lines=[],ascent=style.fontSize,descent=-0.2*style.fontSize)

    #general case nFrags>1 or special
    if hasattr(self,'blPara') and getattr(self,'_splitpara',0):
        return self.blPara
    autoLeading = getattr(self,'autoLeading',getattr(style,'autoLeading',''))
    calcBounds = autoLeading not in ('','off')
    return cjkFragSplit(frags, maxWidths, calcBounds)

Код в textplit.py также важен, но он слишком много копирует, но, как и в случае с абзацами, любой, у кого есть reportlab, должен иметь этот файл.

0 ответов

Другие вопросы по тегам