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

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

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

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

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

Q&A

0回答

716閲覧

DjangoでPDFを編集する方法

Mamiya_tom

総合スコア17

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

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

0グッド

0クリップ

投稿2020/09/28 04:07

前提・実現したいこと

Djangoで入力されたフォーム値をPDFに書き加えたいです。

python

1class BasicPdf(generic.View): 2 filename = 'sample.pdf' # 出力ファイル名 3 title = 'sample' 4 font_name = 'HeiseiKakuGo-W5' # フォント 5 is_bottomup = True 6 7 def get(self, request, *args, **kwargs): 8 9 with open('media/image/借用書.pdf', 'rb') as pdf: 10 11 # PDF出力 12 response = HttpResponse(pdf.read(), content_type='application/pdf') 13 # response['Content-Disposition'] = 'attachment; filename="{}"'.format(self.filename) # ダウンロードする場合 14 response['Content-Disposition'] = 'filename="{}"'.format(self.filename) # 画面に表示する場合 15 # pdfを描く場所を作成:位置を決める原点は左上にする(bottomup) 16 p = canvas.Canvas(response, bottomup=self.is_bottomup) 17 18 pdfmetrics.registerFont(UnicodeCIDFont(self.font_name)) 19 p.setFont(self.font_name, 16) # フォントを設定 20 21 # pdfのタイトルを設定 22 p.setTitle(self.title) 23 24 # 全ての作品情報を出力する。(検索結果は無関係) 25 id_array = list(Work.objects.filter(pk=self.kwargs["pk"]).values_list('pk', flat=True)) 26 27 for work_count, work_id in enumerate(id_array): 28 29 logger.debug(work_count) 30 31 # 作品情報 32 workInfo = Work.objects.filter(pk=work_id).first() 33 34 # 表の情報 35 price = str(workInfo.num) 36 p.drawString(0, 0, workInfo.sample1) 37 p.drawString(450, 300, workInfo.sample2) 38 p.drawString(450, 200, price) 39 40 date = workInfo.created_at.strftime('%Y/%m/%d') 41 p.drawString(450, 800, date) 42 43 if len(id_array) % 2 != 0: # 出力作品数が奇数の場合 44 p.showPage() # Canvasに書き込み 45 p.save() # ファイル保存 46 47 self._draw(p) 48 49 return response

発生している問題

上記のコードだと入力されたフォーム値は表示されたのですが、
sample.pdfが表示されませんでした。

試したこと

python

1 def get(self, request, *args, **kwargs): 2 3 with open('media/image/借用書.pdf', 'rb') as pdf: 4 5 # PDF出力 6 response = HttpResponse(pdf.read(), content_type='application/pdf') 7 # response['Content-Disposition'] = 'attachment; filename="{}"'.format(self.filename) # ダウンロードする場合 8 response['Content-Disposition'] = 'filename="{}"'.format(self.filename) # 画面に表示する場合 9 return response 10 # pdfを描く場所を作成:位置を決める原点は左上にする(bottomup) 11 # デフォルトの原点は左下 12 p = canvas.Canvas(response, bottomup=self.is_bottomup) 13 14 pdfmetrics.registerFont(UnicodeCIDFont(self.font_name)) 15 p.setFont(self.font_name, 16) # フォントを設定 16 17 # pdfのタイトルを設定 18 p.setTitle(self.title) 19 20 # 全ての作品情報を出力する。(検索結果は無関係) 21 id_array = list(Work.objects.filter(pk=self.kwargs["pk"]).values_list('pk', flat=True)) 22 23 for work_count, work_id in enumerate(id_array): 24 25 logger.debug(work_count) 26 27 # 作品情報 28 workInfo = Work.objects.filter(pk=work_id).first() 29 30 # 表の情報 31 price = str(workInfo.num) 32 p.drawString(0, 0, workInfo.sample1) 33 p.drawString(450, 300, workInfo.sample2) 34 p.drawString(450, 200, price) 35 36 date = workInfo.created_at.strftime('%Y/%m/%d') 37 p.drawString(450, 800, date) 38 39 if len(id_array) % 2 != 0: # 出力作品数が奇数の場合 40 p.showPage() # Canvasに書き込み 41 p.save() # ファイル保存 42 43 self._draw(p) 44

上記のようにインデントreturn responseの位置を変えるとsample.pdfの表示はできましたが、入力されたフォームの値が表示がされませんでした。

pdfの読み込み方が違うのでしょうか?
どうすればsample.pdfに入力されたフォーム値を書き入れられるでしょうか?

必要なものがあれば追記致しますので、よろしくお願いいたします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問