👋
【python】日本語の文章をPDFファイルにし、Blob Storageに保存する
そもそも
日本語の文章をPDFファイルにし、Blobに保存する機会がありました。
文字化けやBlobにアップロードできなかったりと、四苦八苦しました。
同じことで苦労している方がいるかもしれないので、まとめます。
参考記事
バージョン
- python:3.11.9
- azure-storage-blob:12.22.0
- reportlab:4.2.2
ライブラリーをinstall
pip install azure-storage-blob reportlab
code
main.py
import logging
from azure.storage.blob import BlobServiceClient
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.lib.units import mm
from reportlab.lib.pagesizes import A4
from io import BytesIO
# ログ設定
logging.basicConfig(level=logging.INFO)
def create_pdf(content: str) -> BytesIO:
"""PDFを生成し、BytesIOオブジェクトとして返す"""
pdfmetrics.registerFont(UnicodeCIDFont("HeiseiKakuGo-W5"))
buffer = BytesIO()
pdf = canvas.Canvas(buffer, pagesize=A4)
pdf.setFont("HeiseiKakuGo-W5", 12)
pdf.drawString(10 * mm, 270 * mm, content)
pdf.save()
buffer.seek(0)
return buffer
def upload_to_blob(blob_client, data: str, overwrite: bool = True) -> None:
"""PDFをAzure Blobストレージにアップロードする"""
try:
pdf_buffer = create_pdf(data)
blob_client.upload_blob(pdf_buffer, blob_type="BlockBlob", overwrite=overwrite)
logging.info(f"Uploaded to blob: {blob_client.blob_name}")
except Exception as e:
logging.error(f"Error uploading to blob: {e}")
raise
def main():
# Azure Blobストレージへの接続情報
connection_string = "<接続文字列>"
container_name = "<コンテナ名>"
blob_name = "<pdfファイル名>"
# BlobServiceClientのインスタンスを作成
blob_service_client = BlobServiceClient.from_connection_string(connection_string)
blob_client = blob_service_client.get_blob_client(
container=container_name, blob=blob_name
)
# アップロードするデータ
data = "これはテストの日本語テキストです。"
# アップロード処理
upload_to_blob(blob_client, data)
if __name__ == "__main__":
main()
結果
Blobに保存されたことを確認する
中身を確認する
Discussion