質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3490閲覧

(Python)Canvas で作成した複数の新規PDFの保存先を指定したい

kuma07

総合スコア9

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/05/03 23:11

pyton 初心者です。

<前提>
・カレントディレクトリのなかに’image_file'フォルダ、’finish_file'フォルダを作成しております。
・’image_file'フォルダは複数の画像ファイル(png)があります。

<実現したいこと>
・新規の白紙のPDFを作成して、’finish_file'フォルダに格納したいです
・新規の白紙のPDFのファイル名は、’image_file'フォルダの画像ファイル名と同じにしたいです
・作成したPDFの本文に、フィル名を記載したい

<やったこと>
・glob.glob 関数で各pngファイルの取り出して、Canvas関数を使用してPDFを作成
・現状のコードですと、新規作成されたPDFがカレントディレクトリに保存されます

pdf = canvas.Canvas(file_name+".pdf", pagesize=A4)

・そのため、下記のように保存先のディレクトリを指定しましたがエラーがでてしまい。保存できませんした

pdf = canvas.Canvas('./finish_file'/file_name+".pdf", pagesize=A4)

エラーメッセージ

TypeError: unsupported operand type(s) for /: 'str' and 'str'

ほかに下記のように書き換えなどをしてみましたがうまくいきませんした。

pdf = canvas.Canvas('./finish_file'/'str(file_name)'+".pdf", pagesize=A4) pdf = canvas.Canvas('./finish_file'+'/'+ file_name +".pdf", pagesize=A4)

保存先の設定についてアドバイスをいただけますと幸いです

コードになります

#PNGからNEWPDFを作成 from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import A4 from reportlab.lib.units import mm import glob import os from pdfrw import PdfReader from pdfrw.buildxobj import pagexobj from pdfrw.toreportlab import makerl from reportlab.pdfgen import canvas from reportlab.pdfbase.cidfonts import UnicodeCIDFont from reportlab.pdfbase import pdfmetrics from reportlab.lib.units import mm from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import A4,portrait from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont from pathlib import Path def my_func(filename): pdfmetrics.registerFont(TTFont("HGRGE","C:/Windows/Fonts/HGRGE.TTC")) in_path = x #PNGを読み込む file_name=os.path.splitext(os.path.basename(in_path)) file_name=file_name[0] #file_name=str(file_name) # PDFを作成 #pdf = canvas.Canvas(file_name+".pdf", pagesize=A4) pdf = canvas.Canvas('./finish_file'/'file_name'+".pdf", pagesize=A4) pdf.setFont("HGRGE",10) # 文字を挿入。 target_x, target_y = 10*mm, 290*mm pdf.drawString(target_x, target_y,str(file_name)) # PDFの保存 pdf.save() for x in glob.glob('./image_file/*.png'): my_func(x)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こういう場合は、f文字列を使うのが楽です。

pdf = canvas.Canvas('./finish_file'/'file_name'+".pdf", pagesize=A4)


pdf = canvas.Canvas(f'./finish_file/{file_name}.pdf', pagesize=A4)

に書き換えましょう。

投稿2021/05/04 00:00

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuma07

2021/05/04 00:38

ありがとうございます! 書き換えましたらきちんと保存できました。 大変助かりました。精進したいと思います。 またよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問