25

私はテーブルを使用していますが、フロー可能なものの位置を制御するためにキャンバスに描画します。これは、pdf にテンプレートがあり、pyPDF とマージするためです。

ラップは表で行われますが、テキストは下ではなく上に移動します。それが私が望んでいることです。

cはキャンバスです

コード

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('$52.00', styles["right"])
precio_total = Paragraph('$6240.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

4

3 に答える 3

29

スタイル["Normal"]でラップすると、説明テキストが上がりました。スタイル["BodyText"]でテキストをラップすることができます。これにより、指定したセルの幅に従ってテキストを整列させることができます。HTML テキストの書式に似た書式を含めることもできます。

次に、TableStyle を使用して、テーブルのコンテンツを書式設定します。たとえば、テキストの色、段落の中央、行/列のスパンなどです。

上記のコードを作業バージョンに編集しました (例):

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import 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('$52.00', styleN)
precio_total = Paragraph('$6240.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()
于 2012-04-20T10:48:51.283 に答える
5

自動返信:

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))

トリックは「高さ-h」にあります。hはテーブルの高さであり、これはテーブルの内容によって異なります。

于 2011-01-20T18:52:20.540 に答える
0

Postscript のリファレンスが左下隅にあることはわかっています。PDFも同じだと思いますので、yの値から引いて下がります。関数の最初と最後の "y" 値を出力して、それらがどのように変化しているかを確認し、文の長さに応じて "y" 値を調整します。そして、関数はどのようにして「高さ」が何であるかを知るのですか? 私はReportLabを使用していますが、特定の例を投稿したい場合は、おそらく特定の例を参考にすることができます.

于 2011-01-18T19:40:53.693 に答える