web-dev-qa-db-ja.com

reportlab.pdfgenのテキスト/フォントの色を変更する方法

自動生成されたPDFで別の色のテキストを使用したい。

reportlab docs によると、私がする必要があるのは次のとおりです:

self.canvas.setFillColorRGB(255,0,0)
self.canvas.drawCentredString(...)

しかし、それは何もしません。テキストは何があっても黒です。

20
Goro

ユーザーガイドのセクション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()
28
Nicholas TJ
from reportlab.lib.colors import HexColor
...

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

...
12
SergO

現時点ではこれを確認できませんが、リンクされた例を見ると、drawCenteredStringを呼び出す前に色を設定するたびに、常にsetFillColorで行い、setFillColorRGBではありません。 、長方形の色を設定するために後者のみを使用します。代わりにに変更してみてください

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

そのドキュメントでこれが示されているかどうかはわかりませんが、変数redはReportLabモジュールの1つで定数として定義されているため、エラーが発生した場合は、適切なモジュール(正確な名前は今のところ私をエスケープしています)。

0