Python で PDF ファイルを操作する

Python で PDF ファイルを操作する

皆さんは PDF が何であるかをよく知っているはずです。実際、これらは最も重要で広く使用されているデジタル メディアの 1 つです。 PDF の略 ポータブルドキュメントフォーマット 。それは使用しています .pdf 拡大。ソフトウェア、ハードウェア、オペレーティング システムに依存せず、ドキュメントを確実に提示および交換するために使用されます。
発明者 アドビ , PDF は現在、国際標準化機構 (ISO) によって維持されているオープン標準です。 PDF には、リンク、ボタン、フォーム フィールド、オーディオ、ビデオ、ビジネス ロジックを含めることができます。
この記事では、次のようなさまざまな操作を行う方法を学びます。

  • PDFからテキストを抽出する
  • PDF ページの回転
  • PDF の結合
  • PDFの分割
  • PDF ページに透かしを追加する

インストール: 簡単なPythonスクリプトを使ってみよう!
サードパーティのモジュール pypdf を使用します。
pypdf PDF ツールキットとして構築された Python ライブラリです。次のことが可能です。

  • 文書情報(タイトル、著者など)の抽出
  • 文書をページごとに分割する
  • ドキュメントをページごとに結合する
  • ページのトリミング
  • 複数のページを 1 つのページに結合する
  • PDF ファイルの暗号化と復号化
  • もっと!

pypdf をインストールするには、コマンド ラインから次のコマンドを実行します。



pip install pypdf 

このモジュール名では大文字と小文字が区別されるため、 そして は小文字で、それ以外はすべて大文字です。このチュートリアル/記事で使用されているすべてのコードと PDF ファイルは利用可能です ここ

1. PDFファイルからテキストを抽出する

パイソン




# importing required classes> from> pypdf> import> PdfReader> > # creating a pdf reader object> reader> => PdfReader(> 'example.pdf'> )> > # printing number of pages in pdf file> print> (> len> (reader.pages))> > # creating a page object> page> => reader.pages[> 0> ]> > # extracting text from page> print> (page.extract_text())>

上記のプログラムの出力は次のようになります。

20 PythonBasics S.R.Doty August27,2008 Contents 1Preliminaries 4 1.1WhatisPython?................................... ..4 1.2Installationanddocumentation.................... .........4   [and some more lines...] 

上記のコードをいくつかの部分に分けて理解してみましょう。

reader = PdfReader('example.pdf') 
  • ここでは、次のオブジェクトを作成します。 PDFリーダー pypdf モジュールのクラスを開き、PDF ファイルへのパスを渡し、PDF リーダー オブジェクトを取得します。
print(len(reader.pages)) 
  • ページ プロパティは PDF ファイルのページ数を示します。たとえば、この例では 20 です (出力の最初の行を参照)。
pageObj = reader.pages[0] 
  • ここで、次のオブジェクトを作成します。 ページオブジェクト pypdf モジュールのクラス。 PDFリーダーオブジェクトには機能があります ページ[] これはページ番号 (インデックス 0 から始まる) を引数として受け取り、ページ オブジェクトを返します。
print(pageObj.extract_text()) 
  • ページオブジェクトには機能があります 抽出テキスト() PDF ページからテキストを抽出します。

注記: PDF ファイルは、印刷して読みやすい方法でテキストをレイアウトするのに最適ですが、ソフトウェアが平文に解析するのは簡単ではありません。そのため、pypdf は PDF からテキストを抽出するときに間違いを犯す可能性があり、一部の PDF をまったく開けない場合もあります。残念ながら、これに関してできることはあまりありません。 pypdf は、特定の PDF ファイルの一部を単に処理できない可能性があります。

2. PDF ページの回転

パイソン




# importing the required classes> from> pypdf> import> PdfReader, PdfWriter> > def> PDFrotate(origFileName, newFileName, rotation):> > > # creating a pdf Reader object> > reader> => PdfReader(origFileName)> > > # creating a pdf writer object for new pdf> > writer> => PdfWriter()> > > # rotating each page> > for> page> in> range> (> len> (reader.pages)):> > > # creating rotated page object> > pageObj> => reader.pages[page]> > pageObj.rotate(rotation)> > > # adding rotated page object to pdf writer> > pdfWriter.add_page(pageObj)> > > # new pdf file object> > newFile> => open> (newFileName,> 'wb'> )> > > # writing rotated pages to new file> > pdfWriter.write(newFile)> > > # closing the new pdf file object> > newFile.close()> > > def> main():> > > # original pdf file name> > origFileName> => 'example.pdf'> > > # new pdf file name> > newFileName> => 'rotated_example.pdf'> > > # rotation angle> > rotation> => 270> > > # calling the PDFrotate function> > PDFrotate(origFileName, newFileName, rotation)> > if> __name__> => => '__main__'> :> > # calling the main function> > main()>

ここで、最初のページがどのように表示されるかを確認できます。 回転_例.pdf 回転後は (右の画像) のようになります。

PDFファイルを回転する

上記のコードに関連する重要な点は次のとおりです。

  • 回転するには、まず元の PDF の PDF リーダー オブジェクトを作成します。
writer = PdfWriter() 
  • 回転されたページは新しい PDF に書き込まれます。 PDF への書き込みには、次のオブジェクトを使用します。 PDFライター pypdf モジュールのクラス。
for page in range(len(pdfReader.pages)): pageObj = pdfReader.pages[page] pageObj.rotate(rotation) pdfWriter.add_page(pageObj) 
  • ここで、元の PDF の各ページを繰り返し処理します。ページオブジェクトを取得するには、 .ページ[] PDFリーダークラスのメソッド。ここで、ページを回転させます。 回転() ページオブジェクトクラスのメソッド。次に、次を使用して PDF ライター オブジェクトにページを追加します。 追加() PDF ライター クラスのメソッドに、回転されたページ オブジェクトを渡します。
newFile = open(newFileName, 'wb') pdfWriter.write(newFile) newFile.close() 
  • 次に、PDF ページを新しい PDF ファイルに書き込む必要があります。まず、新しいファイル オブジェクトを開き、次のコマンドを使用して PDF ページをそこに書き込みます。 書く() PDF ライター オブジェクトのメソッド。最後に、元の PDF ファイル オブジェクトと新しいファイル オブジェクトを閉じます。

3. PDF ファイルの結合

パイソン




# importing required modules> from> pypdf> import> PdfMerger> > > def> PDFmerge(pdfs, output):> > # creating pdf file merger object> > pdfMerger> => PdfMerger()> > > # appending pdfs one by one> > for> pdf> in> pdfs:> > pdfMerger.append(pdf)> > > # writing combined pdf to output pdf file> > with> open> (output,> 'wb'> ) as f:> > pdfMerger.write(f)> > > def> main():> > # pdf files to merge> > pdfs> => [> 'example.pdf'> ,> 'rotated_example.pdf'> ]> > > # output pdf file name> > output> => 'combined_example.pdf'> > > # calling pdf merge function> > PDFmerge(pdfs> => pdfs, output> => output)> > > if> __name__> => => '__main__'> :> > # calling the main function> > main()>

上記のプログラムの出力は結合された PDF です。 結合例.pdf 結合して得られる 例.pdf そして 回転_例.pdf

  • このプログラムの重要な側面を見てみましょう。
pdfMerger = PdfMerger() 
  • マージには、事前に構築されたクラスを使用します。 PDFマージャー pypdfモジュールの。
    ここではオブジェクトを作成します pdfマージ PDFマージクラスの
for pdf in pdfs: pdfmerger.append(open(focus, 'rb')) 
  • 次に、各 PDF のファイル オブジェクトを PDF マージ オブジェクトに追加します。 追加() 方法。
with open(output, 'wb') as f: pdfMerger.write(f) 
  • 最後に、次を使用して PDF ページを出力 PDF ファイルに書き込みます。 書く PDF 結合オブジェクトのメソッド。

4. PDFファイルの分割

パイソン




# importing the required modules> from> pypdf> import> PdfReader, PdfWriter> > def> PDFsplit(pdf, splits):> > # creating pdf reader object> > reader> => PdfReader(pdf)> > > # starting index of first slice> > start> => 0> > > # starting index of last slice> > end> => splits[> 0> ]> > > > for> i> in> range> (> len> (splits)> +> 1> ):> > # creating pdf writer object for (i+1)th split> > writer> => PdfWriter()> > > # output pdf file name> > outputpdf> => pdf.split(> '.pdf'> )[> 0> ]> +> str> (i)> +> '.pdf'> > > # adding pages to pdf writer object> > for> page> in> range> (start,end):> > writer.add_page(reader.pages[page])> > > # writing split pdf pages to pdf file> > with> open> (outputpdf,> 'wb'> ) as f:> > writer.write(f)> > > # interchanging page split start position for next split> > start> => end> > try> :> > # setting split end position for next split> > end> => splits[i> +> 1> ]> > except> IndexError:> > # setting split end position for last split> > end> => len> (reader.pages)> > > def> main():> > # pdf file to split> > pdf> => 'example.pdf'> > > # split page positions> > splits> => [> 2> ,> 4> ]> > > # calling PDFsplit function to split pdf> > PDFsplit(pdf, splits)> > if> __name__> => => '__main__'> :> > # calling the main function> > main()>

出力は 3 つの新しい PDF ファイルになります。 スプリット 1 (ページ 0,1)、スプリット 2(ページ 2,3)、スプリット 3(ページ 4 ~末尾)
上記の Python プログラムでは、新しい関数やクラスは使用されていません。単純なロジックと反復を使用して、渡されたリストに従って渡された PDF の分割を作成しました。 分割

5. PDF ページにウォーターマークを追加する

パイソン




# importing the required modules> from> pypdf> import> PdfReader> > def> add_watermark(wmFile, pageObj):> > # creating pdf reader object of watermark pdf file> > reader> => PdfReader(wmFileObj)> > > # merging watermark pdf's first page with passed page object.> > pageObj.merge_page(reader.pages[> 0> ])> > > # returning watermarked page object> > return> pageObj> > def> main():> > # watermark pdf file name> > mywatermark> => 'watermark.pdf'> > > # original pdf file name> > origFileName> => 'example.pdf'> > > # new pdf file name> > newFileName> => 'watermarked_example.pdf'> > > # creating pdf File object of original pdf> > pdfFileObj> => open> (origFileName,> 'rb'> )> > > # creating a pdf Reader object> > reader> => PdfReader(pdfFileObj)> > > # creating a pdf writer object for new pdf> > writer> => PdfWriter()> > > # adding watermark to each page> > for> page> in> range> (> len> (reader.pages)):> > # creating watermarked page object> > wmpageObj> => add_watermark(mywatermark, reader.pages[page])> > > # adding watermarked page object to pdf writer> > writer.add_page(wmpageObj)> > > # new pdf file object> > newFile> => open> (newFileName,> 'wb'> )> > > # writing watermarked pages to new file> > writer.write(newFile)> > > # closing the new pdf file object> > newFile.close()> > if> __name__> => => '__main__'> :> > # calling the main function> > main()>

オリジナルの PDF ファイル (左) と透かし入りの PDF ファイル (右) の最初のページは次のようになります。

PDF ファイルに透かしを入れる

  • すべてのプロセスはページ回転の例と同じです。唯一の違いは次のとおりです。
wmpageObj = add_watermark(mywatermark, pdfReader.pages[page]) 
  • ページ オブジェクトは、次を使用して透かし入りのページ オブジェクトに変換されます。 add_watermark() 関数。
  • 理解してみましょう add_watermark() 関数:
reader = PdfReader(wmFile) pageObj.merge_page(reader.pages[0]) wmFileObj.close() return pageObj 
  • まず、PDF リーダー オブジェクトを作成します。 透かし.pdf 。渡されたページオブジェクトには、 マージページ() 関数を使用して、ウォーターマーク PDF リーダー オブジェクトの最初のページのページ オブジェクトを渡します。これにより、渡されたページ オブジェクトに透かしが重ねられます。

そしてここで、Python で PDF ファイルを操作するためのこの長いチュートリアルが終わります。
独自の PDF マネージャーを簡単に作成できるようになりました。
参考文献:

techcodeview.com が気に入って貢献したい場合は、write.techcodeview.com を使用して記事を書くか、記事を [email protected] にメールで送信することもできます。
何か間違っている点を見つけた場合、または上記のトピックについてさらに詳しい情報を共有したい場合は、コメントを書いてください。



トップ記事

カテゴリ

興味深い記事