2

シンプルな黒いバーに白いテキストのヘッダーを作成しようとしています (ページのコンテンツがあるため、実際のヘッダーを作成するのは非常に複雑です)。問題は、私の MWI に見られるように、テキストの背景がテキストに合わせてスケーリングされていないように見えることです。

from reportlab.lib import colors
from reportlab.lib.enums import TA_JUSTIFY, TA_RIGHT, TA_CENTER, TA_LEFT
from reportlab.lib.pagesizes import letter, landscape
from reportlab.platypus import PageTemplate, Frame, NextPageTemplate, BaseDocTemplate, SimpleDocTemplate, Paragraph, Spacer, Image, Table, TableStyle, PageBreak
from reportlab.platypus import ListFlowable, ListItem
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import inch
from reportlab.rl_config import defaultPageSize
from reportlab.pdfbase.pdfmetrics import stringWidth
from reportlab.pdfgen import canvas

#c = canvas.Canvas("tables.pdf")
doc = SimpleDocTemplate("mwi.pdf",pagesize=letter,
                        rightMargin=72,leftMargin=72,
                        topMargin=72,bottomMargin=60)

styles=getSampleStyleSheet()
styles.add(ParagraphStyle(name='Table Top Black Back', fontName ='Helvetica',fontSize=14, backColor = colors.black, textColor=colors.white, alignment=TA_LEFT))
styles.add(ParagraphStyle(name='Table Top Red Back', fontName ='Helvetica',fontSize=9, backColor = colors.red, textColor=colors.black, alignment=TA_LEFT))

styleN = styles["BodyText"]

# Header
# report: topic/subtopic overview
report = []
ptext = 'Test' 
report.append(Paragraph(ptext, styles["Table Top Black Back"]))
report.append(Spacer(1, 24))

ptext = 'Test' 
report.append(Paragraph(ptext, styles["Table Top Black Back"]))
report.append(Spacer(1, 24))

ptext = 'Test' 
report.append(Paragraph(ptext, styles["Table Top Red Back"]))
report.append(Spacer(1, 48))


# Build Document
doc.build(report)
4

1 に答える 1

-1

まず、コードから、エラーが発生したためコンパイルされません。

ImportError: cannot import name ListFlowable
ImportError: cannot import name ListItem

ここでは必要ないため、これらのインポートを削除しました。

背景サイズが一致しない理由は、段落で「leading」属性を指定しなかったためです。「fontSize」を変更しましたが、「leading」属性は変更していません。

この「先導」とは?これは、隣接するテキスト行の間隔です。経験則として、これをポイント サイズより 20% 大きくすることをお勧めします。ダブルスペースのテキストを取得するには、ハイ リーディングを使用します。

デフォルトでは、fontSize は 10 に設定され、リーディングは 12 に設定されています。

したがって、上記の例では、fontSize を 14 に設定するとすぐに、行間はまだ 12 の値のままです。これが、テキストのサイズが適切でない理由です。

これに対する解決策は、上記の例でわずかに大きいリードを定義することです。

これはバグではなく、最適な設計上の考慮事項ではありません。これは非常に主観的なトピックであり、reportlab-developer のその時点で何が起こっているのかわかりません。

from reportlab.lib import colors
from reportlab.lib.enums import TA_JUSTIFY, TA_RIGHT, TA_CENTER, TA_LEFT
from reportlab.lib.pagesizes import letter, landscape
from reportlab.platypus import PageTemplate, Frame, NextPageTemplate, BaseDocTemplate, SimpleDocTemplate, Paragraph, Spacer, Image, Table, TableStyle, PageBreak
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import inch
from reportlab.rl_config import defaultPageSize
from reportlab.pdfbase.pdfmetrics import stringWidth
from reportlab.pdfgen import canvas

#c = canvas.Canvas("tables.pdf")
doc = SimpleDocTemplate("mwi.pdf",pagesize=letter,
                    rightMargin=72,leftMargin=72,
                    topMargin=72,bottomMargin=60)

styles=getSampleStyleSheet()
styles.add(ParagraphStyle(name='Table Top Black Back', fontName ='Helvetica',fontSize=14, leading=16,backColor = colors.black, textColor=colors.white, alignment=TA_LEFT))
styles.add(ParagraphStyle(name='Table Top Red Back', fontName ='Helvetica',fontSize=9, leading=12, backColor = colors.red, textColor=colors.black, alignment=TA_LEFT))

styleN = styles["BodyText"]

# Header
# report: topic/subtopic overview
report = []
ptext = 'Test' 
report.append(Paragraph(ptext, styles["Table Top Black Back"]))
report.append(Spacer(1, 24))

ptext = 'Test' 
report.append(Paragraph(ptext, styles["Table Top Black Back"]))
report.append(Spacer(1, 24))

ptext = 'Test' 
report.append(Paragraph(ptext, styles["Table Top Red Back"]))
report.append(Spacer(1, 48))

# Build Document
doc.build(report)

お役に立てれば。reportlab のコーディングをお楽しみください。

于 2013-03-14T08:32:03.740 に答える