画像ファイルからPDFの生成

タグ:

かなり決め打ち動作ですが、PDFを作成する事があったので書きました。

動作自体は、./srcフォルダにあるPDFまたはPNGファイルを読み込み、./dstフォルダにPDF変換出力しつつ、読み込んだ画像を単一のPDFファイルとして出力します。

import argparse
import os

import PIL
import PIL.Image
import PyPDF2
from psd_tools import PSDImage


def main():

    o_parser = argparse.ArgumentParser()
    o_parser.add_argument(
        "-o", "--output", dest="FILENAME", type=str, default="export.pdf"
    )
    o_parser.add_argument("-H", "--height", dest="HEIGHT", type=int, default=1024)
    o_parser.add_argument("-Q", "--quality", dest="QUALITY", type=int, default=60)

    o_args = o_parser.parse_args()

    list_pdfpathname = []

    for dirname, _, list_filename in os.walk("./src"):
        for filename in list_filename:

            print(filename)

            basename, ext = os.path.splitext(filename)

            if filename.startswith(".") is True:
                continue

            if ext.lower() in (".psd"):
                o_psd = PSDImage.open(os.path.join(dirname, filename))
                image = o_psd.composite()
            elif ext.lower() in (".png"):
                image = PIL.Image.open(os.path.join(dirname, filename))
            else:
                continue

            width = image.width * (o_args.HEIGHT / image.height)

            print(
                "{} : {}x{} > {}x{}".format(
                    filename, image.width, image.height, int(width), o_args.HEIGHT
                )
            )

            # image = image.resize((int(width), o_args.HEIGHT))
            dst_pathname = os.path.join("./dst/", basename + "00.pdf")
            image.save(dst_pathname, quality=o_args.QUALITY)

            list_pdfpathname.append(dst_pathname)

    list_pdfpathname.sort()

    o_pdf_merge = PyPDF2.PdfFileMerger()
    for pathname in list_pdfpathname:
        o_pdf_merge.append(pathname)

    o_pdf_merge.write(o_args.FILENAME)
    o_pdf_merge.close()


if __name__ == "__main__":
    main()