2013-02-18 127 views
2

我试图在简单的黑色条(带有来自页面的内容,因此做一个实际的标题是复杂的)的白色文本标题。问题是,该文本的背景似乎并不与文本缩放,如在我的MWI:Reportlab文本背景大小与字体大小不匹配

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

这看起来像我在ReportLab中的一个错误。您可能想要将其报告给开发人员。与此同时,解决方法可能是在所需大小和颜色的文本后面手动绘制一个框。当然,让它匹配文本的大小将会非常棘手,但您可以查看ReportLab源文件以获取有关如何执行此操作的想法。 – 2013-02-19 13:47:54

+0

感谢您的信息。我总是很难分辨,如果我对它不够了解,或者它是一个真正的bug。我喜欢自己画盒子,但我似乎无法访问画布,而不是在标题中。如果你知道我该怎么做... – DeltaG 2013-02-19 17:40:21

+0

你需要从文档中得到什么信息,这不能用头来完成?我想我有一个解决方案,但也许我不了解你的需求 – 2013-02-23 00:44:13

回答

0

首先,从你的代码,它不会编译,因为它给了错误。

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

我删除了这些导入,因为这里不需要。

背景大小不匹配的原因是因为您没有在段落中指定“前导”属性,所以您更改了“fontSize”,但未更改“前导”属性。

这是什么“领先”? 这是相邻文本行之间的间距;一个好的经验法则是使这个比点大小大20%。要获得双倍行距的文字,请使用高领先。

默认情况下,fontSize的设定为10和领先的,只要你设置你的fontSize的14定为12

所以在你上面的例子,但你的领导仍然在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编码。