2017-01-30 1 views
0

저는 python 애호가이자 reportlab newbie입니다. ("에 오신 것을 환영합니다 Reportlab을!"10,100)위치 10,100에 python Reportlab 테이블을 배치하고 drawString을 사용하는 방법

을 c.drawString 그러나 나는를 배치하는 방법을 알아낼 수 없습니다 :
나는 페이지, 예를 들면에 특정 장소에서 텍스트를 넣어하면서 drawString을 사용하는 방법을 알고 테이블을 c.drawString (10,100, "Welcome to Reportlab!")과 같은 위치에서 시작하도록 테이블 (길이가 몇 줄 밖에되지 않을 것입니다.)을 사용합니다. 여기에 테이블을 두는 방법을 배우면 다른 곳에 배치 할 것입니다 대신.

동일한 스크립트에서 drawString을 사용하는 방법을 알아낼 수 없습니다. 왜냐하면 캔버스를 사용하는 것이 drawString 기능을 사용하는 방법을 알고있는 유일한 방법이기 때문입니다. 내 4 줄의 캔버스 코드 (이 단락을 따라)는 캔버스/파일을 닫고 PDF를 작성합니다. 테이블 코드 (아래)는 파일을 닫고 PDF를 작성하고 drawString 조작에 사용하는 캔버스를 닫으려면 "doc.build (elements)"행을 사용하는 방법을 보지 못합니다.

c = canvas.Canvas(r"e:\hellonu.pdf", pagesize=letter) 
c.setFont("Courier", 9) #choose your font type and font size 
c.drawString(10,60,"Welcome to Reportlab!") 
c.save() 

난 당신이 나에게 (1)가 10,100에서 시작되도록 테이블을 배치하고, (2) 방법 같은 스크립트에 대해서 drawString을 사용하는 방법에 대한 줄 수있는 지침을 부탁드립니다. 내 코드 중 일부가 유용하지 않다면, 의도적으로 거기에 넣었다고 가정하지 마십시오. 나는 테이블에서 단어 랩 기능을 사용할 수 있도록 예제에서 충분히 복사하려고 시도했다.

가 여기에 내가 함께 연주 된 코드입니다 : 최근

# http://zewaren.net/site/node/139 
from reportlab.lib import colors 
from reportlab.lib.pagesizes import LETTER, inch, portrait 
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph 
from reportlab.lib.styles import getSampleStyleSheet 


doc = SimpleDocTemplate(r"e:\test_report_lab.pdf", pagesize=LETTER, rightMargin=30,leftMargin=30, topMargin=30,bottomMargin=18) 
doc.pagesize = portrait(LETTER) 
elements = [] 


data = [ 
["Directory"], 
["AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA "], 
] 


style = TableStyle([('ALIGN',(1,1),(-2,-2),'RIGHT'), 
         ('TEXTCOLOR',(1,1),(-2,-2),colors.red), 
         ('VALIGN',(0,0),(0,-1),'TOP'), 
         ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), 
         ('BOX', (0,0), (-1,-1), 0.25, colors.black), 
         ]) 

#Configure style and word wrap 
s = getSampleStyleSheet() 
s = s["BodyText"] 
s.wordWrap = 'CJK' 
data2 = [[Paragraph(cell, s) for cell in row] for row in data] 
t=Table(data2) 
t.setStyle(style) 


#Send the data and build the file 
elements.append(t) 
doc.build(elements) 

답변

1

, 저도 같은 문제를 우연히 발견했다. 여기서 문제는 reportlab에서 테이블이 "flowables"라고 불리는 반면 drawString 명령은 "fixed"입니다.

Mike Driscoll : "Reportlab: Mixing Fixed Content and Flowables"이 작성한 위대한 튜토리얼 덕분에 해결책을 찾았습니다.

from reportlab.lib.pagesizes import A4 
from reportlab.lib.styles import getSampleStyleSheet 
from reportlab.lib.units import mm 
from reportlab.pdfgen import canvas 
from reportlab.platypus import Image, Paragraph, Table 
from reportlab.lib import colors 

c = canvas.Canvas('example.pdf', pagesize=A4) # alternatively use bottomup=False 
width, height = A4 

data = [[1, 2, 3], [2, 1, 3], [3, 2, 1]] 

table = Table(data, colWidths=10*mm) 
table.setStyle([("VALIGN", (0,0), (-1,-1), "MIDDLE"), 
       ("ALIGN", (0,0), (-1,-1), "CENTER"), 
       ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black)]) 

table.wrapOn(c, width, height) 
table.drawOn(c, 0*mm, 5*mm) 

styles = getSampleStyleSheet()  
ptext = "This is an example." 
p = Paragraph(ptext, style=styles["Normal"]) 
p.wrapOn(c, 50*mm, 50*mm) # size of 'textbox' for linebreaks etc. 
p.drawOn(c, 0*mm, 0*mm) # position of text/where to draw 

c.save() 

나는 또한 나를 reportlab에 빨리 익숙해 질 수있는 마이크 드리스콜에 의해 두 개 더 자습서를 추천 할 수 있습니다 : 여기

는 작업 조각을 구성하는 slighty를 적용 버전입니다.

고마워요, 마이크!

관련 문제