MWLIB と ReportLab を使用して、MediaWiki の記事を PDF に変換しています。
何らかの理由で上記の文の単語間に非常に長いスペースがある原因となる、この非常に長いリンクを取得しました。リンクは非常に長い単語になり、上記の文を引き出すだけだと思います.
こちらの写真をご覧ください: http://imageshack.us/photo/my-images/543/tzfo.png/
ReportLab で特定の文字セットよりも長い単語に対して単語分割を強制する方法はありますか? それで直ると思います。
PS; ここにいくつかのコードがあります:
reportlab/paragraph.py のメソッド def breakLinesCJK()。reportlab.lib.textsplit.py の wordSplit() メソッドを使用します。
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 を使用する人は誰でもこのファイルを持っている必要があります。