Created
December 8, 2020 16:20
-
-
Save TakamiChie/ca0a882fd173de612180d8f723bba3aa to your computer and use it in GitHub Desktop.
任意のページサイズ、ページ数のPDFファイルを作成する。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ReportLab, PyPDF2, TQDMは事前にpipでインストールしておいてください。 | |
import random | |
import sys | |
import os | |
from pathlib import Path | |
from argparse import ArgumentParser | |
from tqdm import tqdm | |
from PyPDF2 import PdfFileReader, PdfFileWriter | |
from reportlab.pdfgen import canvas | |
from reportlab.pdfbase import pdfmetrics | |
from reportlab.pdfbase.ttfonts import TTFont | |
import reportlab.lib.pagesizes | |
YU_GOTHIC = Path(filter(lambda n: (Path(n) / "Fonts" / "YuGothB.ttc").exists(), os.environ.get("PATH").split(";")).__next__()) / "Fonts" / "YuGothB.ttc" | |
WORKDIR = Path(__file__).parent | |
OUTDIR = WORKDIR | |
argp = ArgumentParser() | |
argp.add_argument("--pages", type=int, default=100, help="ページ数を指定する。省略時100") | |
argp.add_argument("--size", type=str, default="A4", help="ページサイズを文字列で指定する。省略時A4") | |
argp.add_argument("--output", type=str, default="testpdf", help="ファイル名。省略時「testpdf」") | |
args = argp.parse_args() | |
size = getattr(reportlab.lib.pagesizes, args.size) | |
p = PathManager() | |
# テキストの書かれたPDFを作る | |
c = canvas.Canvas(str(WORKDIR / "base.pdf"), pagesize=size) | |
pdfmetrics.registerFont(TTFont("YU", YU_GOTHIC)) | |
for l in range(4): | |
for i in range(10): | |
xr = i / size[0] * 10000 | |
yr = i / size[1] * 10000 | |
r = 1 - i / 11 if l == 0 or l == 1 else 0 | |
g = 1 - i / 11 if l == 0 or l == 2 else 0 | |
b = 1 - i / 11 if l == 0 or l == 3 else 0 | |
c.setStrokeColorRGB(r, g, b) | |
c.rect(xr, yr, size[0] - (xr * 2), size[1] - (yr * 2)) | |
t = "Monochrome" if l == 0 else "Color" | |
c.setFont('YU', 20) | |
c.drawString(12, 12, f"This is {args.size} page {t}.") | |
c.drawString(12, size[1] - 50, f"This is {args.size} page {t}.") | |
c.showPage() | |
c.save() | |
with open(WORKDIR / "base.pdf", mode="rb") as rb: | |
reader = PdfFileReader(rb) | |
writer = PdfFileWriter() | |
for i in tqdm(range(args.pages), f"{args.output}.pdf"): | |
page = writer.addBlankPage(size[0], size[1]) | |
page.mergePage(reader.getPage(random.randrange(0, 3))) | |
with open(OUTDIR / f"{args.output}.pdf", mode="wb") as wb: | |
writer.write(wb) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment