2013-02-18 157 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編碼。

相關問題