Son Güncelleme: 29 Ocak, 2025

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.

Ö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ı
- Giriş Dosyası: İndirme Bağlantısı
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ı
- Giriş PDF Dosyası: İndirme Bağlantısı
- Döndürülen Çıktı PDF Dosyası: İndirme Bağlantısı
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ştirirsorted()
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 sayfalarwriter
a 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
- Giriş PDF Dosyaları: İndirme Bağlantısı
- Birleştirilen Çıktı PDF: İndirme Bağlantısı
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ı
- Giriş PDF Dosyası: İndirme Bağlantısı
- Bölünmüş Çıkış Dosyaları: İndirme Bağlantısı
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ı
writer
a 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
- Giriş PDF Dosyası: İndirme Bağlantısı
- Filigran PDF Dosyası: İndirme Bağlantısı
- Çıkış Filigranlı PDF Dosyası: İndirme Bağlantısı
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.