# Python pypdf Module

`pypdf` is a free and open-source pure-python PDF library capable of splitting, merging, cropping, and transforming the pages of PDF files. It can also add custom data, viewing options, and passwords to PDF files.

## Installation

```bash
pip install pypdf
```

## Reading PDFs

You can extract text and metadata from existing PDFs.

```python
from pypdf import PdfReader

reader = PdfReader("example.pdf")

# Number of pages
print(len(reader.pages))

# Extract text from the first page
page = reader.pages[0]
text = page.extract_text()
print(text)
```

## Merging PDFs

A common use case is combining multiple PDFs into one.

```python
from pypdf import PdfWriter

merger = PdfWriter()

pdfs = ["file1.pdf", "file2.pdf", "file3.pdf"]

for pdf in pdfs:
    merger.append(pdf)

merger.write("merged-result.pdf")
merger.close()
```

## Splitting PDFs

You can save individual pages as separate files.

```python
from pypdf import PdfReader, PdfWriter

reader = PdfReader("merged-result.pdf")

for i, page in enumerate(reader.pages):
    writer = PdfWriter()
    writer.add_page(page)
    
    with open(f"page_{i}.pdf", "wb") as output_pdf:
        writer.write(output_pdf)
```

## Rotating Pages

```python
from pypdf import PdfReader, PdfWriter

reader = PdfReader("original.pdf")
writer = PdfWriter()

# Rotate the first page 90 degrees clockwise
writer.add_page(reader.pages[0].rotate(90))

# Add the rest unchanged
for page in reader.pages[1:]:
    writer.add_page(page)

with open("rotated.pdf", "wb") as f:
    writer.write(f)
```

[[programming/python/python]]