1

Python/reportlab を使用して、ここに表示されているフォームを生成する必要があります。

http://www.flickr.com/photos/49740282@N06/4563137758/sizes/o/

私はこれを行うために、上部のヘッダー用にフロー可能なカスタムを作成し (ボックスが描画されている)、下のジュエリー テーブル用にフロー可能なテーブルを作成しようとしています。この例で JEWELRY テーブルとして示されているものは、複数のテーブルである可能性があります。描画されたヘッダーを「フロー」にするのに問題があります。描画されますが、テーブル データが下に表示されるのではなく、オーバーレイされます。

これは、reportlab を使用した最初のプロジェクトです。これを実際にデバッグする前に、私のアプローチがここで正しいかどうか、レポートラボの経験がある人から知りたいです。ありがとう!

4

3 に答える 3

0

ここでカスタムフロー可能の必要性はわかりません。

テーブル(およびテーブルスタイル)を使用して「ヘッダー」を実行できます。

派手な背景が必要な場合のもう 1 つの簡単な解決策は、画像 (JPG など) を描画し、その上に可変文字列を描画することです。

于 2010-06-29T15:47:46.697 に答える
0

flickrに表示されている特定のフォームにカスタマイズ可能なflowableを必要としないというdugresに同意します。Table と TableStyle を使用するだけで、仕事を遂行できます。

reportlab に深く入り込む前に考慮すべきことは、テーブルが長すぎて次のページに移動しないことです。次に、テーブルスタイルを手動で編集する必要があります。次のページの表の SPAN セルはエラーを返します。ただし、1 ページのソリューションの場合は、reportpdf が適切なオプションです。

ファンシーな出力、素敵なグラフィック効果。ダグレスが提案したことに従って行う必要があります。

テーブルの開発に関するキックスタート コードの場合:

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', styleBH)
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-23T07:00:26.190 に答える
-1

私は経験豊富なユーザーではないため、reportlab についてはお手伝いできません (いくつかの問題に夢中になった後、それを使用するというアイデアを残しました :))。ただし、他のツールを使用して python で pdf を生成することを検討している場合は、xhtml2pdf を参照てください。html に慣れている方はこちらの方が使いやすいかもしれません。ここでの考え方は単純です。提供した html を pdf ファイルに変換します。もちろん、何らかの方法で html コードを生成する必要があります (そのために django テンプレートを使用しています)。

于 2010-06-25T09:02:44.893 に答える