challenge Hello, world! PDF版

Hello, world!シリーズの続編です。 「Hello, world!」となるべく大きく書かれた1ページのPDFを出力してください。

Posted feedbacks - Python

文字列の幅を取得する関数が、多分あるんだろうけど、見つけられなかったので
ダミーの書き込みにより取得しているところが、ちょっとばかり冗漫ですね。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from reportlab.pdfgen import canvas

c = canvas.Canvas('hello.pdf')
t = c.beginText()
t.setFont(t._fontname, 64)
t.setTextOrigin(0, 0)
t.textOut('Hello, World')
h = 64 / t.getX() * c._pagesize[1]
t.setFont(t._fontname, h)
c.setFontSize(h)
c.rotate(-90)
c.drawString(-c._pagesize[1], t._leading - h, 'Hello, World')
c.save()

他の人のコードを見たら、サイズ決め打ちでやってるようなので
同等の必要最小限版を投稿しておきます。
1
2
3
4
5
6
7
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

c = canvas.Canvas('hello.pdf', A4[::-1])
c.setFontSize(158.4)
c.drawString(0, 31.52, 'Hello, World')
c.save()

連続投稿で失礼します。

#2480は、まだ無駄なコードが多かったので、ブラッシュアップ版を
投稿させてください。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from reportlab.pdfgen import canvas

c = canvas.Canvas('hello.pdf')
t = c.beginText()
t.setFont(t._fontname, 64)
t.textOut('Hello, World')
c.setFont(c._fontname, 64 / t.getX() * c._pagesize[1])
c.rotate(-90)
c.drawString(-c._pagesize[1], c._leading - c._fontsize, 'Hello, World')
c.save()

Index

Feed

Other

Link

Pathtraq

loading...