python ReportLab

14738 단어 python3.6
python으로 PDF를 만들고 싶어 ReportLab을 사용했다.
컨디션
・Windows 10
・python 3.6.4
・reportlab 3.5.19

설치 방법

pip install ReportLab

PDF 작성

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, portrait
from reportlab.pdfbase import pdfmetrics
from reportlab.lib.units import mm
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.platypus import Table
from reportlab.platypus import TableStyle
from reportlab.lib import colors
import webbrowser

class BasePdfView:

    def __init__(self):
        self.file_name = 'HelloWorld.pdf'
        # PDF作成 ここではファイル名、サイズ(A4), 開始位置を指定
        self.c = canvas.Canvas(self.file_name, pagesize=portrait(A4), bottomup=False)

        # フォントサイズ
        self.font_size = 15

        # フォント登録 日本語を指定
        pdfmetrics.registerFont(UnicodeCIDFont('HeiseiMin-W3'))
        self.c.setFont('HeiseiMin-W3', 20)

PDF 쓰기


텍스트


그릴 좌표 지정하기
        width, height = A4  # A4用紙のサイズ
        self.c.drawCentredString(width / 2, height / 5, 'タイトル')

테이블


테이블을 만들려면 2D 목록을 준비하고 Table 작성
    def draw(self):
        data2 = [
            ["1", "2", "3", "4", "5"],
            ["11", "12", "13", "14", "15"],
            ["21", "22", "23", "24", "25"],
            ["row1", "row2", "row3", "row4", "row5"],
        ]
        table = Table(data2)

테이블 형식 작성
TableStyle을 사용하여 설정할 형식만 설정합니다.
아래의 소개 이외에 또 많은 것이 있다
        table_style = TableStyle([
            # テキストの色
            ('TEXTCOLOR', (0, 0), (-1, -1), colors.red),
            # 背景色
            ('BACKGROUND', (0, 0), (-1, -1), colors.azure),
            # 罫線 太さ0.25
            ('GRID', (0, 0), (-1, -1), 0.25, colors.grey),
            # 四角形 太さ0
            ('BOX', (0, 0), (-1, -1), 0, colors.black),
            # 文字の大きさ
            ("FONTSIZE", (0, 0), (-1, -1), 10),
            # 下方向のパディング
            ("BOTTOMPADDING", (0, 0), (-1, -1), 10),

        ])

        table.setStyle(
            table_style
        )

        # キャンバスに設定
        table.wrapOn(self.c, 20*mm, 20*mm)
        table.drawOn(self.c, 20*mm, 20*mm)

맨 위 색상만 변경


테이블 형식을 깨끗하게 하기 위해 머리에만 색상을 추가하는 경우
            # 背景色
            ('BACKGROUND', (0, 1), (-1, -2), colors.white),
            # 背景色 先頭
            ('BACKGROUND', (0, -1), (-1, -1), colors.azure),


테이블 색상 교체 수정


행당 설정 색상 변경
table_이후 스타일에 추가할 때dd를 사용할 수 있습니다.
추가할 때 하나씩 건네줘야 돼요.
    def set_colorful(self, table_style, data):
        """
        テーブルの色を交互に設定
        :param table_style:
        :param data:
        :return:
        """

        # サイズを取得
        row_size = len(data)

        for i in range(0, row_size - 1):
            tuple_range_from = (0, i)
            tuple_range_to = (-1, i)
            if i % 2 == 0:
                table_style.add('BACKGROUND', tuple_range_from, tuple_range_to, colors.green)
            else:
                table_style.add('BACKGROUND', tuple_range_from, tuple_range_to, colors.red)

        return table_style

마지막 출력 파일

        # Canvasに書き込み
        self.c.showPage()
        # ファイル保存
        self.c.save()

좋은 웹페이지 즐겨찾기