<?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/ko/tag/python-programming/</link>
    <description>Recent content in python programming on File Format Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ko</language>
    <lastBuildDate>Wed, 29 Jan 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.fileformat.com/ko/tag/python-programming/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Python에서 PDF 파일 작업하기</title>
      <link>https://blog.fileformat.com/ko/programming/working-with-pdf-files-in-python/</link>
      <pubDate>Wed, 29 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://blog.fileformat.com/ko/programming/working-with-pdf-files-in-python/</guid>
      <description>Python 라이브러리와 간단한 코드 예제를 사용하여 PDF에서 텍스트를 추출하고, PDF 페이지를 회전하고, 여러 PDFs를 병합하고, PDFs를 분할하고, 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>이 문서에서는 <strong>Python을 사용하여 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">코드에 사용된 입력 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>을 디렉토리에서 하나의 PDF로 병합하는 방법을 보여줍니다.</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 파일을 자동으로 병합하여 하나의 출력 파일 (<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 읽기 및 페이지를 Writer에 추가하기</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 스크립트는 <strong>PyPDF</strong> 라이브러리를 사용하여 PDF를 각기 다른 페이지로 분할합니다. 먼저 출력 디렉토리가 존재하는지 확인한 다음 입력 PDF 파일을 읽습니다. 스크립트는 각 페이지를 순회하여 새로운 <strong>PdfWriter</strong> 객체를 생성하고 각 페이지를 개별 PDF 파일로 저장합니다. 출력 파일은 순차적으로 명명(예: <strong>page_1.pdf, page_2.pdf</strong>)되며 <strong><code>output-dir</code></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>Python에서는 기존 PDF 위에 워터마크 PDF를 중첩하여 PyPDF 라이브러리를 사용하여 PDF에 워터마크를 추가할 수 있습니다. 워터마크 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를 읽고 단일 페이지의 워터마크 PDF를 추출하여 입력 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>**<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-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>단일 페이지</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>단일 페이지</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>**<code>merge_page(watermark_page)</code>**는 워터마크를 현재 페이지에 오버레이합니다.</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>
