//AdSenseにリンク

pdfテキストを指定したフォントでjpg内に記入するpythonコード

同じフォルダー内のPDFファイルからテキストを抽出し、そのテキストを同じフォルダー内のJPG画像に追加するPythonコードの例です。このコードはPyMuPDF(PDFからテキストを抽出するため)とPillow(画像にテキストを追加するため)を使用します。

必要なライブラリをインストール

pip install PyMuPDF Pillow

コード

import fitz  # PyMuPDF
from PIL import Image, ImageDraw, ImageFont
import os

def extract_text_from_pdf(pdf_path):
    doc = fitz.open(pdf_path)
    text = ''
    for page in doc:
        text += page.get_text()
    doc.close()
    return text

def add_text_to_image(image_path, text):
    image = Image.open(image_path)
    draw = ImageDraw.Draw(image)
    font = ImageFont.load_default()
    
    # テキストを追加する位置とその他の設定
    text_position = (10, 10)
    text_color = (255, 255, 255)  # 白色

    draw.text(text_position, text, font=font, fill=text_color)
    image.save(image_path)

def main():
    folder_path = '.'  # 現在のフォルダーを指定
    
    for file_name in os.listdir(folder_path):
        if file_name.endswith('.pdf'):
            pdf_path = os.path.join(folder_path, file_name)
            text = extract_text_from_pdf(pdf_path)
            
            for img_name in os.listdir(folder_path):
                if img_name.endswith('.jpg'):
                    image_path = os.path.join(folder_path, img_name)
                    add_text_to_image(image_path, text)
                    print(f'Text added to {image_path}')

if __name__ == "__main__":
    main()
  1. extract_text_from_pdf関数でPDFからテキストを抽出します。
  2. add_text_to_image関数でJPG画像にテキストを追加します。
  3. main関数でフォルダー内のPDFファイルを検索し、それらからテキストを抽出し、すべてのJPG画像にそのテキストを追加します。

コードの中のtext_positiontext_colorなどの設定は、お好みに合わせて調整してください。

カスタマイズ:指定したフォントファイルを使い日本語テキスト表示、文字サイズを3倍、新しい名前でjpgを作成するようにした修正したコード

IPAフォントのダウンロード

IPAフォントの公式サイトからIPAPGothicフォントをダウンロードします。具体的には、IPA PゴシックまたはIPA ゴシックをダウンロードします。

https://moji.or.jp/ipafont/ipa00303/

フォントファイルの配置

ダウンロードしたZIPファイルを解凍し、ipag.ttfファイルをスクリプトがあるディレクトリに配置します。(同じフォルダー内に格納する)

コード

import fitz  # PyMuPDF
from PIL import Image, ImageDraw, ImageFont
import os

def extract_text_from_pdf(pdf_path):
    doc = fitz.open(pdf_path)
    text = ''
    for page in doc:
        text += page.get_text()
    doc.close()
    return text

def add_text_to_image(image_path, text, font_path):
    image = Image.open(image_path)
    draw = ImageDraw.Draw(image)
    
    # フォントの設定
    font_size = 48  # フォントサイズを指定(適宜調整)
    font = ImageFont.truetype(font_path, font_size)
    
    # テキストの設定
    text_position = (10, 10)
    text_color = (255, 255, 255)  # 白色
    
    # テキストを追加
    draw.text(text_position, text, font=font, fill=text_color)
    
    # 新しい画像の名前を設定
    new_image_path = image_path.replace('.jpg', '_with_text.jpg')
    image.save(new_image_path)
    print(f'Text added to {new_image_path}')

def main():
    folder_path = '.'  # 現在のフォルダーを指定
    font_path = os.path.join(folder_path, 'ipag.ttf')  # フォントファイルのパスを指定
    
    for file_name in os.listdir(folder_path):
        if file_name.endswith('.pdf'):
            pdf_path = os.path.join(folder_path, file_name)
            text = extract_text_from_pdf(pdf_path)
            
            for img_name in os.listdir(folder_path):
                if img_name.endswith('.jpg'):
                    image_path = os.path.join(folder_path, img_name)
                    add_text_to_image(image_path, text, font_path)

if __name__ == "__main__":
    main()
  1. フォントファイルの指定ImageFont.truetypeを使用して、指定したipag.ttfフォントファイルを読み込みます。
  2. フォントサイズfont_sizeを48に設定し、文字サイズを3倍にしました(デフォルトサイズを16と仮定した場合)。
  3. 新しい画像ファイル名:テキストを追加した後、新しい画像ファイル名に_with_textを追加して保存します。

カスタマイズ:文字の色を蛍光のピンク色で上から120px下から文字の記入をスタート

import fitz  # PyMuPDF
from PIL import Image, ImageDraw, ImageFont
import os

def extract_text_from_pdf(pdf_path):
    doc = fitz.open(pdf_path)
    text = ''
    for page in doc:
        text += page.get_text()
    doc.close()
    return text

def add_text_to_image(image_path, text, font_path):
    image = Image.open(image_path)
    draw = ImageDraw.Draw(image)
    
    # フォントの設定
    font_size = 48  # フォントサイズを指定(適宜調整)
    font = ImageFont.truetype(font_path, font_size)
    
    # テキストの設定
    text_color = (255, 20, 147)  # 蛍光ピンク色
    top_margin = 120
    image_width, image_height = image.size
    text_position = (10, top_margin)
    
    # テキストを追加
    draw.text(text_position, text, font=font, fill=text_color)
    
    # 新しい画像の名前を設定
    new_image_path = image_path.replace('.jpg', '_with_text.jpg')
    image.save(new_image_path)
    print(f'Text added to {new_image_path}')

def main():
    folder_path = '.'  # 現在のフォルダーを指定
    font_path = os.path.join(folder_path, 'ipag.ttf')  # フォントファイルのパスを指定
    
    for file_name in os.listdir(folder_path):
        if file_name.endswith('.pdf'):
            pdf_path = os.path.join(folder_path, file_name)
            text = extract_text_from_pdf(pdf_path)
            
            for img_name in os.listdir(folder_path):
                if img_name.endswith('.jpg'):
                    image_path = os.path.join(folder_path, img_name)
                    add_text_to_image(image_path, text, font_path)

if __name__ == "__main__":
    main()

テキストの色text_colorを蛍光ピンクに設定しました(RGB値 (255, 20, 147))。
テキストの位置:画像の上端から120pxの位置にテキストが表示されるようにtop_marginを設定しました。文字の位置は (10, top_margin) で指定しています。