【问题标题】:Word wrap on report lab PDF table报告实验室 PDF 表上的自动换行
【发布时间】:2010-01-23 03:05:58
【问题描述】:

我正在使用 Table of Report Lab 库在 PDF 报告上打印表格。我想知道是否可以将表格配置为执行单元格内容的自动换行。

例如,我有一个文本不适合列内的单元格。我希望表格自动执行换行,调整单元格的内容以适应列宽。有可能吗?

【问题讨论】:

    标签: python reportlab


    【解决方案1】:

    您可以将任何可流动的元素放入表格元素中。将所有表格元素都设置为可流动对象可能是一种好习惯,因此它们的样式可以相同。对于您的情况,您很可能需要一个可流动的段落。例如。

    styles = getSampleStyleSheet()
    text = Paragraph("long line",
                  styles['Normal'])
    

    您可以将“文本”放入您提供给表格的数据中,它会自动换行。

    【讨论】:

    • 我现在对其进行测试,它确实有效,按单词包装。谢谢大佬!
    • 我在使用这个之后遇到了问题..如果数据更长并且需要第二行来适应,那么我的其他单元格数据现在也从第二行开始,这些单元格的第一行仍然是空的。你能帮忙吗?让我的其他单元格数据不转移到第二行开始
    【解决方案2】:

    我的解决方案,在字符串中强制换行:

    def __chopLine(line, maxline):
    
        cant = len(line) / maxline
        cant += 1
        strline = ""
        index = maxline
        for i in range(1,cant):
            index = maxline * i
            strline += "%s\n" %(line[(index-maxline):index])
        strline += "%s\n" %(line[index:])
        return strline
    

    【讨论】:

      【解决方案3】:

      *自动换行代码

      from reportlab.pdfgen import canvas
      from reportlab.lib.pagesizes import A4
      from reportlab.lib.styles import getSampleStyleSheet
      from reportlab.platypus import Paragraph, Table, TableStyle
      from reportlab.lib.enums import TA_JUSTIFY, TA_LEFT, TA_CENTER
      from reportlab.lib import colors
      
      # bodytext  style used for wrapping  data on flowables 
      styles = getSampleStyleSheet()
      styleN = styles["BodyText"]
      #used alignment if required
      styleN.alignment = TA_LEFT
      
      styleBH = styles["Normal"]
      styleBH.alignment = TA_CENTER
      
      
      hdescrpcion = Paragraph('''<b>descrpcion</b>''', styleBH)
      hpartida = Paragraph('''<b>partida</b>''', styleBH)
      
      
      descrpcion = Paragraph('long long long long long long long long long long long long long long long long long long long long line ', styleN)
      partida = Paragraph('1', styleN)
      
      data= [[hdescrpcion, hpartida],
             [partida ,descrpcion]]
      
      table = Table(data)
      
      table.setStyle(TableStyle([
                             ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
                             ('BOX', (0,0), (-1,-1), 0.25, colors.black),
                             ]))
      
      c = canvas.Canvas("a.pdf", pagesize=A4)
      table.wrapOn(c, 50, 50)
      table.drawOn(c, 100,600)
      c.save()
      

      【讨论】:

      • 欢迎来到 stackOverFlow。请提供一些关于代码的解释。并阅读FAQ
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2017-07-03
      • 1970-01-01
      相关资源
      最近更新 更多