Envelopper le texte dans un rapport de table?

j'utilise une table mais, je dessine dans une toile pour contrôler la position des flowables, ceci parce que j'ai un modèle dans un pdf, Un je fusionne avec pyPDF.

L'écharpe est faite dans un tableau, mais le texte aller vers le haut, pas vers le bas c'est ce que j'espère.

c est la toile

Code

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Paragraph, Table
from reportlab.lib.units cm

width, height = A4
styles = getSampleStyleSheet()

def coord(x, y, unit=1):
    x, y = x * unit, height -  y * unit
    return x, y

descrpcion = Paragraph('long paragraph', styles["Normal"])
partida = Paragraph('1', styles["Center"])
candidad = Paragraph('120', styles["Center"])
precio_unitario = Paragraph('.00', styles["right"])
precio_total = Paragraph('40.00', styles["right"])

data= [[partida, candidad, descrpcion, precio_unitario, precio_total]]
table = Table(data, colWidths=[2.05 * cm, 2.7 * cm, 9.6 * cm,
                               2.65 * cm, 2.7 * cm])

c = canvas.Canvas(PDF, pagesize=A4)
table.wrapOn(c, width, height)
table.drawOn(c, *coord(1.8, 9.6, cm))
c.save()

http://img600.imageshack.us/img600/3203/reportld.jpg

17
demandé sur Alquimista 2011-01-18 18:46:24

3 réponses

le texte de description est monté alors que vous l'enveloppez dans un style["Normal"] vous pouvez essayer d'envelopper votre texte dans un style["BodyText"] cela permettra à votre texte de s'aligner en fonction de la largeur de la cellule que vous spécifiez. Vous pouvez également inclure le formatage qui est similaire au formatage de texte HTML.

puis utilisez TableStyle pour formater le contenu dans la table, par exemple, Texte en couleur, paragraphe central, lignes d'envergure/colonnes et ainsi de suite.

j'ai modifié le code ci-dessus en un version (exemple):

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, cm
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

width, height = A4
styles = getSampleStyleSheet()
styleN = styles["BodyText"]
styleN.alignment = TA_LEFT
styleBH = styles["Normal"]
styleBH.alignment = TA_CENTER

def coord(x, y, unit=1):
    x, y = x * unit, height -  y * unit
    return x, y

# Headers
hdescrpcion = Paragraph('''<b>descrpcion</b>''', styleBH)
hpartida = Paragraph('''<b>partida</b>''', styleBH)
hcandidad = Paragraph('''<b>candidad</b>''', styleBH)
hprecio_unitario = Paragraph('''<b>precio_unitario</b>''', styleBH)
hprecio_total = Paragraph('''<b>precio_total</b>''', styleBH)

# Texts
descrpcion = Paragraph('long paragraph', styleN)
partida = Paragraph('1', styleN)
candidad = Paragraph('120', styleN)
precio_unitario = Paragraph('.00', styleN)
precio_total = Paragraph('40.00', styleN)

data= [[hdescrpcion, hcandidad,hcandidad, hprecio_unitario, hprecio_total],
       [partida, candidad, descrpcion, precio_unitario, precio_total]]

table = Table(data, colWidths=[2.05 * cm, 2.7 * cm, 5 * cm,
                               3* cm, 3 * cm])

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, width, height)
table.drawOn(c, *coord(1.8, 9.6, cm))
c.save()
19
répondu Nicholas TJ 2012-04-20 10:48:51

AutoReply:

def coord(x, y, height, unit=1):
    x, y = x * unit, height -  y * unit
    return x, y

w, h = table.wrap(width, height)
table.wrapOn(c, width, height)
table.drawOn(c, *coord(ml - 0.05, y + 4.6, height - h, cm))

le truc, c'est le "hauteur - h", h est la hauteur de la table, ce qui dépend du contenu de la table

3
répondu Alquimista 2011-01-20 18:52:20

je sais que la référence Postscript est le coin inférieur gauche. Je suppose que PDF est le MÊME, donc vous soustrayez de la valeur y pour descendre. Imprimez les valeurs de début et de fin "y" dans la fonction pour voir comment elles changent et ajustez la valeur "y" en fonction de la longueur de la phrase. Et comment la fonction sait-elle ce qu'est la "hauteur"? J'utilise ReportLab mais je pourrais probablement vous aider avec un exemple spécifique si vous voulez en poster un.

0
répondu Woooee 2011-01-18 19:57:35