読者です 読者をやめる 読者になる 読者になる

pythonでReportLabを使ったPDFファイルの作り方〜その3〜

本日は罫線の描画などーー

f:id:else-something:20161108201146p:plain

表の描画

xlist = (50, 100, 150, 200, 250, 300)
ylist = (650, 675, 700, 725, 750, 775, 800)

retCanvas.grid(xlist, ylist)

色の変更

retCanvas.setStrikeColorCMYK(c, m, y, k)
retCanvas.setStrokeColorRGB(r, g, b)
retCanvas.setStrokeColor(acolor)

四角の描画

塗りつぶし色を赤に指定。そして、四角の描画

from reportlab.lib.colors import *
pdfFile.setFillColor(red)

# .rect(x,y,w,h,option)
retCanvas.rect(5*mm, 150*mm, 50*mm, 200*mm, fill=True)

線の描画

線の太さを変更。そして線の描画

retCanvas.setLineWidth(10)
# .line(始点x,始点y,終点x,終点y)
retCanvas.line(5*mm, 80*mm, 200, 750)

破線の間隔を指定。そして描画。

retCanvas.setDash([5, 10, 15])
retCanvas.line(50, 800, 200, 800)

そんなこって、なんか描いてみた

from reportlab.pdfgen import canvas
from reportlab.lib.colors import *
from reportlab.lib.units import mm

retCanvas = canvas.Canvas('./sample.pdf', bottomup=True)

xlist = (50, 100, 150, 200, 250, 300)
ylist = (650, 675, 700, 725, 750, 775, 800)

retCanvas.grid(xlist, ylist)

pdfFile.setFillColor(red)
retCanvas.rect(5*mm, lineHeight-30*mm, 50*mm, 2*mm, fill=True)


val_colors=['aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige', 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'cornflower', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'fidblue', 'fidlightblue', 'fidred', 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 'linen', 'magenta', 'maroon',  'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy', 'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple', 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'teal', 'thistle', 'tomato', 'transparent', 'turquoise', 'violet', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen']
for i, col in enumerate(val_colors):
    retCanvas.setStrokeColor(col)
    x=i+1
    retCanvas.line(5*mm, 60*mm+x*mm,150*mm,  60*mm+x*mm)


retCanvas.showPage()
retCanvas.save()

結果はこんな感じ。

f:id:else-something:20161108201146p:plain

大変参考になりました。

PythonのPDFライブラリ「ReportLab」の使い方(表描画、線・塗りつぶしの色、線の太さ、破線の指定) - Symfoware