最も完全な要約!Python操作のいくつかの方法について話すPDF

著者| Chen Xi

ソース|初期のPython

序文

この記事は主に以下を含みます:

  • OSモジュールの包括的なアプリケーション

  • globモジュールの包括的なアプリケーション

  • PyPDF2モジュールの操作

基本的な操作

多くの場合、PyPDF2インポートモジュールのコードは次のとおりです。

from PyPDF2 import PdfFileReader, PdfFileWriter

2つのメソッドがここにインポートされます。

  • PdfFileReaderはリーダーとして理解できます

  • PdfFileWriterはライターとして理解できます

次に、これらの2つのツールの不思議をいくつかのケースを通してさらに理解します。使用されるサンプルファイルは、5つの請求書のPDFです。

各請求書のPDFは、2つのページで構成されています。

マージ

最初の仕事は、5つの請求書PDFを10ページにマージすることです。ここで、読者と作家はどのように連携すべきですか?

ロジックは次のとおりです。

  1. リーダーはすべてのPDFを1回読み取ります

  2. リーダーは、読み取ったコンテンツをライターに渡します。

  3. ライターが出力を新しいPDFに統合

ここで重要な知識のポイントもあります。リーダーは、読み取ったコンテンツをページごとにライターに配信することしかできません。

したがって、ロジックの最初と2番目のステップは実際には独立したステップではありませんが、リーダーがPDFを読んだ後、PDFのすべてのページをループし、ページごとにライターに渡します。最後に、すべての読み取り作業が完了するまで待ってから出力します。

コードを見ると、アイデアがより明確になります。

from PyPDF2 import PdfFileReader, PdfFileWriterpath = r'C:\Users\xxxxxx'pdf_writer = PdfFileWriter()for i in range(1, 6):    pdf_reader = PdfFileReader(path + '/INV{}.pdf'.format(i))for page in range(pdf_reader.getNumPages()):        pdf_writer.addPage(pdf_reader.getPage(page))with open(path + r'\合并PDF\merge.pdf', 'wb') as out:    pdf_writer.write(out)

すべてのコンテンツは最終出力のために同じライターに配信される必要があるため、ライターの初期化はループ本体の外で行う必要があります。

ループボディ内にある場合、pdfを読み取るためのアクセスごとに新しいライターになるため、ライターに渡された各リーダーのコンテンツは繰り返し上書きされ、マージ要件を達成できません。

ループ本体の先頭のコード:

for i in range(1, 6):    pdf_reader = PdfFileReader(path + '/INV{}.pdf'.format(i))

目的は、各サイクルで新しいPDFファイルを読み取り、後続の操作のためにリーダーにそれを渡すことです。実際、各PDF名はたまたま規則的であるため、この書き込み方法はあまりお勧めできません。循環させる数値を直接手動で指定できます。より良い方法は、globモジュールを使用することです:

import globfor file in glob.glob(path + '/*.pdf'):    pdf_reader = PdfFileReader(path)

コードでは、pdf_reader.getNumPages():リーダーのページ数を取得でき、範囲内のリーダーのすべてのページをトラバースできます。

pdf_writer.addPage(pdf_reader.getPage(page))は、現在のページをライターに渡すことができます。

最後に、withを使用して新しいPDFを作成し、ライターのpdf_writer.write(out)メソッドで出力します。

スプリット

マージ操作でのリーダーとライターの連携を理解していれば、分割は簡単に理解できます。ここでは、分割されたINV1.pdfを2つの個別のPDFドキュメントに例として取り上げ、ストロークから始めます。論理:

  1. PDF文書を読むためのリーダー

  2. リーダーがページごとにライターに引き渡された

  3. ライターはページを取得するたびに即座に出力します

このコードロジックを通じて、ライターの初期化と出力の位置は、PDFループの各ページを読み取るループ本体内にある必要があり、ループの外ではないことも理解できます。

コードは簡単です:

from PyPDF2 import PdfFileReader, PdfFileWriterpath = r'C:\Users\xxx'pdf_reader = PdfFileReader(path + '\INV1.pdf')for page in range(pdf_reader.getNumPages()):# 遍历到每一页挨个生成写入器    pdf_writer = PdfFileWriter()    pdf_writer.addPage(pdf_reader.getPage(page))# 写入器被添加一页后立即输出产生pdfwith open(path + '\INV1-{}.pdf'.format(page + 1), 'wb') as out:        pdf_writer.write(out)

透かし


この作業は、次の画像を透かしとしてINV1.pdfに追加することです。

一つ目は準備作業で、透かしにしたい画像をWordに挿入し、適切な位置に調整してPDFファイルとして保存します。次に、コードをコーディングし、コピーモジュールを追加で使用する必要があります。具体的な説明を下の図に示します。

リーダーとライターを初期化し、最初に透かしPDFページを読み取ってバックアップします。コアコードを理解するのは少し難しいです。

透かし入れは、透かし入れされたPDFページを、透かし入れが必要なすべてのページとマージすることです。

透かしを入れる必要のあるPDFには多くのページがあり、透かしを入れたPDFは1ページしかないので、透かしを入れたPDFを直接マージすると、最初のページが追加され、透かしを入れたPDFページがなくなるため、抽象的に理解できます。

したがって、直接マージすることはできません。代わりに、透かしを入れたPDFページを新しいページスタンバイnew_pageに継続的にコピーし、.mergePageメソッドを使用して各ページとのマージを完了し、マージされたページを最終的な統合出力のためにライターに渡す!

.mergePageの使用について:次のページ.mergePage(上部のページに表示されます)に表示される場合、最終的な効果は図のようになります。

暗号化

暗号化は非常に簡単です。「暗号化はライターの暗号化のためのものです」と覚えておいてください。

したがって、関連する操作が完了した後にのみpdf_writer.encrypt(パスワード)を呼び出す必要があります

例として、単一のPDFの暗号化を取り上げます。

もちろん、PDFのマージ、分割、暗号化、透かしに加えて、Pythonを使用してExcelとWordを組み合わせ、より多くの自動化要件を達成することもできます。



更多精彩推荐

おすすめ

転載: blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/108722048