A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Merge multiple PDF files with control over page ranges, bookmarks, document properties, and advanced merging options. The PdfMerger class provides comprehensive PDF combination capabilities.
Main class for merging multiple PDF files with advanced options for page selection, bookmark management, and document structure preservation.
class PdfMerger:
def __init__(self, strict: bool = False, fileobj: Union[Path, str, bytes] = ""):
"""
Initialize a PdfMerger instance.
Args:
strict: Whether to raise exceptions for correctable problems (default: False)
fileobj: Optional output file path or object
"""
def merge(
self,
page_number: int,
fileobj,
outline_item: str = None,
pages = None,
import_outline: bool = True
) -> None:
"""
Merge pages from a PDF at a specific position.
Args:
page_number (int): Position to insert pages at
fileobj (str or file-like): PDF file to merge from
outline_item (str, optional): Bookmark title for merged section
pages (PageRange or slice, optional): Page range to merge (default: all pages)
import_outline (bool): Whether to import bookmarks (default: True)
"""
def append(
self,
fileobj,
outline_item: str = None,
pages = None,
import_outline: bool = True
) -> None:
"""
Append pages from a PDF to the end.
Args:
fileobj (str or file-like): PDF file to append from
outline_item (str, optional): Bookmark title for appended section
pages (PageRange or slice, optional): Page range to append (default: all pages)
import_outline (bool): Whether to import bookmarks (default: True)
"""
def write(self, fileobj) -> None:
"""
Write the merged PDF to a file.
Args:
fileobj (str or file-like): Output file path or object
"""
def close(self) -> None:
"""Close the merger and release resources."""
def add_metadata(self, infos: Dict[str, Any]) -> None:
"""
Add metadata to the merged PDF.
Args:
infos (dict): Metadata dictionary with keys like 'Title', 'Author', etc.
"""
def set_page_layout(self, layout: str) -> None:
"""
Set the page layout for the merged PDF.
Args:
layout: Page layout type
"""
def set_page_mode(self, mode: PagemodeType) -> None:
"""
Set the page mode for the merged PDF.
Args:
mode (PagemodeType): Page mode type
"""
def add_outline_item(
self,
title: str,
page_number: int,
parent: IndirectObject = None,
color: Tuple[float, float, float] = None,
bold: bool = False,
italic: bool = False,
fit: str = "/Fit",
*args
) -> IndirectObject:
"""
Add an outline (bookmark) item to the merged PDF.
Args:
title (str): Bookmark title
page_number (int): Target page number
parent (IndirectObject, optional): Parent bookmark
color (tuple, optional): RGB color tuple
bold (bool): Bold text (default: False)
italic (bool): Italic text (default: False)
fit (FitType): Fit type for destination
Returns:
IndirectObject: Created outline item
"""
def add_named_destination(self, title: str, page_number: int) -> None:
"""
Add a named destination to the merged PDF.
Args:
title (str): Destination name
page_number (int): Target page number
"""from PyPDF2 import PdfMerger
# Create merger instance
merger = PdfMerger()
# Append entire files
merger.append("document1.pdf")
merger.append("document2.pdf")
merger.append("document3.pdf")
# Write merged result
merger.write("merged_document.pdf")
merger.close()from PyPDF2 import PdfMerger, PageRange
merger = PdfMerger()
# Append specific pages using PageRange
merger.append("document1.pdf", pages=PageRange("1:5")) # Pages 1-4
merger.append("document2.pdf", pages=PageRange("::2")) # Every other page
merger.append("document3.pdf", pages=PageRange("10:")) # Page 10 to end
# Using slice notation
merger.append("document4.pdf", pages=slice(0, 3)) # First 3 pages
merger.write("selective_merge.pdf")
merger.close()class PdfFileMerger:
"""DEPRECATED: Use PdfMerger instead. Will be removed in PyPDF2 3.0.0."""This class is deprecated and should not be used in new code. All functionality has been moved to PdfMerger with the same API.
Install with Tessl CLI
npx tessl i tessl/pypi-py-pdf2