PythonでPDFファイルを操作しよう!業務自動化・効率化で使える!!〜初心者向け〜 pypdf・reportlab
Summary
TLDRこのビデオでは、PythonのvtuberサプーがPDFを扱うためのライブラリーであるPiPDFについて紹介しています。PDFのデータ読み込み、分割、結合、画像抽出、テキスト書き込みなど、様々な機能を実演して業務の自動化効率化のヒントを提供します。必要なライブラリーのインストール方法や、PDFの操作に関する基本的なコード解説がわかりやすく説明されています。また、日本語のフォント設定や画像の挿入方法も紹介しており、PiPDFやレポートラボの他にも豊富な機能があることをウェブサイトのURLで確認できると呼びかけています。
Takeaways
- 😀 この動画はPythonでPDFを扱うライブラリ「PiPDF」について紹介している。
- 🔍 PiPDFを使用してPDFのデータ読み込み、ファイルの分割・結合、データ書き込みが可能であることがわかった。
- 📚 データ読み込みとファイル分割・結合には「iPDF」ライブラリを使用する。
- 🖋️ データ書き込みには「ReportLab」ライブラリを使うことが説明されている。
- 👨💻 必要なライブラリをインストールする必要があると示されている。
- 📁 アドビのPDFリーダーをインストールしておく必要があると触れられている。
- 📝 PDFのテキストデータを読み込む方法や、ページの順序を保持するオプションについて説明されている。
- 🖼️ PDF中の画像を抽出する方法が紹介されており、画像の保存方法も解説されている。
- 📑 PDFファイルを1ページずつ分割し、新たなPDFファイルとして出力する方法が説明されている。
- 🔄 複数のPDFファイルを1つのファイルにまとめる方法も紹介されており、具体的なコード例が示されている。
- 🖌️ ReportLabを使用してPDFにテキストや画像を書き込む方法が解説されており、日本語の表示方法も触れられている。
- 🌐 公式ウェブサイトでPiPDFやReportLabの詳細な情報を確認できる旨が示されている。
Q & A
サプーが紹介したPiPDFとは何ですか?
-PiPDFはPythonでPDFファイルを扱うためのライブラリで、PDFのデータ読み込み、ファイルの分割・結合、PDFファイルへのデータ書き込みなどができる機能を提供しています。
PDFのテキストデータを読み込むにはどのようなライブラリが必要ですか?
-PDFのテキストデータを読み込むためには、IPDFというライブラリを使用します。
PDFのテキストデータがレイアウトを保てない場合、どうすればよいですか?
-テキストデータのレイアウトを保つためには、PiPDFのエクストラクトテキストメソッドの引数に「ExtractionMode.Layout」を設定する必要があります。
PDFファイルから画像を抽出するにはどうすればよいですか?
-PDFファイルから画像を抽出するには、PDFリーダーのページオブジェクトからイメージズプロパティにアクセスし、イメージファイルオブジェクトのデータをファイルに書き込むことで実現できます。
PDFファイルを1ページごとに分割するにはどのような手順が必要ですか?
-PDFファイルを1ページごとに分割するには、PDFライタークラスを使用して、各ページを個別のPDFファイルとして出力する必要があります。
複数のPDFファイルを1つのPDFファイルにまとめるにはどうすればよいですか?
-複数のPDFファイルを1つのPDFファイルにまとめるには、PDFライタークラスのアペンドメソッドを使って、各ファイルを順に結合していく必要があります。
PDFにデータを書き込むにはどのようなライブラリが必要ですか?
-PDFにデータを書き込むためには、レポートラボ(ReportLab)というライブラリを使用します。
レポートラボを使ってPDFに日本語を書き込むにはどうすればよいですか?
-レポートラボで日本語を書き込むには、標準のフォントである「ACR本体W5」を利用し、キャンバスオブジェクトのセットフォントメソッドでフォントを設定する必要があります。
PDFに画像を挿入するにはどうすればよいですか?
-PDFに画像を挿入するには、キャンバスオブジェクトのドローイメージメソッドを使い、画像ファイルのパスと座標、横幅、縦幅を指定する必要があります。
サプーが紹介したPDF操作のライブラリはPythonの標準ライブラリですか?
-紹介されたPiPDFやレポートラボはPythonの標準ライブラリではなく、別途インストールする必要があるサードパーティライブラリです。
Outlines
📄 PDF操作の紹介
この段落では、Pythonを使ってPDFファイルを操作する方法が紹介されています。PDFのデータ読み込み、ファイルの分割・結合、データの書き込みについて説明されており、使用するライブラリーはiPDFとReportLabです。経済産業省のウェブサイトからダウンロードしたPDFファイルを例に、ページのテキストデータの読み取りや画像の抽出方法が実演されています。また、テキストの順序が崩れることがある点に注意が喚起されています。
🖼️ PDF内の画像抽出とページ分割
この段落では、PDFファイルから画像を抽出する方法と、PDFをページごとに分割して別々のPDFファイルにする方法が説明されています。iPDFライブラリーを使ってページ内の画像を取得し、ReportLabライブラリーを使って1ページずつPDFファイルを出力しています。具体的なコード例とともに、ページごとのファイル名の付け方や、ページの順序を維持するための注意点が紹介されています。
🔄 PDFの結合とデータ書き込み
段落3では、複数のPDFファイルを1つのファイルにまとめる方法と、PDFにデータを書き込む方法が説明されています。PDFライタークラスを使ってファイルを結合し、ReportLabライブラリーを使ってPDFにテキストや画像を書き込みます。フォントの設定や座標指定による画像の挿入方法についても詳しく触れられています。
🌐 PDF操作ライブラリーの活用と今後の展望
最後の段落では、iPDFやReportLabライブラリーの他にも様々な機能があることを示唆し、公式ウェブサイトでの確認を促しています。また、PDFファイルに対する繰り返しの操作を自動化する可能性についても触れ、この動画の概要やURLが提供されています。最後に、次回の動画でお会いする旨の挨拶がされています。
Mindmap
Keywords
💡Python
💡PiPDF
💡レポートラボ
💡業務の自動化
💡テキストデータ抽出
💡画像抽出
💡ページ分割
💡ファイル結合
💡データ書き込み
Highlights
PythonでPDFを扱うためのライブラリーPiPDFの紹介
業務の自動化効率化のためのPDF操作のヒント提供
チャンネル登録とメンバーシップの紹介
PDFデータの読み込み方法の解説
IPDFライブラリーを使用したPDFの分割と結合
PDFファイルへのデータ書き込みに使用するレポートラボライブラリーの紹介
PDFのテキストデータ抽出のデモンストレーション
レイアウトを保つためのテキスト抽出オプションの説明
PDFファイル全体のテキストデータの取得方法
PDFファイルから画像を抽出する手順
PDFの1ページごとの分割と個別のPDFファイルへの出力
複数のPDFファイルを1つのファイルにまとめる方法
レポートラボを使用したPDFへのテキスト書き込みのデモンストレーション
日本語の表示に使用するフォントの設定方法
PDFに画像を挿入する方法の解説
PiPDFやレポートラボの他にも様々な機能がある旨の告知
公式ウェブサイトのURL提供
次回の動画でお会いするという結び
Transcripts
こんにちはPythonvtuberの
サプーです今回はPDFファイルを
Pythonで扱えるPiPDFについて
紹介したいと思います実際にPDFを使っ
てどんなことができるか実演してるので
業務の自動化効率化のヒントにしてもらえ
たら嬉しいですこのチャンネルではpis
に関する情報を発信してるのでよければ
チャンネル登録よろしくお願いしますまた
メンバーシップ会員しか見れない動画
ライブもあるのでよければメンバーシップ
のご検討もよろしくお願いし
ます今回ご紹介するPDFの操作はPDF
データの読み込みファイルの分割ファイル
の結合とPDFファイルへのデータの
書き込みですでデータの読み込みファイル
分割ファイル結合で使うライブラリーはI
PDFというライブラリーでデータ
書き込みで使うライブラリーはレポート
ラボというライブラリーですなので必要な
操作に合わせてVIPインスーPiPDF
やTPインストールレポートラボと
あらかじめ使用するライブラリーを
インストールしていくださいまたPDFを
一覧するソフトアクロバットリーダーもお
使いのPCにインストールしておき
ましょうアクロバットリーダーはADの
ホームページからダウンロードできるので
検索して入れておきましょうでは早速実際
に実演しながらPDFを扱うコードを解説
していきます
ねまず始めにPythonでPDF
ファイルのデータを読み込む方法を説明し
ます読み込む対象のPDFは経済産業省の
ホームページからダウンロードして用意し
ておきました内容はこんな感じになってい
て全部で12ページありますねでこの
ファイルからまずはテキストデータを
読み取りたいと思いますfromPi
PDFイーPDSreerでPDFリダー
クラスをインポートしておきますでPDF
リダークラスのオブジェクトリーダーを
作成します引数に読み込み対象のPDF
ファイルのバスを指定していますこうする
とこのオブジェクトはここに指定した
PDFファイルのデータを読み込んでその
PDF情報を保持しているオブジェクトが
作成されますこのリーダーのページズと
いうプロパティにアクセスするとページ
オブジェクトの仮想的なリストを取得でき
ますイメージとしてはPDFの1ページ目
にや対応するページオブジェクトが1つ
あってそれが1つ目にPDFの2ページ目
に対応するページオブジェクトが1つあっ
てそれが2つ目にって感じでそれぞれの
ページの情報を持つページオブジェクトが
格納されているイメージですなので角括弧
0とインデックスが0のデータを取得する
と1番初めのページのページオブジェクト
が取得できますこれをページという変数に
代入しておきますでこのページ
オブジェクトのエクストラクトテキストて
いうメソッドを呼び出すとこのページの
テキストを取得できますでこれをプリント
文で表示してみますこのコードを実際に
動かしてみる
とこんな風にこのPDFの最初のページの
テキストが取得できましたねインデックス
を1に変更して次のページを同じように
読み込んで表示してみますこれを実行して
みる
とこのように出力されたのですが実際の
PDFのページはこんな風になっていて
テキストが左側と右側に分かれているよう
な場合データの順番が崩れてしまってい
ます例えばここの2部って書かれている
オレンジの部分がこんなところに書かれて
いますもしもこのレイアウトを保つのよう
にテキストを取得したかったら
エクストラクトテキストの引数に
エクストラクションモードレイアウトと
いう風に設定してくださいこれをもう1度
動かしてみる
とこんな風に2部の部分が1部の右側に来
てるのが分かりますねただテキストデータ
としてはやっぱり読みにくい気がしますよ
ねなのでテキストが縦のブロックで分れ
てるようなドキュメントは文章の順序が
一部変になってしまうことがあるかもしれ
ないという点に気をつけてくださいまた
このPDFファイルの全ページのテキスト
データを取得する場合は公文でリストから
ページオブジェクトを全て取り出して全て
のページを読み込めばOKですこれを
動かしてみる
とこんな風に全てのページのテキストが
取得できました今回は単にプリント分で
出力しているだけですが例えばテキスト
ファイルに出力したりパExcelで
Excelに出力したりすることもでき
ますね次にPDFファイルの中で使われて
いる画像を抽出しようと思いますPDF
リダーのオブジェクトを作成してさらに
ページオブジェクトを取得する部分までは
先ほどと同じですそしてページ
オブジェクトのイメージズプロパティに
アクセスするとイメージファイル
オブジェクトの仮想的なリストを取得する
ことができますイメージとしてはPDFの
1ページ目にある1つ目の画像に対応する
イメージファイルオブジェクトが1つあっ
てそれが1つ目に2つ目の画像に対応する
イメージファイルオブジェクトが1つあっ
てそれが2つ目にって感じでイメージ
ファイルオブジェクトが格納されています
なので角括弧0とインデックスが0の
データを取得すると1番初めのページの1
つ目の画像に対応するページオブジェクト
が取得できますこれをIMGという変数に
代入しておきます画像の名前はイメージ
ファイルオブジェクトのnameという
プロパティにアクセスすると取得ができて
画像のデータはイメージファイル
オブジェクトのデータというプロパティに
アクセスすると取得できるのでバイナリー
として書き込むためのファイルをオープン
してファイル名がイメージネームでデータ
をイメージデータとしてファイルに
書き込みますこれを動かしてみる
とイメージ14というファイルが出力され
てこのファイルを見てみる
と経済産業省のログマークの画像が取得で
できたのが分かりますねこのPDF
ファイルの1番左上の画像になりますね1
ページの中の画像を全部取得したい場合は
公文でリストからイメージファイル
オブジェクトを全て取り出して全ての画像
を書き出せばOKです3ページ目には複数
の画像があるのでこのページの画像を全て
取得するためにインデックスを2にして
実行してみると新しく画像ファイルがいく
つか作成できましたね見てみると
PDFの3ページ目の画像が一気に取得
できたのが分かりますまたこのPDF
ファイルの中の全部の画像を取得したけれ
ばさらにこのページの部分を大分で回せば
OKです
ね次に1つのPDFファイルを1ページ
ごとに分割して別のPDFとして出力する
プログラムを作りたいと思います初めに1
ページだけを出力してみます先ほどの
PDFリーダークラスに加えてPDF
ラタークラスもインポートしておきます
先ほどと同じようにPDFファイルのパス
を指定してPDFリーダーオブジェクトを
作っておきますでさっきと同じように
リーダーのページから1ページ目のページ
オブジェクトにアクセスしてページという
変数に代入しておきますこのページだけを
別のPDFとして出力する場合はPDF
ラタークラスのオブジェクトも作って
ライターという変数に代入しておいてこの
ライターのページメソッドを呼び出して
引数にページオブジェクトを指定します
そしてライターオブジェクトのRight
メソッドの引数に出力先のパスを指定する
ことでPDFファイルとして出力すること
ができますファイル名は一旦output
.PDFとしておきます最後にラターの
クローズメソッドを呼び出してクローズを
しておきますこれを実際に動かしてみる
とoutput.PDFというファイルが
出力されてこのファイルの中身を見てみる
とこんな感じで1ページ目だけを1つの
output.PDFというファイルに
出力することができたのが分かりますね
全てのページに対して1つずつページ分割
したファイルを出力したい場合はリーダー
のページズを分で回して全ページに対して
それぞれ同じ処理をすれば良いのですね
ライターを作るところからクローズする
までの1連の流れを公文の中に入れます
ファイル名を連番するためにイニレートを
使ってインデックス番号を取得しておき
ましょうファイル名は文字列埋め込みの0
埋めを使ってアウトプットの後ろにたの
数値が入るようにしておきますこれを実行
する
とこんな風に12個のPDFファイルが
出力できてそれぞれ1ページ目2ページ目
3ページ目4ページ目と1ページずつ分割
することができました今度は逆に複数の
PDFを1つのPDFファイルにまとめて
みたいと思います
最初のファイルをエネルギー白書の
2020年2021年2022年2023
年の4ファイルとしてこれらを1つに
まとめたいと思いますこのpdfsという
フォルダーにファイルを入れておきます
先ほどと同じようにPDFライターを
インポートしてPDFライタークラスの
オブジェクトを作ってライターという変数
に代入しておきますあとはラター
オブジェクトのアペンドメソッドを使って
都合したいファイルのパスを文字列で指定
していきます複数回アペンドを呼び出し
たらいいんですがその前にpdfsという
フォルダーの中にあるファイルの一覧を
リストで取得したいと思いますマリブと
いう標準ライブラリーを使用していきます
パリのパスクラスをインポートしてパス
オブジェクトを作ったらイテレータで
ファイル一覧を取得してソーテ関数で相当
してPDFファイルズという変数に代入し
ていきますあとは法文でそのレストを回し
て1つずつアペンドで結合していきます
最後にライターのライトメソッドで
書き出してクローズしますこれを実行して
みるとマジドPDFが出力されて中身を
確認するとエネルギー白書の2020年版
から
2021
20222023と4つのファイルが
ちゃんと1つのファイルに結合できてるの
が分かります
ね最後にPDFにデータを書き込む方法を
説明しますPDFにデータを書き込む時は
レポートラボというライブラリーを使い
ますまずレポートラボのPDFGの
キャンバスのキャンバスクラスを
インポートしておきますでこのキャンバス
クラスのオブジェクトを作成したらCと
いう変数に代入しておきますこの時の引数
に書き出し先のPDFファイルのパスを
指定しますこれは今存在しないPDF
ファイルのパスを指定してくださいもしも
存在しているPDFファイルのパスを指定
すると今から作るデータで上書きされて
しまうので気をつけましょう今回は
アウトプットPDFとしますこの
キャンバスオブジェクトがPDFの1
ファイルだと考えてくださいこのPDFに
文字を書き込むにはキャンバス
オブジェクトのドローストリングという
メソッドを呼び出します第1引数にx座標
第2引数にy座標を指定して第3引数に
書き込みたい文字列を指定しますx座標と
y座標はページの1番左が00地点ですな
ので例えばXが10Yが800の地点に
Pythonvtuberサプていう文字
を書き込む場合はこのような形になります
でこの内容で1ページ目に書き込みを完了
したかったらキャンバスオブジェクトの小
ページというメソッドを呼び出します最後
にこの内容でファイルを保存したい場合は
キャンバスオブジェクトののセーブ
メソッドを呼び出しますこれを動かして
みるとoutput.PDFという
ファイルが出力されてこの内容を見てみる
と1ページ目の左上にIONvtuber
と書かれていますがsapoという日本語
の部分が黒い四角の表記になってしまって
いますね日本語のフォントを設定すること
で日本語も表示できるようになります
レポートラボには標準で民長体フォント
衛星民W3とゴシックフォントAC覚5W
5が用意されていますフォントファイルを
読み込んで設定することもできるんですが
今回は標準で用意されているcosicの
フォント平成覚悟W5を使っていこうと
思いますレポートラボのPDFベースの
PDFmetrixとレポートラボの
PDFベースのcidフツのunic
cidフォントをインポートをしておき
ますPDFmetxのレジスターフォント
を呼び出してを使えるように登録できるの
ですがこの引数にユニコードcid
フォントクラスのオブジェクトを指定し
ますこのオブジェクトの作成の引数に
フント名括5W5を文字列で指定しますで
キャンバスオブジェクトのセットフォント
を呼び出す時に第1引数に平成覚悟W5を
文字列で指定して書き込むフォントをここ
で設定します第2引数にはフォントサイズ
を指定します今回は16にしておきます後
のコードは同じですこれを実行してみる
とアウトプットPDFが出力されてもう
1度この中身を見てみると今度はちゃんと
サプーという日本語が出力されましたね
また開業したい場合はキャンバス
オブジェクトのシページを呼び出した後に
さらにドローストリングで文字を書き込め
ます例えばこんな風に1ページに
Pythonvtuberサ1ページ目
その下にはこれはテストデータですで
書き込んだら小ページで1ページ目を決定
してでここからが2ページ目なのでセット
フォントで同じようにフォントを設定して
からPythonvtuber2ページ目
その下にこれもテストページですで
書き込んでこれを小ページで2ページ目を
決定して最後にセーブで保存しますこれを
実行してみてでまた出力された
アウトプットPDを見てみると合計で2
ページあって1ページ目にちゃんとコード
上に書いた文字が出力されてい
て2ページ目にもちゃんと先ほどコード上
に書いた文字が出力されていますねあとは
画像を入れるにはキャンバスオブジェクト
のドローイメージを使います例えばこんな
サプーのアイコンICON.pngという
ファイルがあった時にドローイメージの
メソッドの第1引数に画像ファイルのバス
第2引数にx座標第3引数にy座標を指定
して第4引数には横幅第5引数には縦幅を
指定できます座標は画像の左下が基準に
なっているのでxが10Yが
660縦横を100にしてこのように設定
しておきますこれを実行してアウトプット
.PDFを確認してみると1ページ目に
ちゃんとサプーのアイコンが載っています
ねこんな感じでテキストや画像を
プログラムを通してPDFに書き出すこと
ができます大量のPDFファイルに対して
何か繰り返しの操作をしたいケースなどで
iPDFやレポートラボで操作を自動化
できないか検討してみて
くださいまた今回紹介したPiPDFや
レポートラボは説明した以外にも様々な
機能があるので気になる方は公式サイトの
方を確認してみてください概要欄にURL
を貼っておきますねそれではまた次回の
動画でお会いしましょうバイバイ
[音楽]
5.0 / 5 (0 votes)