« URLをWEBLOCファイルにする(簡易版) | トップページ | [NSISIconImageRep]ファイルのアイコンをicnsファイルにする »

[reportlab]フォントのダンプ(失敗作)

オープンタイプのアウトラインフォント未対応を後から知る…

ダウンロード - fontdumppyttf.zip




サンプルコード

サンプルソース(参考)
行番号ソース
001#!/usr/bin/env python3
002# coding: utf-8
003import sys
004from fontTools.ttLib import TTFont
005from reportlab.pdfgen import canvas
006from reportlab.lib.pagesizes import A4
007from reportlab.pdfbase import pdfmetrics
008from reportlab.pdfbase.ttfonts import TTFont as ReportlabTTFont
009
010def 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#
062argGetData = sys.argv
063font_path = str(argGetData[1])
064output_pdf = str(argGetData[2])
065#テスト用
066#   font_path = "/path/to/font/file.ttf"
067#   output_pdf = "/Path/to/save/pfg/file.pdf"
068dump_font_to_pdf(font_path, output_pdf)
069
AppleScriptで生成しました

|

« URLをWEBLOCファイルにする(簡易版) | トップページ | [NSISIconImageRep]ファイルのアイコンをicnsファイルにする »

Fonts Python」カテゴリの記事