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ファイルからテキストを抽出する

Python
   # 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
August272008
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 ページの回転
 

Python
   # 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  )):   pageObj   =   reader  .  pages  [  page  ]   pageObj  .  rotate  (  rotation  )   # Add the rotated page object to the PDF writer   writer  .  add_page  (  pageObj  )   # Write the rotated pages to the new PDF file   with   open  (  newFileName     'wb'  )   as   newFile  :   writer  .  write  (  newFile  )   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)
writer.add_page(pageObj)
  • ここで、元の PDF の各ページを繰り返し処理します。ページオブジェクトを取得するには、 .ページ[] PDFリーダークラスのメソッド。ここでページを回転させます。 回転() ページオブジェクトクラスのメソッド。次に、次を使用して PDF ライター オブジェクトにページを追加します。 追加() PDF ライター クラスのメソッドに、回転されたページ オブジェクトを渡します。
 newFile = open(newFileName 'wb')   
writer.write(newFile)
newFile.close()
  • 次に、PDF ページを新しい PDF ファイルに書き込む必要があります。まず、新しいファイル オブジェクトを開き、次のコマンドを使用して PDF ページをそこに書き込みます。 書く() PDF ライター オブジェクトのメソッド。最後に、元の PDF ファイル オブジェクトと新しいファイル オブジェクトを閉じます。

3. PDF ファイルの結合

Python
   # importing required modules   from   pypdf   import   PdfWriter   def   PDFmerge  (  pdfs     output  ):   # creating pdf file writer object   pdfWriter   =   PdfWriter  ()   # appending pdfs one by one   for   pdf   in   pdfs  :   pdfWriter  .  append  (  pdf  )   # writing combined pdf to output pdf file   with   open  (  output     'wb'  )   as   f  :   pdfWriter  .  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
 

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

4. PDFファイルの分割

Python
   # 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 (ページ 01) スプリット 2(ページ 23) スプリット 3(ページ 4 ~末尾)
上記の Python プログラムでは、新しい関数やクラスは使用されていません。単純なロジックと反復を使用して、渡されたリストに従って渡された PDF の分割を作成しました。 分割

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

Python
   # importing the required modules   from   pypdf   import   PdfReader     PdfWriter   def   add_watermark  (  wmFile     pageObj  ):   # creating pdf reader object of watermark pdf file   reader   =   PdfReader  (  wmFile  )   # 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  )   # writing watermarked pages to new file   with   open  (  newFileName     'wb'  )   as   newFile  :   writer  .  write  (  newFile  )   # closing the original pdf file object   pdfFileObj  .  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])
return pageObj
  • まず、PDF リーダー オブジェクトを作成します。 透かし.pdf 。渡されたページオブジェクトに使用します マージページ() 関数を使用して、ウォーターマーク PDF リーダー オブジェクトの最初のページのページ オブジェクトを渡します。これにより、渡されたページ オブジェクトに透かしが重ねられます。


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

  • https://automatetheboringstuff.com/chapter13/
  • https://pypi.org/project/pypdf/

GeeksforGeeks が好きで貢献したい場合は、write.geeksforgeeks.org を使用して記事を書くか、記事を [email protected] にメールで送信することもできます。 GeeksforGeeks のメイン ページにあなたの記事が掲載されているのを見て、他のオタクを助けてください。
間違った点を見つけた場合、または上記のトピックについてさらに詳しい情報を共有したい場合は、コメントを書いてください。
 

クイズの作成