Son Güncelleme: 29 Ocak, 2025

Başlık - Python'da PDF Dosyalarıyla Çalışma

Bu makalede, Python kullanarak PDF dosyalarıyla nasıl çalışabileceğinizi göstereceğiz. Bunun için pypdf kütüphanesini kullanacağız.

pypdf kütüphanesini kullanarak Python’da aşağıdaki işlemleri nasıl gerçekleştirebileceğinizi göstereceğiz:

  • PDF’lerden metin çıkarma
  • PDF sayfalarını döndürme
  • Birden fazla PDF’yi birleştirme
  • PDF’leri ayrı dosyalara bölme
  • PDF sayfalarına filigran ekleme

Not: Bu makale birçok değerli detayı içeriyor, bu yüzden sizi en çok ilgilendiren bölümlere atlayabilirsiniz! İçerik kolaylıkla gezilecek şekilde düzenlenmiştir, böylece size en ilgili olan konulara hızlıca odaklanabilirsiniz.

İllüstrasyon - Python'da PDF Dosyalarıyla Çalışma

Örnek Kodlar

Bu makalede kullanılan tüm örnek kodları, aşağıdaki bağlantıdan indirebilirsiniz. Kodlar, giriş ve çıkış dosyalarını içermektedir.

pypdf Kurulumu

pypdf’i yüklemek için komut terminalinizde veya komut isteminde aşağıdaki komutu çalıştırabilirsiniz:

pip install pypdf

Not: Yukarıdaki komut büyük-küçük harfe duyarlıdır.

1. Python Kullanarak Bir PDF Dosyasından Metin Çıkarma

from pypdf import PdfReader
# Path to the PDF file
pdf_file = "pdf-to-extract-text/input.pdf"
# Create a PDF reader object
reader = PdfReader(pdf_file)
# Loop through the pages and extract text
for page_number, page in enumerate(reader.pages, start=1):
print(f"Page {page_number}:")
print(page.extract_text())
print("-" * 50) # Separator for readability

Kod Açıklaması

1. PDF Okuyucu Nesnesi Oluşturma

reader = PdfReader(pdf_file)
  • PdfReader(pdf_file) PDF dosyasını bir okuyucu nesnesine yükler.
  • Bu nesne, sayfalara ve içeriklerine erişimi sağlar.

2. Sayfalar Üzerinden Döngü

for page_number, page in enumerate(reader.pages, start=1):
  • reader.pages PDF’deki sayfaların bir listesini döndürür.
  • enumerate(..., start=1) ile 1’den başlayan bir sayfa numarası atanır.

3. Çıkarılan Metni Yazdırma

    print(f"Sayfa {page_number}:")
    print(page.extract_text())
    print("-" * 50)  # Okunabilirlik için ayırıcı
  • page.extract_text() güncel sayfadan metin içeriğini çıkarır.
  • Betik çıkarılan metni ve sayfa numarasını yazdırır.
  • "-" * 50 daha iyi okunabilirlik için bir ayırıcı çizgi (--------------------------------------------------) basar.

Koddaki Kullanılan Giriş PDF Dosyası

Kodun Çıktısı

Page 1:
Python Tutorial
Release 3.7.0
Guido van Rossum
and the Python development team
September 02, 2018
Python Software Foundation
Email: docs@python.org
--------------------------------------------------
Page 2:
CONTENTS
1 Whetting Y our Appetite 3
2 Using the Python Interpreter 5
2.1 Invoking the Interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 The Interpreter and Its Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 An Informal Introduction to Python 9
3.1 Using Python as a Calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2 First Steps Towards Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4 More Control Flow T ools 19
4.1 if Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2 for Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.3 The range() Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.4 break and continue Statements, andelse Clauses on Loops. . . . . . . . . . . . . . . . . . 21
4.5 pass Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.6 Defining Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.7 More on Defining Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.8 Intermezzo: Coding Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5 Data Structures 31
5.1 More on Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2 The del statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.3 Tuples and Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.4 Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.5 Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.6 Looping Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.7 More on Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.8 Comparing Sequences and Other Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6 Modules 43
6.1 More on Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2 Standard Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.3 The dir() Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.4 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7 Input and Output 53
7.1 Fancier Output Formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.2 Reading and Writing Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
8 Errors and Exceptions 61
i
--------------------------------------------------
Page 3:
Python Tutorial, Release 3.7.0
Python is an easy to learn, powerful programming language. It has efficient high-level data structures and
a simple but effective approach to object-oriented programming. Python’s elegant syntax and dynamic
typing, together with its interpreted nature, make it an ideal language for scripting and rapid application
development in many areas on most platforms.
The Python interpreter and the extensive standard library are freely available in source or binary form for all
major platforms from the Python Web site,https://www.python.org/, and may be freely distributed. The
same site also contains distributions of and pointers to many free third party Python modules, programs
and tools, and additional documentation.
The Python interpreter is easily extended with new functions and data types implemented in C or C++
(or other languages callable from C). Python is also suitable as an extension language for customizable
applications.
This tutorial introduces the reader informally to the basic concepts and features of the Python language
and system. It helps to have a Python interpreter handy for hands-on experience, but all examples are
self-contained, so the tutorial can be read off-line as well.
For a description of standard objects and modules, see library-index. reference-index gives a more formal
definition of the language. To write extensions in C or C++, read extending-index and c-api-index. There
are also several books covering Python in depth.
This tutorial does not attempt to be comprehensive and cover every single feature, or even every commonly
used feature. Instead, it introduces many of Python’s most noteworthy features, and will give you a good
idea of the language’s flavor and style. After reading it, you will be able to read and write Python modules
and programs, and you will be ready to learn more about the various Python library modules described in
library-index.
The
Glossary is also worth going through.
CONTENTS 1
--------------------------------------------------

2. Python Kullanarak PDF Sayfalarını Döndürme

from pypdf import PdfReader, PdfWriter
# Input and output PDF files
input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
# Read the PDF
reader = PdfReader(input_pdf)
writer = PdfWriter()
# Rotate the first page 90 degrees clockwise
page = reader.pages[0]
page.rotate(90) # Rotate 90 degrees clockwise
# Add the rotated page to the writer
writer.add_page(page)
# Add the rest of the pages without modification
for i in range(1, len(reader.pages)):
writer.add_page(reader.pages[i])
# Write the output to a new PDF file
with open(output_pdf, "wb") as file:
writer.write(file)
print(f"Rotated page saved to {output_pdf}")

Kod Açıklaması

Kod temelde ilk sayfayı 90° saat yönünde döndürür ve değiştirilmiş PDF’yi diğer sayfaları etkilemeden kaydeder.

1. İhtiyaç Duyulan Sınıfları İçe Aktarma

from pypdf import PdfReader, PdfWriter
  • PdfReader: Giriş PDF dosyasını okur.
  • PdfWriter: Değişikliklerle yeni bir PDF oluşturur.

2. Giriş ve Çıkış Dosya Yollarını Tanımlama

input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
  • Betik input.pdf dosyasından okur ve değiştirilmiş dosyayı rotated_output.pdf olarak kaydeder.

3. PDF’yi Okuma ve Bir Yazıcı Nesnesi Oluşturma

reader = PdfReader(input_pdf)
writer = PdfWriter()
  • reader mevcut PDF’yi yükler.
  • writer değiştirilmiş sayfaları depolamak için kullanılır.

4. İlk Sayfayı 90 Derece Döndürme

page = reader.pages[0]
page.rotate(90)  # 90 derece saat yönünde döndür
writer.add_page(page)
  • 1. sayfayı çıkarır, 90 derece döndürür ve yeni PDF’ye ekler.

5. Değişiklik Yapmadan Kalan Sayfaları Ekleme

for i in range(1, len(reader.pages)):
    writer.add_page(reader.pages[i])
  • Kalan sayfalar arasında gezinir ve bunları olduğu gibi ekler.

6. Yeni PDF’yi Kaydetme

with open(output_pdf, "wb") as file:
    writer.write(file)
  • rotated_output.pdf dosyasını yazma-ikili modda açar ve yeni PDF’yi kaydeder.

7. Onay Yazdırma

print(f"Döndürülmüş sayfa {output_pdf} olarak kaydedildi")
  • Başarı mesajı görüntüler.

Koddaki Kullanılan Giriş PDF’si ve Döndürülen Çıktısı

Ekran Görüntüsü Dönüştürülen Sayfanın Python Kullanarak PDF’de Ekran Görüntüsü

3. Python Kullanarak PDF Dosyalarını Birleştirme

Bu Python betiği, bir dizindeki birden fazla PDF dosyasını PyPDF kütüphanesini kullanarak tek bir PDF’e nasıl birleştirebileceğinizi gösteriyor.

import os
from pypdf import PdfReader, PdfWriter
# Directory containing PDF files
directory = "pdfs-to-merge"
# Output file name
output_file = "output-dir/merged_output.pdf"
# Ensure the output directory exists
os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
# Create a PdfWriter object
writer = PdfWriter()
# Iterate over all PDF files in the directory
for file_name in sorted(os.listdir(directory)):
if file_name.endswith(".pdf"):
file_path = os.path.join(directory, file_name)
print(f"Adding: {file_name}")
# Read the PDF file
reader = PdfReader(file_path)
# Append all pages to the writer
writer.append(reader)
# Write the merged PDF to an output file
output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
writer.write(output_pdf)
print(f"Merged PDF saved as: {output_path}")

Kod Açıklaması

  • Bu betik, belirtilen dizindeki (pdfs-to-merge) tüm PDF dosyalarını otomatik olarak tek bir çıktı dosyasında (merged_output.pdf) birleştirir.
  • Çıkış dizininin var olup olmadığını kontrol eder ve dosyalar liste sırasına göre eklenir.
  • Nihai birleştirilmiş dosya output-dir alt dizininde çıktılanır.

Kod Anlatımı

1. Kütüphaneleri İçe Aktarma

import os
from pypdf import PdfReader, PdfWriter
  • os: Dosya sistemini okumak ve dosya yollarını yönetmek gibi işlemler için kullanılır.
  • PdfReader: Bir PDF dosyasının içeriğini okur.
  • PdfWriter: Yeni bir PDF dosyası oluşturur ve yazar.

2. Dizin ve Çıktı Dosyasını Tanımlama

directory = "pdfs-to-merge"
output_file = "output-dir/merged_output.pdf"
  • directory: PDF dosyalarının depolandığı klasörü belirtir.
  • output_file: Birleştirilmiş PDF’nin çıktı yolu ve adını tanımlar.

3. Çıkış Dizinini Var Olmadığında Oluşturma

os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
  • Bu, çıkış dizininin varlığını sağlar; yoksa oluşturur.

4. Bir PdfWriter Nesnesi Oluşturma

writer = PdfWriter()
  • writer, tüm sayfaları toplamak ve birleştirmek için kullanılır.

5. Dizindeki Tüm PDF Dosyalarını Yinelemek

for file_name in sorted(os.listdir(directory)):
    if file_name.endswith(".pdf"):
        file_path = os.path.join(directory, file_name)
        print(f"Ekleniyor: {file_name}")
  • Bu döngü, belirtilen dizindeki tüm dosyalar arasında dolaşır ve .pdf uzantılı dosyaları kontrol eder. İşlemi alfabetik sırayla gerçekleştirir sorted() kullanarak.

6. Her Bir PDF’yi Okuma ve Sayfaları Yazıcıya Eklemek

reader = PdfReader(file_path)
writer.append(reader)
  • Her PDF için, PdfReader dosyayı okur ve ardından o PDF’deki tüm sayfalar writera eklenir.

7. Birleştirilmiş PDF’yi Bir Çıkış Dosyasına Yazma

output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
    writer.write(output_pdf)
  • Tüm sayfalar toplandıktan sonra, writer.write() birleştirilmiş PDF’yi belirtilen çıkış yoluna yazar.

8. Onay Yazdırma

print(f"Birleştirilmiş PDF şu adrese kaydedildi: {output_path}")
  • Kaydedilen birleştirilmiş PDF’nin yeri hakkında bir onay mesajı yazdırır.

Koddaki Kullanılan Giriş PDF Dosyaları ve Birleştirilen Çıktı PDF

4. Python Kullanarak Bir PDF’yi Bölme

from pypdf import PdfReader, PdfWriter
import os
# Input PDF file
input_pdf = "pdf-to-split/input.pdf"
# Output directory
output_directory = "pdf-to-split/output-dir"
# Ensure the output directory exists
os.makedirs(output_directory, exist_ok=True)
# Read the input PDF
reader = PdfReader(input_pdf)
# Loop through each page and save it as a separate PDF
for page_num, page in enumerate(reader.pages):
writer = PdfWriter()
writer.add_page(page)
# Define the output file name
output_file = os.path.join(output_directory, f"page_{page_num + 1}.pdf")
# Write the page to a new PDF
with open(output_file, "wb") as output_pdf:
writer.write(output_pdf)
print(f"Created: {output_file}")
print("PDF splitting complete!")

Kod Açıklaması

Yukarıdaki Python betiği, bir PDF’yi sayfalara ayırarak PyPDF kütüphanesi kullanarak her bir sayfayı ayrı ayrı PDF dosyası haline getirir. İlk olarak çıktı dizininin varlığını kontrol eder, ardından giriş PDF dosyasını okur. Betik, her sayfayı döngüye alır, yeni bir PdfWriter nesnesi oluşturur ve her sayfayı ayrı bir PDF dosyası olarak kaydeder. Çıkış dosyaları sıralı olarak adlandırılır (örneğin, page_1.pdf, page_2.pdf) ve output-dir klasörüne kaydedilir. Son olarak, her oluşturulan dosya için bir onay mesajı yazdırır ve işlem tamamlandığında bilgi verir.

Koddaki Kullanılan Giriş PDF ve Bölünmüş Çıktı Dosyaları

5. Python Kullanarak PDF’ye Filigran Ekleme

PyPDF kütüphanesini kullanarak bir PDF dosyasına filigran ekleyebilirsiniz. Bunun için, var olan PDF’ye bir filigran PDF’si bindirilir. Filigran PDF’sinin yalnızca bir sayfası olduğundan emin olun, böylece ana PDF’nin her sayfasına doğru bir şekilde uygulanır.

from pypdf import PdfReader, PdfWriter
# Paths for the input PDF and watermark PDF
input_pdf = "pdf-to-watermark/input.pdf"
watermark_pdf = "pdf-to-watermark/watermark.pdf"
output_pdf = "pdf-to-watermark/output_with_watermark.pdf"
# Read the input PDF and watermark PDF
reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
# Create a PdfWriter object for the output PDF
writer = PdfWriter()
# Ensure the watermark has only one page (it should be one-page PDF)
watermark_page = watermark.pages[0]
# Loop through each page in the input PDF
for page in reader.pages:
# Merge the watermark with the current page
page.merge_page(watermark_page)
# Add the merged page to the writer
writer.add_page(page)
# Write the output PDF with watermark
with open(output_pdf, "wb") as output_file:
writer.write(output_file)
print(f"Watermarked PDF saved as: {output_pdf}")

Kod Açıklaması

Yukarıdaki Python betiği, bir giriş PDF’sini okur, tek sayfalık bir filigran PDF’si çıkarır, filigranı giriş PDF’sinin her sayfasına bindirir ve nihai filigranlanmış PDF’yi kaydeder.

Kod Anlatımı

Her bölümün kısa bir açıklaması

1. İhtiyaç Duyulan Sınıfları İçe Aktarma

from pypdf import PdfReader, PdfWriter
  • PdfReader mevcut PDF’leri okumak için kullanılır.
  • PdfWriter yeni bir PDF oluşturmak ve yazmak için kullanılır.

2. Dosya Yollarını Tanımlama

input_pdf = "pdf-to-watermark/input.pdf"
watermark_pdf = "pdf-to-watermark/watermark.pdf"
output_pdf = "pdf-to-watermark/output_with_watermark.pdf"
  • input_pdf: Filigran eklenecek olan orijinal PDF.
  • watermark_pdf: Filigran olarak hizmet veren ayrı tek sayfalık PDF.
  • output_pdf: Filigranlanmış sayfaları içerecek çıkış dosyası.

3. PDF’leri Okuma

reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
  • reader: Giriş PDF’sini okur.
  • watermark: Filigran PDF’sini okur.

4. Bir Yazıcı Nesnesi Oluşturma

writer = PdfWriter()
  • Bu, filigranlanmış nihai PDF’yi oluşturmak için kullanılacak.

5. Filigran Sayfasını Çıkarma

watermark_page = watermark.pages[0]
  • Filigran PDF’sinin yalnızca bir sayfa olduğununu varsayar, bu tüm sayfalara bindirilir.

6. Giriş PDF Sayfaları Üzerinden Döngü ve Filigran ile Birleştirme

for page in reader.pages:
    # Filigranı mevcut sayfa ile birleştirme
    page.merge_page(watermark_page)
    
    # Birleştirilmiş sayfayı yazıcıya ekleme
    writer.add_page(page)
  • input_pdf her sayfa üzerinde iterasyon yapar.
  • merge_page(watermark_page) filigranı mevcut sayfanın üzerine bindirir.
  • Değiştirilen sayfayı writera ekler.

7. Filigranlı PDF’yi Kaydetme

with open(output_pdf, "wb") as output_file:
    writer.write(output_file)
  • Değiştirilen sayfaları yeni bir PDF dosyasına yazar.

8. Onay Yazdırma

print(f"Filigranlanmış PDF şu adrese kaydedildi: {output_pdf}")
  • Onay için çıkış dosyası yolunu yazdırır.

Giriş PDF, Filigran PDF ve Çıkış Filigranlı PDF

Ekran Görüntüsü Python Kullanarak Filigran Eklenmiş PDF’nin Ekran Görüntüsü

Sonuç

Bu kılavuzda, Python’da metin çıkarma, sayfaları döndürme, birleştirme, bölme ve filigran ekleme gibi temel PDF işlemlerini inceledik. Bu becerilerle, kendi PDF yöneticinizi oluşturabilir ve çeşitli PDF görevlerini verimli bir şekilde otomatikleştirebilirsiniz.