<?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/id/tag/python-programming/</link>
    <description>Recent content in python programming on File Format Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>id</language>
    <lastBuildDate>Wed, 29 Jan 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.fileformat.com/id/tag/python-programming/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Mengelola File PDF dengan Python</title>
      <link>https://blog.fileformat.com/id/programming/working-with-pdf-files-in-python/</link>
      <pubDate>Wed, 29 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://blog.fileformat.com/id/programming/working-with-pdf-files-in-python/</guid>
      <description>Pelajari cara mengekstrak teks dari PDF di Python, memutar halaman PDF, menggabungkan beberapa PDF, membagi PDF, dan menambahkan watermark ke PDF menggunakan pustaka Python dan contoh kode sederhana.</description>
      <content:encoded><![CDATA[<p><strong>Terakhir Diperbarui</strong>: 29 Jan, 2025</p>
<figure class="align-center ">
    <img loading="lazy" src="images/working-with-pdf-files-in-python.png#center"
         alt="Judul - Mengelola File PDF dengan Python"/> 
</figure>

<p>Pada artikel ini, kami akan memandu Anda tentang <strong>cara mengelola file PDF menggunakan Python</strong>. Untuk ini, kita akan memanfaatkan pustaka <a href="https://pypi.org/project/pypdf/"><strong>pypdf</strong></a>.</p>
<p>Menggunakan pustaka <strong>pypdf</strong>, kami akan mendemonstrasikan bagaimana melakukan operasi berikut di Python:</p>
<ul>
<li>Mengekstrak teks dari PDF</li>
<li>Memutar halaman PDF</li>
<li>Menggabungkan beberapa PDF</li>
<li>Membagi PDF menjadi file terpisah</li>
<li>Menambahkan watermark ke halaman PDF</li>
</ul>
<p><em><strong>Catatan</strong>: Artikel ini mencakup banyak detail berharga, jadi jangan ragu untuk melewati bagian yang paling menarik untuk Anda! Konten diatur untuk navigasi yang mudah, sehingga Anda bisa fokus cepat pada apa yang paling relevan untuk Anda.</em></p>
<figure class="align-center ">
    <img loading="lazy" src="images/pdf-manipulation-with-pypdf.webp#center"
         alt="Ilustrasi - Mengelola File PDF dengan Python"/> 
</figure>

<h2 id="contoh-kode">Contoh Kode</h2>
<p>Anda dapat mengunduh semua kode contoh yang digunakan dalam artikel ini dari tautan berikut. Ini mencakup kode, file input, dan file output.</p>
<ul>
<li><a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python">Contoh Kode dan File Input untuk Mengelola File PDF dengan Python</a></li>
</ul>
<h2 id="instalasi-pypdf">Instalasi pypdf</h2>
<p>Untuk menginstal pypdf, jalankan perintah berikut di terminal atau command prompt Anda:</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>Catatan:</strong> Perintah di atas peka terhadap huruf besar-kecil.</p>
<h2 id="1-mengekstrak-teks-dari-file-pdf-menggunakan-python">1. Mengekstrak Teks dari File PDF Menggunakan Python</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="penjelasan-kode"><strong>Penjelasan Kode</strong></h3>
<p><strong>1. Membuat Objek Pembaca 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> memuat file PDF ke dalam <strong>objek pembaca</strong>.</li>
<li>Objek ini memungkinkan akses ke halaman dan isinya.</li>
</ul>
<p><strong>2. Melakukan Perulangan Pada Halaman</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> mengembalikan daftar halaman dalam PDF.</li>
<li><code>enumerate(..., start=1)</code> memberikan <strong>nomor halaman mulai dari 1</strong>.</li>
</ul>
<p><strong>3. Mencetak Teks yang Diambil</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"># Pemisah untuk keterbacaan</span>
</span></span></code></pre></div><ul>
<li><code>page.extract_text()</code> mengekstrak konten teks dari halaman saat ini.</li>
<li>Skrip mencetak teks yang diekstrak beserta <strong>nomor halaman</strong>.</li>
<li><code>&quot;-&quot; * 50</code> mencetak garis pemisah (<code>--------------------------------------------------</code>) agar lebih mudah dibaca.</li>
</ul>
<h3 id="file-pdf-input-yang-digunakan-dalam-kode">File PDF Input yang Digunakan dalam Kode</h3>
<ul>
<li><strong>File Input:</strong> <a href="https://github.com/fileformat-blog-gists/code/blob/main/working-with-pdf-files-in-python/pdf-to-extract-text/">Link Unduh</a></li>
</ul>
<h3 id="output-dari-kode">Output dari Kode</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-memutar-halaman-pdf-menggunakan-python">2. Memutar Halaman PDF Menggunakan Python</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="penjelasan-kode-1">Penjelasan Kode</h3>
<p>Kode tersebut pada dasarnya memutar <strong>halaman pertama</strong> sebanyak <strong>90° searah jarum jam</strong> dan menyimpan PDF yang telah dimodifikasi tanpa memengaruhi halaman lain.</p>
<p><strong>1. Mengimpor Kelas yang Diperlukan</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>: Membaca PDF input.</li>
<li><code>PdfWriter</code>: Membuat PDF baru dengan modifikasi.</li>
</ul>
<p><strong>2. Menentukan Jalur File Input dan Output</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>Skrip membaca dari <code>input.pdf</code> dan menyimpan file yang dimodifikasi sebagai <code>rotated_output.pdf</code>.</li>
</ul>
<p><strong>3. Membaca PDF dan Membuat Objek Penulis</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> memuat PDF yang ada.</li>
<li><code>writer</code> digunakan untuk menyimpan halaman yang dimodifikasi.</li>
</ul>
<p><strong>4. Memutar Halaman Pertama Sebesar 90 Derajat</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"># Memutar 90 derajat searah jarum jam</span>
</span></span><span style="display:flex;"><span>writer<span style="color:#f92672">.</span>add_page(page)
</span></span></code></pre></div><ul>
<li>Memilih halaman <strong>1</strong>, memutar <strong>90 derajat</strong>, dan menambahkannya ke PDF baru.</li>
</ul>
<p><strong>5. Menambah Halaman Tersisa Tanpa Perubahan</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>Melakukan perulangan melalui halaman lain dan menambahkannya sebagaimana adanya.</li>
</ul>
<p><strong>6. Menyimpan PDF Baru</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>Membuka <code>rotated_output.pdf</code> dalam mode tulis-biner dan menyimpan PDF baru.</li>
</ul>
<p><strong>7. Mencetak Konfirmasi</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>Menampilkan pesan keberhasilan.</li>
</ul>
<h3 id="file-pdf-input-yang-digunakan-dalam-kode-dan-output-yang-sudah-diputar">File PDF Input yang Digunakan dalam Kode dan Output yang Sudah Diputar</h3>
<ul>
<li><strong>File PDF Input:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-rotate/">Link Unduh</a></li>
<li><strong>File PDF Output yang Diputar:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-rotate/rotated_output.pdf">Link Unduh</a></li>
</ul>
<p><strong>Screenshot</strong>
<img loading="lazy" src="https://raw.githubusercontent.com/fileformat-blog-gists/content/main/working-with-pdf-files-in-python/rotated-pdf.png" alt="Screenshot dari Halaman yang Diputar dalam PDF Menggunakan Python"  />
</p>
<h2 id="3-menggabungkan-file-pdf-menggunakan-python">3. Menggabungkan File PDF Menggunakan Python</h2>
<p>Skrip Python ini menunjukkan cara untuk <strong>menggabungkan beberapa file PDF</strong> dari direktori menjadi satu PDF menggunakan pustaka <strong>PyPDF</strong>.</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="penjelasan-kode-2">Penjelasan Kode</h3>
<ul>
<li>Skrip ini secara otomatis menggabungkan semua file PDF yang ditemukan di direktori yang ditentukan (<code>pdfs-to-merge</code>) ke dalam satu file output (<code>merged_output.pdf</code>).</li>
<li>Ia memastikan bahwa direktori output ada dan menambahkan halaman dari tiap PDF dalam urutan yang ada.</li>
<li>Ia menghasilkan file gabungan akhir di subdirektori <code>output-dir</code>.</li>
</ul>
<p><strong>Pembagian Kode</strong></p>
<p><strong>1. Mengimpor Pustaka</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>: Digunakan untuk berinteraksi dengan sistem file, seperti membaca direktori dan mengelola jalur file.</li>
<li><code>PdfReader</code>: Membaca konten dari file PDF.</li>
<li><code>PdfWriter</code>: Membuat dan menulis file PDF baru.</li>
</ul>
<p><strong>2. Menentukan Direktori dan File Output</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>: Menentukan folder di mana file PDF disimpan.</li>
<li><code>output_file</code>: Menentukan jalur output dan nama dari PDF yang digabungkan.</li>
</ul>
<p><strong>3. Membuat Direktori Output jika Tidak Ada</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>Ini memastikan <strong>direktori output</strong> ada, dan jika tidak, ia membuatnya.</li>
</ul>
<p><strong>4. Membuat Objek 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> digunakan untuk mengumpulkan dan menggabungkan semua halaman dari PDF.</li>
</ul>
<p><strong>5. Melakukan Perulangan Pada Semua File PDF di Direktori</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>Loop ini berjalan melalui semua file di direktori yang ditentukan, memeriksa file dengan ekstensi <code>.pdf</code>. Ia menggunakan <code>sorted()</code> untuk memprosesnya dalam urutan abjad.</li>
</ul>
<p><strong>6. Membaca Setiap PDF dan Menambah Halaman ke Penulis</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>Untuk setiap PDF, <code>PdfReader</code> membaca file, dan kemudian semua halaman dari PDF tersebut ditambahkan ke <code>writer</code>.</li>
</ul>
<p><strong>7. Menulis PDF yang Digabungkan ke File Output</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>Setelah mengumpulkan semua halaman, <code>writer.write()</code> menulis PDF yang digabungkan ke jalur output yang ditentukan.</li>
</ul>
<p><strong>8. Mencetak Konfirmasi</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>Mencetak pesan keberhasilan yang mengonfirmasikan lokasi file PDF yang digabungkan.</li>
</ul>
<h3 id="file-pdf-input-yang-digunakan-dalam-kode-dan-pdf-output-yang-digabungkan">File PDF Input yang Digunakan dalam Kode dan PDF Output yang Digabungkan</h3>
<ul>
<li><strong>File PDF Input:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdfs-to-merge">Link Unduh</a></li>
<li><strong>PDF Output yang Digabungkan:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdfs-to-merge/output-dir">Link Unduh</a></li>
</ul>
<h2 id="4-membagi-pdf-menggunakan-python">4. Membagi PDF Menggunakan Python</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="penjelasan-kode-3">Penjelasan Kode</h3>
<p>Skrip Python di atas membagi PDF menjadi beberapa halaman menggunakan pustaka <strong>PyPDF</strong>. Pertama, ia memastikan bahwa direktori output ada, kemudian membaca file PDF input. Skrip melakukan perulangan pada setiap halaman, membuat objek <strong>PdfWriter</strong> baru, dan menyimpan setiap halaman sebagai file PDF individu. File output diberi nama berurutan (misalnya, <strong>page_1.pdf, page_2.pdf</strong>) dan disimpan di folder <strong><code>output-dir</code></strong>. Akhirnya, ia mencetak pesan konfirmasi untuk setiap file yang dibuat dan memberi tahu saat proses selesai.</p>
<h3 id="pdf-input-dan-file-output-yang-dibagi">PDF Input dan File Output yang Dibagi</h3>
<ul>
<li><strong>File PDF Input:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-split">Link Unduh</a></li>
<li><strong>File Output yang Dibagi:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-split/output-dir">Link Unduh</a></li>
</ul>
<h2 id="5-menambahkan-watermark-ke-pdf-menggunakan-python">5. Menambahkan Watermark ke PDF Menggunakan Python</h2>
<p>Anda dapat menambahkan watermark pada PDF menggunakan pustaka PyPDF dengan menutupi PDF watermark ke PDF yang ada. Pastikan PDF watermark hanya memiliki satu halaman sehingga dapat diterapkan dengan benar ke setiap halaman dari PDF utama.</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="penjelasan-kode-4">Penjelasan Kode</h3>
<p>Skrip Python di atas membaca PDF input, mengekstrak PDF watermark satu halaman, menutupi watermark pada setiap halaman dari PDF input, dan menyimpan PDF yang telah diberi watermark.</p>
<p><strong>Pembagian Kode</strong></p>
<p>Berikut adalah penjelasan singkat tentang setiap bagian</p>
<p><strong>1. Mengimpor Kelas yang Diperlukan</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> digunakan untuk membaca PDF yang ada.</li>
<li><strong><code>PdfWriter</code></strong> digunakan untuk membuat dan menulis PDF baru.</li>
</ul>
<p><strong>2. Menentukan Jalur File</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 asli yang akan ditambahkan watermark.</li>
<li><code>watermark_pdf</code>: PDF terpisah dengan <strong>satu halaman</strong> yang berfungsi sebagai watermark.</li>
<li><code>output_pdf</code>: File output yang akan berisi halaman yang telah diberi watermark.</li>
</ul>
<p><strong>3. Membaca 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>: Membaca PDF input.</li>
<li><code>watermark</code>: Membaca PDF watermark.</li>
</ul>
<p><strong>4. Membuat Objek Penulis</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>Ini akan digunakan untuk membuat PDF akhir yang telah diberi watermark.</li>
</ul>
<p><strong>5. Mengekstrak Halaman Watermark</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>Asumsikan bahwa PDF watermark hanya memiliki <strong>satu halaman</strong>, yang akan digunakan untuk menutupi semua halaman.</li>
</ul>
<p><strong>6. Melakukan Perulangan Pada Halaman PDF Input &amp; Menggabungkan Watermark</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"># Menggabungkan watermark dengan halaman saat ini</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"># Menambahkan halaman yang telah digabungkan ke penulis</span>
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>add_page(page)
</span></span></code></pre></div><ul>
<li>Melakukan iterasi pada setiap halaman dari <code>input_pdf</code>.</li>
<li><strong><code>merge_page(watermark_page)</code></strong> menutupi watermark di atas halaman saat ini.</li>
<li>Menambahkan halaman yang telah dimodifikasi ke dalam <code>writer</code>.</li>
</ul>
<p><strong>7. Menyimpan PDF yang Telah Diberi Watermark</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>Menulis halaman yang telah dimodifikasi ke dalam file PDF baru.</li>
</ul>
<p><strong>8. Mencetak Konfirmasi</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>Mencetak jalur file output untuk konfirmasi.</li>
</ul>
<h3 id="pdf-input-pdf-watermark-dan-pdf-output-yang-telah-diberi-watermark">PDF Input, PDF Watermark, dan PDF Output yang Telah Diberi Watermark</h3>
<ul>
<li><strong>File PDF Input:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-watermark">Link Unduh</a></li>
<li><strong>File PDF Watermark:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-watermark">Link Unduh</a></li>
<li><strong>File PDF Output yang Telah Diberi Watermark:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-watermark">Link Unduh</a></li>
</ul>
<p><strong>Screenshot</strong>
<img loading="lazy" src="https://raw.githubusercontent.com/fileformat-blog-gists/content/main/working-with-pdf-files-in-python/watermark-pdf.png" alt="Screenshot dari PDF yang Diberi Watermark Menggunakan Python"  />
</p>
<h2 id="kesimpulan">Kesimpulan</h2>
<p>Dalam panduan ini, kami mengeksplorasi operasi PDF penting di Python, termasuk mengekstrak teks, memutar halaman, menggabungkan, membagi, dan menambahkan watermark. Dengan keterampilan ini, Anda sekarang dapat membangun pengelola PDF Anda sendiri dan mengotomatisasi berbagai tugas PDF secara efisien.</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
