def drawTextPages(self, pages, margin=1.0, fontsize=10, leading=10, spacer=0.05): s = getSampleStyleSheet()['BodyText'] s.fontName = self.font_mapping['Monospaced'] s.alignment = TA_LEFT textHorizontalMargin = margin * cm textVerticalMargin = margin * cm textBoxWidth = self.options.paperwidth - 2 * textHorizontalMargin textBoxHeight = self.options.paperheight - 2 * textVerticalMargin minSpacerHeight = 0.05 * cm for page in pages: s.fontsize = fontsize s.leading = leading spacerHeight = spacer * cm text = re.split("\n", page) while True: paragraphs = [] # this accounts for the spacers we insert between paragraphs h = (len(text) - 1) * spacerHeight for line in text: p = XPreformatted(line, s) h += p.wrap(textBoxWidth, textBoxHeight)[1] paragraphs.append(p) if h <= textBoxHeight or s.fontSize <= 1 or s.leading <= 1: break else: s.fontSize -= 0.2 s.leading -= 0.2 spacerHeight = max(spacerHeight - 1, minSpacerHeight) h = self.options.paperheight - textVerticalMargin for p in paragraphs: h -= p.height p.drawOn(self.canvas, textHorizontalMargin, h) h -= spacerHeight self.canvas.showPage()