<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>python programming on File Format Blog</title>
    <link>https://blog.fileformat.com/ja/tag/python-programming/</link>
    <description>Recent content in python programming on File Format Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja</language>
    <lastBuildDate>Wed, 29 Jan 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.fileformat.com/ja/tag/python-programming/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>PythonでPDFファイルを操作する</title>
      <link>https://blog.fileformat.com/ja/programming/working-with-pdf-files-in-python/</link>
      <pubDate>Wed, 29 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://blog.fileformat.com/ja/programming/working-with-pdf-files-in-python/</guid>
      <description>Pythonのライブラリとシンプルなコード例を使用して、PDFからのテキスト抽出、PDFページの回転、複数PDFの結合、PDFの分割、およびPDFへの透かしの追加を学びましょう。</description>
      <content:encoded><![CDATA[<p><strong>最終更新日</strong>: 2025年1月29日</p>
<figure class="align-center ">
    <img loading="lazy" src="images/working-with-pdf-files-in-python.png#center"
         alt="タイトル - PythonでPDFファイルを操作する"/> 
</figure>

<p>この記事では、Pythonを使用して<strong>PDFファイルを操作する方法</strong>をガイドします。ここでは、<a href="https://pypi.org/project/pypdf/"><strong>pypdf</strong></a>ライブラリを使用します。</p>
<p><strong>pypdf</strong>ライブラリを使用して、Pythonで以下の操作を実行する方法を示します：</p>
<ul>
<li>PDFからのテキスト抽出</li>
<li>PDFページの回転</li>
<li>複数PDFの結合</li>
<li>PDFの分割</li>
<li>PDFページへの透かしの追加</li>
</ul>
<p><em><strong>注意</strong>: この記事は多くの貴重な詳細をカバーしているため、最も興味のあるセクションに自由に飛ぶことができます！内容は簡単にナビゲートできるように整理されており、あなたに最も関連する部分に素早く集中できます。</em></p>
<figure class="align-center ">
    <img loading="lazy" src="images/pdf-manipulation-with-pypdf.webp#center"
         alt="図解 - PythonでPDFファイルを操作する"/> 
</figure>

<h2 id="サンプルコード">サンプルコード</h2>
<p>この記事で使用されているサンプルコードを以下のリンクからダウンロードできます。コード、入力ファイル、および出力ファイルが含まれています。</p>
<ul>
<li><a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python">PythonでPDFファイルを操作するためのコード例と入力ファイル</a></li>
</ul>
<h2 id="pypdfのインストール">pypdfのインストール</h2>
<p>pypdfをインストールするには、ターミナルまたはコマンドプロンプトで次のコマンドを実行してください：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>pip install pypdf
</span></span></code></pre></div><p><strong>注意:</strong> 上記のコマンドは大文字と小文字を区別します。</p>
<h2 id="1-pythonを使用してpdfファイルからテキストを抽出する">1. Pythonを使用してPDFファイルからテキストを抽出する</h2>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/e2b43a49dbad9e89745f8f9777817acb.js?file=extract-text-from-pdf-using-pypdf-in-python.py"></script>

<h3 id="コードの説明"><strong>コードの説明</strong></h3>
<p><strong>1. PDFリーダーオブジェクトの作成</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>reader <span style="color:#f92672">=</span> PdfReader(pdf_file)
</span></span></code></pre></div><ul>
<li><code>PdfReader(pdf_file)</code>はPDFファイルを<strong>リーダーオブジェクト</strong>にロードします。</li>
<li>このオブジェクトを使用すると、ページとそのコンテンツにアクセスできます。</li>
</ul>
<p><strong>2. ページのループ処理</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">for</span> page_number, page <span style="color:#f92672">in</span> enumerate(reader<span style="color:#f92672">.</span>pages, start<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span>):
</span></span></code></pre></div><ul>
<li><code>reader.pages</code>はPDFのページリストを返します。</li>
<li><code>enumerate(..., start=1)</code>は<strong>1から始まるページ番号</strong>を割り当てます。</li>
</ul>
<p><strong>3. 抽出されたテキストの表示</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>    print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Page </span><span style="color:#e6db74">{</span>page_number<span style="color:#e6db74">}</span><span style="color:#e6db74">:&#34;</span>)
</span></span><span style="display:flex;"><span>    print(page<span style="color:#f92672">.</span>extract_text())
</span></span><span style="display:flex;"><span>    print(<span style="color:#e6db74">&#34;-&#34;</span> <span style="color:#f92672">*</span> <span style="color:#ae81ff">50</span>)  <span style="color:#75715e"># 読みやすさのための区切り</span>
</span></span></code></pre></div><ul>
<li><code>page.extract_text()</code>は現在のページからテキストコンテンツを抽出します。</li>
<li>スクリプトは抽出されたテキストと<strong>ページ番号</strong>を表示します。</li>
<li><code>&quot;-&quot; * 50</code>は読みやすさのための区切り線を印字します（<code>--------------------------------------------------</code>）。</li>
</ul>
<h3 id="コードで使用されている入力pdfファイル">コードで使用されている入力PDFファイル</h3>
<ul>
<li><strong>入力ファイル:</strong> <a href="https://github.com/fileformat-blog-gists/code/blob/main/working-with-pdf-files-in-python/pdf-to-extract-text/">ダウンロードリンク</a></li>
</ul>
<h3 id="コード実行結果">コード実行結果</h3>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/ab6976aa3a0fc2999093f5f9320a9e20.js?file=Output%20-%20extract-text-from-pdf-using-pypdf-in-python.txt"></script>

<h2 id="2-pythonを使用してpdfページを回転する">2. Pythonを使用してPDFページを回転する</h2>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/760d480cfede4178296c353d60662e1a.js?file=rotate-pdf-page-using-pypdf-in-python.py"></script>

<h3 id="コードの説明-1">コードの説明</h3>
<p>このコードは、<strong>最初のページ</strong>を<strong>90°時計回りに回転</strong>させ、他のページに影響を与えずに修正したPDFを保存します。</p>
<p><strong>1. 必要なクラスのインポート</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> pypdf <span style="color:#f92672">import</span> PdfReader, PdfWriter
</span></span></code></pre></div><ul>
<li><code>PdfReader</code>: 入力PDFを読み取ります。</li>
<li><code>PdfWriter</code>: 修正を加えた新しいPDFを作成します。</li>
</ul>
<p><strong>2. 入力および出力ファイルパスの定義</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>input_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-rotate/input.pdf&#34;</span>
</span></span><span style="display:flex;"><span>output_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-rotate/rotated_output.pdf&#34;</span>
</span></span></code></pre></div><ul>
<li>スクリプトは<code>input.pdf</code>から読み取り、修正済みファイルを<code>rotated_output.pdf</code>として保存します。</li>
</ul>
<p><strong>3. PDFを読み取り、ライターオブジェクトを作成</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>reader <span style="color:#f92672">=</span> PdfReader(input_pdf)
</span></span><span style="display:flex;"><span>writer <span style="color:#f92672">=</span> PdfWriter()
</span></span></code></pre></div><ul>
<li><code>reader</code>は既存のPDFをロードします。</li>
<li><code>writer</code>は修正されたページを格納するために使用します。</li>
</ul>
<p><strong>4. 最初のページを90度回転</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>page <span style="color:#f92672">=</span> reader<span style="color:#f92672">.</span>pages[<span style="color:#ae81ff">0</span>]
</span></span><span style="display:flex;"><span>page<span style="color:#f92672">.</span>rotate(<span style="color:#ae81ff">90</span>)  <span style="color:#75715e"># 90度時計回りに回転</span>
</span></span><span style="display:flex;"><span>writer<span style="color:#f92672">.</span>add_page(page)
</span></span></code></pre></div><ul>
<li><strong>ページ1</strong>を抽出し、<strong>90度回転</strong>させ、新しいPDFに追加します。</li>
</ul>
<p><strong>5. 変更なしで残りのページを追加</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(<span style="color:#ae81ff">1</span>, len(reader<span style="color:#f92672">.</span>pages)):
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>add_page(reader<span style="color:#f92672">.</span>pages[i])
</span></span></code></pre></div><ul>
<li>残りのページをループし、そのまま追加します。</li>
</ul>
<p><strong>6. 新しいPDFを保存</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">with</span> open(output_pdf, <span style="color:#e6db74">&#34;wb&#34;</span>) <span style="color:#66d9ef">as</span> file:
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>write(file)
</span></span></code></pre></div><ul>
<li><code>rotated_output.pdf</code>をバイナリ書き込みモードで開き、新しいPDFを保存します。</li>
</ul>
<p><strong>7. 確認メッセージを印刷</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Rotated page saved to </span><span style="color:#e6db74">{</span>output_pdf<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span></code></pre></div><ul>
<li>成功メッセージを表示します。</li>
</ul>
<h3 id="コードで使用された入力pdfとその回転出力">コードで使用された入力PDFとその回転出力</h3>
<ul>
<li><strong>入力PDFファイル:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-rotate/">ダウンロードリンク</a></li>
<li><strong>出力回転PDFファイル:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-rotate/rotated_output.pdf">ダウンロードリンク</a></li>
</ul>
<p><strong>スクリーンショット</strong>
<img loading="lazy" src="https://raw.githubusercontent.com/fileformat-blog-gists/content/main/working-with-pdf-files-in-python/rotated-pdf.png" alt="Pythonで回転したPDFページのスクリーンショット"  />
</p>
<h2 id="3-pythonを使用してpdfファイルを結合する">3. Pythonを使用してPDFファイルを結合する</h2>
<p>このPythonスクリプトは、<strong>複数のPDFファイル</strong>をディレクトリから1つのPDFに結合する方法を示しています。PyPDFライブラリを使用します。</p>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/a1a571783e0f5e699678d1094bf1afa5.js?file=merge_pdf_files_using_pypdf_in_python.py"></script>

<h3 id="コードの説明-2">コードの説明</h3>
<ul>
<li>このスクリプトは、指定されたディレクトリ（<code>pdfs-to-merge</code>）内のすべてのPDFファイルを、自動的に順番に1つの出力ファイル（<code>merged_output.pdf</code>）に結合します。</li>
<li>出力ディレクトリが存在することを確認し、一覧の順序で各PDFのページを追加します。</li>
<li>最終的にマージされたファイルを<code>output-dir</code>サブディレクトリに出力します。</li>
</ul>
<p><strong>コードの内訳</strong></p>
<p><strong>1. ライブラリのインポート</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> os
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> pypdf <span style="color:#f92672">import</span> PdfReader, PdfWriter
</span></span></code></pre></div><ul>
<li><code>os</code>: ファイルシステムと対話し、ディレクトリの読み取りやファイルパスの管理を行います。</li>
<li><code>PdfReader</code>: PDFのコンテンツを読み取ります。</li>
<li><code>PdfWriter</code>: 新しいPDFファイルを作成して書き込みます。</li>
</ul>
<p><strong>2. ディレクトリと出力ファイルの定義</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>directory <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdfs-to-merge&#34;</span>
</span></span><span style="display:flex;"><span>output_file <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;output-dir/merged_output.pdf&#34;</span>
</span></span></code></pre></div><ul>
<li><code>directory</code>: PDFファイルが格納されているフォルダを指定します。</li>
<li><code>output_file</code>: マージされたPDFの出力パスと名前を定義します。</li>
</ul>
<p><strong>3. 出力ディレクトリが存在しない場合は作成</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>os<span style="color:#f92672">.</span>makedirs(os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(directory, <span style="color:#e6db74">&#34;output-dir&#34;</span>), exist_ok<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)
</span></span></code></pre></div><ul>
<li><strong>出力ディレクトリ</strong>が存在することを確認し、存在しない場合は作成します。</li>
</ul>
<p><strong>4. PdfWriterオブジェクトの作成</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>writer <span style="color:#f92672">=</span> PdfWriter()
</span></span></code></pre></div><ul>
<li><code>writer</code>はすべてのPDFのページを収集し、結合するために使用します。</li>
</ul>
<p><strong>5. ディレクトリ内のすべてのPDFファイルを反復処理</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">for</span> file_name <span style="color:#f92672">in</span> sorted(os<span style="color:#f92672">.</span>listdir(directory)):
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> file_name<span style="color:#f92672">.</span>endswith(<span style="color:#e6db74">&#34;.pdf&#34;</span>):
</span></span><span style="display:flex;"><span>        file_path <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(directory, file_name)
</span></span><span style="display:flex;"><span>        print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Adding: </span><span style="color:#e6db74">{</span>file_name<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span></code></pre></div><ul>
<li>このループは指定されたディレクトリ内のすべてのファイルを処理し、<code>.pdf</code>拡張子を持つファイルをチェックします。<code>sorted()</code>を使用してアルファベット順に処理します。</li>
</ul>
<p><strong>6. 各PDFを読み取り、ライターにページを追加</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>reader <span style="color:#f92672">=</span> PdfReader(file_path)
</span></span><span style="display:flex;"><span>writer<span style="color:#f92672">.</span>append(reader)
</span></span></code></pre></div><ul>
<li>各PDFについて、<code>PdfReader</code>はファイルを読み取り、そのPDFのすべてのページが<code>writer</code>に追加されます。</li>
</ul>
<p><strong>7. マージされたPDFを出力ファイルに書き込む</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>output_path <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(directory, output_file)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">with</span> open(output_path, <span style="color:#e6db74">&#34;wb&#34;</span>) <span style="color:#66d9ef">as</span> output_pdf:
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>write(output_pdf)
</span></span></code></pre></div><ul>
<li>すべてのページを収集した後、<code>writer.write()</code>はマージされたPDFを指定された出力パスに書き込みます。</li>
</ul>
<p><strong>8. 確認メッセージを印刷</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Merged PDF saved as: </span><span style="color:#e6db74">{</span>output_path<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span></code></pre></div><ul>
<li>保存されたマージされたPDFの位置を確認する成功メッセージを印刷します。</li>
</ul>
<h3 id="コードで使用した入力pdfファイルとマージされた出力pdf">コードで使用した入力PDFファイルとマージされた出力PDF</h3>
<ul>
<li><strong>入力PDFファイル:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdfs-to-merge">ダウンロードリンク</a></li>
<li><strong>マージされた出力PDF:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdfs-to-merge/output-dir">ダウンロードリンク</a></li>
</ul>
<h2 id="4-pythonを使用してpdfを分割する">4. Pythonを使用してPDFを分割する</h2>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/0dee64422ac0dcf44cf027d90567bbf8.js?file=split-pdf-using-pypdf-in-python.py"></script>

<h3 id="コードの説明-3">コードの説明</h3>
<p>このPythonスクリプトは、PDFを<strong>ページごとに</strong>分割し、<strong>PyPDF</strong>ライブラリを使用して各ページを個別のPDFファイルとして保存します。最初に出力ディレクトリの存在を確認し、次に入力PDFファイルを読み取り、各ページをループ処理します。新しい<strong>PdfWriter</strong>オブジェクトを作成し、各ページを個別のPDFファイルとして保存します。出力ファイルは**<code>output-dir</code>**フォルダーに連番（例：<strong>page_1.pdf, page_2.pdf</strong>）で保存されます。最後に、各作成されたファイルの確認メッセージを印刷し、プロセスの完了を通知します。</p>
<h3 id="コードで使用されている入力pdfと分割された出力ファイル">コードで使用されている入力PDFと分割された出力ファイル</h3>
<ul>
<li><strong>入力PDFファイル:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-split">ダウンロードリンク</a></li>
<li><strong>分割出力ファイル:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-split/output-dir">ダウンロードリンク</a></li>
</ul>
<h2 id="5-pythonを使用してpdfに透かしを追加する">5. Pythonを使用してPDFに透かしを追加する</h2>
<p>PyPDFライブラリを使用すると、透かしPDFを既存のPDFにオーバーレイすることでPDFに透かしを追加できます。透かしPDFが1ページのみであることを確認してください。それにより、メインPDFの各ページに正しく適用されます。</p>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/af057943580e2fcde6a635df34d7e39a.js?file=watermark-pdf-using-pypdf-in-python.py"></script>

<h3 id="コードの説明-4">コードの説明</h3>
<p>このPythonスクリプトは、入力PDFを読み取り、1ページの透かしPDFを抽出し、各ページに透かしをオーバーレイして、最終的な透かし入りPDFを保存します。</p>
<p><strong>コードの内訳</strong></p>
<p>こちらが各部分の簡単な説明です</p>
<p><strong>1. 必要なクラスをインポート</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> pypdf <span style="color:#f92672">import</span> PdfReader, PdfWriter
</span></span></code></pre></div><ul>
<li><strong><code>PdfReader</code></strong> は既存のPDFを読み取るために使用します。</li>
<li><strong><code>PdfWriter</code></strong> は新しいPDFを作成して書き込むために使用します。</li>
</ul>
<p><strong>2. ファイルパスの定義</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>input_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-watermark/input.pdf&#34;</span>
</span></span><span style="display:flex;"><span>watermark_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-watermark/watermark.pdf&#34;</span>
</span></span><span style="display:flex;"><span>output_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-watermark/output_with_watermark.pdf&#34;</span>
</span></span></code></pre></div><ul>
<li><code>input_pdf</code>: 透かしを追加する元のPDF。</li>
<li><code>watermark_pdf</code>: 透かしとして使用する<strong>1ページ</strong>の別個のPDF。</li>
<li><code>output_pdf</code>: 透かし付きページを含む出力ファイル。</li>
</ul>
<p><strong>3. PDFの読み取り</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>reader <span style="color:#f92672">=</span> PdfReader(input_pdf)
</span></span><span style="display:flex;"><span>watermark <span style="color:#f92672">=</span> PdfReader(watermark_pdf)
</span></span></code></pre></div><ul>
<li><code>reader</code>: 入力PDFを読み取ります。</li>
<li><code>watermark</code>: 透かしPDFを読み取ります。</li>
</ul>
<p><strong>4. ライターオブジェクトの作成</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>writer <span style="color:#f92672">=</span> PdfWriter()
</span></span></code></pre></div><ul>
<li>これは最終的な透かし入りPDFを作成するために使用します。</li>
</ul>
<p><strong>5. 透かしページの抽出</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>watermark_page <span style="color:#f92672">=</span> watermark<span style="color:#f92672">.</span>pages[<span style="color:#ae81ff">0</span>]
</span></span></code></pre></div><ul>
<li>透かしPDFが<strong>1ページのみ</strong>であることを想定し、それをすべてのページにオーバーレイするために使用します。</li>
</ul>
<p><strong>6. 入力PDFページをループ処理し、透かしをマージ</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">for</span> page <span style="color:#f92672">in</span> reader<span style="color:#f92672">.</span>pages:
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># 現在のページに透かしをマージ</span>
</span></span><span style="display:flex;"><span>    page<span style="color:#f92672">.</span>merge_page(watermark_page)
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># マージされたページを作成物に追加</span>
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>add_page(page)
</span></span></code></pre></div><ul>
<li><code>input_pdf</code>の各ページを繰り返し処理します。</li>
<li><strong><code>merge_page(watermark_page)</code></strong> は透かしを現在のページの上にオーバーレイします。</li>
<li>修正されたページを<code>writer</code>に追加します。</li>
</ul>
<p><strong>7. 透かし入りPDFを保存</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">with</span> open(output_pdf, <span style="color:#e6db74">&#34;wb&#34;</span>) <span style="color:#66d9ef">as</span> output_file:
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>write(output_file)
</span></span></code></pre></div><ul>
<li>修正されたページを新しいPDFファイルに書き込みます。</li>
</ul>
<p><strong>8. 確認メッセージを印刷</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Watermarked PDF saved as: </span><span style="color:#e6db74">{</span>output_pdf<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span></code></pre></div><ul>
<li>出力ファイルパスを確認するメッセージを印刷します。</li>
</ul>
<h3 id="入力pdf透かしpdfおよび透かし入り出力pdf">入力PDF、透かしPDF、および透かし入り出力PDF</h3>
<ul>
<li><strong>入力PDFファイル:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-watermark">ダウンロードリンク</a></li>
<li><strong>透かしPDFファイル:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-watermark">ダウンロードリンク</a></li>
<li><strong>透かし入り出力PDFファイル:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-watermark">ダウンロードリンク</a></li>
</ul>
<p><strong>スクリーンショット</strong>
<img loading="lazy" src="https://raw.githubusercontent.com/fileformat-blog-gists/content/main/working-with-pdf-files-in-python/watermark-pdf.png" alt="Pythonで透かしを追加したPDFのスクリーンショット"  />
</p>
<h2 id="結論">結論</h2>
<p>このガイドでは、Pythonにおける重要なPDF操作、テキストの抽出、ページの回転、結合、分割、透かしの追加について探求しました。これらのスキルを用いて、自分自身のPDFマネージャーを構築し、さまざまなPDFタスクを効率的に自動化できます。</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
