Instala la biblioteca PyPDF2
, que permite manipular archivos PDF.
pip install PyPDF2
Dividir PDF
En las páginas que se indiquen.
import sys
from PyPDF2 import PdfReader, PdfWriter
def split_pdf(input_pdf, start_page, end_page, output_pdf):
reader = PdfReader(input_pdf)
writer = PdfWriter()
for i in range(start_page - 1, end_page):
writer.add_page(reader.pages[i])
with open(output_pdf, 'wb') as out_file:
writer.write(out_file)
if __name__ == "__main__":
if len(sys.argv) != 5:
print("Uso: python split_pdf.py <archivo.pdf> <pagina_inicial> <pagina_final> <salida.pdf>")
sys.exit(1)
input_pdf = sys.argv[1]
start_page = int(sys.argv[2])
end_page = int(sys.argv[3])
output_pdf = sys.argv[4]
split_pdf(input_pdf, start_page, end_page, output_pdf)
Combinar PDFs
Indicando la Carpeta que los contiene
import os
import re
import argparse
from PyPDF2 import PdfMerger
def extract_number_from_filename(filename):
# Utilizar una expresión regular para extraer el primer número que aparezca en el nombre del archivo
match = re.search(r'\d+', filename)
return int(match.group()) if match else float('inf') # Si no se encuentra un número, asignar un valor muy alto
def merge_pdfs_in_folder(folder_path, output_pdf='merged_output.pdf'):
# Crear una instancia de PdfMerger
merger = PdfMerger()
# Obtener todos los archivos PDF en la carpeta
pdf_files = [f for f in os.listdir(folder_path) if f.endswith('.pdf')]
# Ordenar los archivos numéricamente por el número en su nombre
pdf_files.sort(key=extract_number_from_filename)
# Verificar si hay archivos PDF en la carpeta
if not pdf_files:
print("No se encontraron archivos PDF en la carpeta.")
return
# Recorrer cada archivo PDF y agregarlo al merger
for pdf in pdf_files:
pdf_path = os.path.join(folder_path, pdf)
print(f"Añadiendo {pdf_path}")
merger.append(pdf_path)
# Guardar el PDF combinado en el archivo de salida
with open(output_pdf, 'wb') as output_file:
merger.write(output_file)
# Cerrar la instancia de PdfMerger
merger.close()
print(f"PDFs combinados exitosamente en: {output_pdf}")
if __name__ == "__main__":
# Configuración de argumentos para pasar la carpeta y el nombre del archivo de salida
parser = argparse.ArgumentParser(description="Combina todos los archivos PDF en una carpeta.")
parser.add_argument('folder', type=str, help='Ruta de la carpeta que contiene los archivos PDF.')
parser.add_argument('--output', type=str, default='merged_output.pdf', help='Nombre del archivo PDF de salida (opcional).')
# Parsear los argumentos
args = parser.parse_args()
# Llamar a la función para combinar los PDFs
merge_pdfs_in_folder(args.folder, args.output)