ReportLabReportLabでpdfに表を描いてみたところ、悩んだところがあったため、メモを残しておきます。Guide」のp77〜にも記載があります。今回使うReportLabの実装は、基本的な形は以下となります。必要に応じてこのクラスを継承、_draw()メソッドをオーバーライドして各表を描きます。注意点として、デフォルトと異なり、pdfの原点を左上(bottomup=False)にしてあります。複数行:2次元配列としてデータを用意とします。以下の場合、3列3行の表のデータとなります。'行3-列3-*********-*********'],]上記のデータを使って表を描いてみます。doc.save()結果は以下の通りです。bottomup=Falseなので、原点は左上になります。indexの降順で、表の上から下に並びます。ちなみに、bottomup=Trueにした場合、原点は左下となり、こんな感じになります。indexの昇順で、表の上から下に並びます。上の例では、表のセルの高さや幅は自動計算で設定されました。任意の位置にあるセルの高さや幅を指定したい場合は、Tableオブジェクトを生成する際にrowHeights(行の高さ)やcolWidths(列の幅)を使います。列・行ごとに設定したい場合はタプルで長さを渡し、全て一律で設定したい場合は単一値を指定します。rowHeights=10*mm)と書くと、結果は以下となります。左の列のみ色を塗るここまでは表のセル全体に関する設定でしたので、次はセルごとの設定を行います。ReportLabでは、セルごとの設定はTableStyleを使います。行)のタプルで表現します。列と行のindexは0から始まります。4)をそれぞれ指定します。行)のindexにはマイナス値も設定することができます。Pythonのindexのマイナス値と同じ考え方ですので、-1は最後、-2は最後から2番目となります。colors.lightpink),]))のように指定します。colors.lightpink),]))とすると、となります。colors.lightpink),]))とすると、となります。Commandsを使って罫線を引きます。Commandsにはいくつかの種類がありますので、それぞれ試してみます。Commandsの形式は以下の通りです。線の色),]))セルの左側に罫線を引くLINEBEFOREを使います。colors.black),]))セルの右側に罫線を引くLINEAFTERを使います。(bottomupの影響あり)LINEABOVEを使います。colors.black),]))なお、今回の場合、bottomup=Falseと原点を左上にしていますので、セルの下側に罫線があります。(bottomupの影響あり)LINEBELOWを使います。colors.black),]))なお、こちらもbottomup=Falseの影響を受け、セルの上側に罫線があります。セルの外枠に罫線を引くBOXを使います。colors.black),]))もしくは、OUTLINEでも同じ結果になります。colors.black),]))セルの内側に格子状の罫線を引くINNERGRIDを使います。今までの例と異なり、分かりやすくするためにセルの範囲を中央にしてあります。colors.black),]))セルのすべてに罫線を引くGRIDを使います。こちらも、分かりやすくするためにセルの範囲を中央にしてあります。colors.black),]))セルを結合するSPANを使います。下記の例は、2列2行目から4列4行目までをSAPNで結合2列2行目から3列3行目までの背景色をlightpinkとしています。SAPNで結合した部分にあるデータは、最初のセルを除いて削除されることに注意します。colors.lightpink),]))ソースコードGitHubに上げてあります。table_styleアプリが今回のアプリです。FrameworkとSelenium2Libraryを使ってみました。ReportLabをHerokuで動かしてpdfを表示する最近、Pythonでpdfを作成する機会がありました。(19)リンクGitHubSpeakerDeckはてなブログをはじめよう!thinkAmiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。