2012-03-24 4 views

답변

16

사용자 가이드 섹션 2에서 코드를 복사하여 붙여 넣으면 색이 지정된 텍스트가있는 화려한 색의 사각형이 나타납니다. 아마 접근법은 사용자 가이드에서 분명하지 않다. 나는 그걸 가지고 노는 시간을 보냈고 마침내 그것이 어떻게 작동 하는지를 알았다.

캔버스를 그리는 상상을해야합니다. 그리기 전에 모든 설정을 수행해야합니다. 다음은 텍스트 스타일, 선 그리기 및 사각형 그리기 방법을 더 잘 보여줄 준비가 된 예입니다.이 모든 방법에 색을 칠하는 기능이 있습니다.

from reportlab.pdfgen import canvas 

def hello(c): 
    from reportlab.lib.units import inch 

    #First Example 
    c.setFillColorRGB(1,0,0) #choose your font colour 
    c.setFont("Helvetica", 30) #choose your font type and font size 
    c.drawString(100,100,"Hello World") # write your text 

    #Second Example 
    c.setStrokeColorRGB(0,1,0.3) #choose your line color 
    c.line(2,2,2*inch,2*inch) 

    #Third Example 
    c.setFillColorRGB(1,1,0) #choose fill colour 
    c.rect(4*inch,4*inch,2*inch,3*inch, fill=1) #draw rectangle 

c = canvas.Canvas("hello.pdf") 

hello(c) 
c.showPage() 
c.save() 
+7

내가 말할 수있는 것부터 256 색 공간을 사용하면 작동하지 않습니다. 설명서에 1을 사용하면 '전체 표시 등'으로 표시됩니다. 그래서 256,256,256을 만들기 위해서는 실제로 (1,1,1)을 사용합니다. 따라서 사이에 무언가를 얻으려면 십진법을 사용해야합니다. 나에게는 RGB : (75,116,156)이 필요했기 때문에'setFillColorRGB (0.29296875,0.453125,0.609375)'라고 써야했다. 그것은 '75/256, 116/256, 156/256'에 해당합니다. 우스꽝스러운 약간의 IMO. 그러나 그것은 완전하게 나왔다. – Garfonzo

+0

좋은 정보 :) havent는이 색 재료들로 충분히 깊이 들어가고, 나의 미래의 일에 유용 할 것 같다. –

+0

이것은 실제로 작동합니다! 하지만 몇 가지 다른 색상을 설정하면 텍스트가 투명하게 보입니다. – gbrennon

0

현재로서는 이것을 확인할 수 없지만 drawCenteredString을 호출하기 전에 색상을 설정할 때마다 링크 된 예제를 보면 setFillColor으로 항상 숫자를 지정하고 setFillColorRGB으로 표시하지 않으며 나중에 rects의 색상을 설정하는 데에만 사용합니다 . 당신이 오류가있는 경우에, 그래서 이렇게 시도 대신에, 그것은 그 문서에이 말한다 아닌지 모르겠어요,하지만 변수 red가 ReportLab 모듈 중 하나에 상수로 정의된다

self.canvas.setFillColor(red) 
self.canvas.drawCenteredString(...) 

로 변경 그걸로, 적절한 모듈을 포함 시키십시오. 정확한 이름은 지금 저를 도망칩니다.

+0

setFillColor()는 하나의 텍스트 아무것도하지 않습니다. – Goro

+0

그러면 예제가 잘못되었다고 생각합니다. 문서를 보면, 사용자 가이드 섹션 2.11에서는 이런 방식으로 텍스트 색상을 설정하는 예제를 제공합니다. 텍스트 이외의 색상을 설정할 수 있습니까? 그렇지 않다면 아마도 색상을 출력하지 않는 것이 더 일반적인 문제 일 것입니다. –

8
from reportlab.lib.colors import HexColor 
... 

# sets fill color like orange 
c.setFillColor(HexColor(0xff8100)) 
# or 
c.setFillColor(HexColor('#ff8100')) 

... 
관련 문제