2013-02-18 9 views
2

간단한 검정색 막대에 흰색 텍스트가있는 머리글을 사용하려고합니다 (페이지의 내용과 함께 실제 머리글을 사용하는 것은 복잡합니다). 이 오류를 주면서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 소스에서 어떻게해야하는지 아이디어를 얻을 수 있습니다. –

+0

정보를 제공해 주셔서 감사합니다. 내가 그것에 대해 충분히 알지 못했는지 또는 그것이 진정한 버그인지는 알기가 항상 어렵습니다. 나는 박스를 직접 그리는 것을 좋아하지 만 헤더에는없는 동안 캔버스에 액세스 할 수없는 것처럼 보입니다. 내가 어떻게 그 일을 할 수 있는지 안다면 ... – DeltaG

+0

문서에서 헤더로 할 수없는 정보는 무엇이 필요합니까? 나는 해결책이 있다고 생각하지만, 아마도 당신의 필요를 이해하지 못하고 있습니다. –

답변

0

첫째, 당신의 코드에서, 그것은 컴파일되지 않습니다 : 문제는 텍스트의 배경 내 MWI에서 볼 수 있듯이, 텍스트와 확장하지 않는 것이다.

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

여기에는 가져 오기가 필요하지 않으므로 가져 오기가 제거되었습니다.

배경 크기가 일치하지 않는 이유는 단락에서 "leading"속성을 지정하지 않았기 때문에 "fontSize"를 변경했지만 "leading"속성을 변경하지 않았기 때문입니다.

"선두"란 무엇입니까? 인접한 텍스트 줄 사이의 간격입니다. 엄지 손가락의 좋은 규칙은 20 %를 포인트 크기보다 크게 만드는 것입니다. 이중으로 간격을 두어 텍스트를 가져 오려면 높은 행간을 사용하십시오. 기본적으로

은 fontSize는 10로 설정하고 선도가 바로 14에 fontSize는 설정으로, 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 코딩.

관련 문제