[reportlab]フォントのダンプ(失敗作)
オープンタイプのアウトラインフォント未対応を後から知る…
サンプルコード
行番号 | ソース |
---|---|
001 | #!/usr/bin/env python3 |
002 | # coding: utf-8 |
003 | import sys |
004 | from fontTools.ttLib import TTFont |
005 | from reportlab.pdfgen import canvas |
006 | from reportlab.lib.pagesizes import A4 |
007 | from reportlab.pdfbase import pdfmetrics |
008 | from reportlab.pdfbase.ttfonts import TTFont as ReportlabTTFont |
009 | |
010 | def dump_font_to_pdf(font_path, output_pdf): |
011 | # フォントファイルを読み込み |
012 | font = TTFont(font_path) |
013 | # cmapを取得 |
014 | cmap = font["cmap"].getBestCmap() |
015 | # フォント名を取得 |
016 | font_name = None |
017 | try: |
018 | font_name = font["name"].getName(1, 3, 1, 1033).toUnicode() |
019 | except AttributeError: |
020 | pass |
021 | |
022 | if not font_name: |
023 | try: |
024 | font_name = font["name"].getName(6, 1, 0, 0).toUnicode() |
025 | except AttributeError: |
026 | raise ValueError("フォント名を取得できませんでした。") |
027 | |
028 | print(f"Using font: {font_name}") |
029 | # フォントをreportlabに登録 |
030 | reportlab_font_name = "ReadFont" |
031 | pdfmetrics.registerFont(ReportlabTTFont(reportlab_font_name, font_path)) |
032 | |
033 | # PDF作成 |
034 | pdf_canvas = canvas.Canvas(output_pdf, pagesize=A4) |
035 | width, height = A4 |
036 | pdf_canvas.setFont("Helvetica", 12) |
037 | |
038 | # フォント名を描画 |
039 | pdf_canvas.drawString(50, height - 50, f"Font Dump: {font_name}") |
040 | |
041 | y = height - 80 |
042 | for index,(codepoint, glyph_name) in enumerate(sorted(cmap.items())): |
043 | char = chr(codepoint) |
044 | |
045 | pdf_canvas.setFont("Courier", 12) |
046 | pdf_canvas.drawString(50, y, f"U+{codepoint:04X} INDEX: {index}") |
047 | pdf_canvas.setFont("Courier", 12) |
048 | pdf_canvas.drawString(200, y, f" CID: {glyph_name}") |
049 | pdf_canvas.setFont(reportlab_font_name, 12) |
050 | pdf_canvas.drawString(420, y, f"{char}") |
051 | y -= 15 |
052 | |
053 | if y < 50: |
054 | pdf_canvas.showPage() |
055 | pdf_canvas.setFont("Courier", 12) |
056 | y = height - 50 |
057 | |
058 | pdf_canvas.save() |
059 | print(f"PDF saved as {output_pdf}") |
060 | |
061 | # |
062 | argGetData = sys.argv |
063 | font_path = str(argGetData[1]) |
064 | output_pdf = str(argGetData[2]) |
065 | #テスト用 |
066 | # font_path = "/path/to/font/file.ttf" |
067 | # output_pdf = "/Path/to/save/pfg/file.pdf" |
068 | dump_font_to_pdf(font_path, output_pdf) |
069 | |
AppleScriptで生成しました |
| 固定リンク
「Fonts Python」カテゴリの記事
- [Font]OSにインストールしていないフォントのイメージ描画(日本語フォント向き 文字入力)(2024.12.16)
- [Font]OSにインストールしていないフォントのイメージ描画(カタカナ)(2024.12.16)
- [Font]OSにインストールしていないフォントのイメージ描画(ひらがな)(2024.12.16)
- [Font]OSにインストールしていないフォントのイメージ描画(英数)(2024.12.16)
- [python3]フォントのグリフIDを取得する(2024.11.28)