これは日々の作業を通して学んだことや毎日の生活で気づいたことをを記録しておく備忘録である。
HTML ファイル生成日時: 2026/08/10 20:19:44.797 (台灣標準時)
weasyprint を使うと、テキストファイルを簡単に PDF ファイルに変換するこ とができるようなので、試しにプログラムを書いてみたでござる。実際には、 HTML ファイルを用意して、それを PDF ファイルに変換するようでござる。
以下のようなコードを準備してみたでござる。
#!/usr/bin/env python3 # # Time-stamp: <2026/08/10 18:16:39 (UT+08:00) daisuke> # # importing argparse module import argparse # importing weasyprint module import weasyprint # main function def main (): # HTML header html_header = f""" <!DOCTYPE html> <html lang="___LANG___"> <head> <meta charset="UTF-8"> <style> @page {{ size: ___PAGESIZE___; margin: ___MARGIN___mm; }} body {{ font-family: '___FONTNAME___', ___FONTTYPE___; font-size: ___FONTSIZE___px; white-space: pre-line; word-break: break-all; /* 均等割付 */ text-align: justify; text-align-last: left; /* 禁則処理 */ line-break: strict; overflow-wrap: break-word; /* ハイフネーション */ hyphens: auto; }} </style> </head> <body> """ # HTML footer html_footer = f""" </body> </html> """ # initialising a parser descr = f'UTF-8 text file to PDF converter' parser = argparse.ArgumentParser (description=descr) # choices list_lang = [ 'en', \ 'ja', \ 'zh-TW', \ ] list_pagesize = [ 'A1', \ 'A2', \ 'A3', \ 'A4', \ 'A5', \ 'A6', \ ] list_font = [ 'Noto Sans', 'Noto Serif', \ 'Noto Sans CJK JP', 'Noto Serif CJK JP', \ 'Noto Sans TC', 'Noto Serif TC', \ ] # adding arguments parser.add_argument ('-i', '--input', default='input.txt', \ help='input text file (default: input.txt') parser.add_argument ('-o', '--output', default='output.pdf', \ help='output PDF file (default: output.pdf)') parser.add_argument ('-l', '--lang', default='ja', \ choices=list_lang, \ help='language (default: ja)') parser.add_argument ('-p', '--pagesize', default='A4', \ choices=list_pagesize, \ help='page size (default: A4)') parser.add_argument ('-m', '--margin', type=int, default=15, \ help='margin in mm (default: 15)') parser.add_argument ('-f', '--fontname', default='Noto Sans CJK JP', \ choices=list_font, \ help='font name (default: Noto Sans CJK JP)') parser.add_argument ('-s', '--fontsize', type=int, default=14, \ help='font size in pixel size (default: 14)') # parsing arguments args = parser.parse_args () # arguments file_text = args.input file_pdf = args.output lang_name = args.lang margin_mm = args.margin page_size = args.pagesize font_name = args.fontname font_size = args.fontsize # opening input file with open (file_text, 'r') as fh_in: # reading input file data_text = fh_in.read () # making HTML header html_header = html_header.replace ('___LANG___', lang_name) html_header = html_header.replace ('___MARGIN___', f'{margin_mm}') html_header = html_header.replace ('___PAGESIZE___', page_size) html_header = html_header.replace ('___FONTNAME___', font_name) html_header = html_header.replace ('___FONTSIZE___', f'{font_size}') if ('Sans' in font_name): html_header = html_header.replace ('___FONTTYPE___', 'sans-serif') elif ('Serif' in font_name): html_header = html_header.replace ('___FONTTYPE___', 'serif') # making HTML data_html = html_header + data_text + html_footer # making PDF file weasyprint.HTML (string=data_html).write_pdf (file_pdf) # execution of main function if (__name__ == '__main__'): main ()
例えば、以下のようにすれば、テキストファイルを PDF ファイルに変換して くれたでござる。
% text2pdf.py -h usage: text2pdf.py [-h] [-i INPUT] [-o OUTPUT] [-l {en,ja,zh-TW}] [-p {A1,A2,A3,A4,A5,A6}] [-m MARGIN] [-f {Noto Sans,Noto Serif,Noto Sans CJK JP,Noto Serif CJK JP,Noto Sans TC,Noto Serif TC}] [-s FONTSIZE] UTF-8 text file to PDF converter options: -h, --help show this help message and exit -i, --input INPUT input text file (default: input.txt -o, --output OUTPUT output PDF file (default: output.pdf) -l, --lang {en,ja,zh-TW} language (default: ja) -p, --pagesize {A1,A2,A3,A4,A5,A6} page size (default: A4) -m, --margin MARGIN margin in mm (default: 15) -f, --fontname {Noto Sans,Noto Serif,Noto Sans CJK JP,Noto Serif CJK JP,Noto Sans TC,Noto Serif TC} font name (default: Noto Sans CJK JP) -s, --fontsize FONTSIZE font size in pixel size (default: 14) % text2pdf.py -l ja -p A4 -m 20 -f 'Noto Serif CJK JP' -s 16 -i sample.txt -o sample.pdf