Как объединить файлы pdf с помощью python, не сохраняя их в локальном каталоге

У меня есть несколько файлов pdf, которые загружены на удаленный сервер. У меня есть URL для каждого файла, и мы можем скачать эти PDF файлы, посетив эти URL.

Мой вопрос в том,

Я хочу объединить все pdf файлы в один файл (но, не сохраняя эти файлы в локальной директории). Как я могу это сделать (в модуле python 'PyPDF2')?

Пожалуйста, переместитесь в pypdf. По сути это то же самое, что и PyPDF2, но разработка будет продолжаться там (я являюсь сопровождающим обоих проектов).

На ваш вопрос есть ответ в документации:

Вместо записи в файл, вы пишете в io.ByteIO поток:

from io import ByteIO

# e.g. writer = PdfWriter()
# ... do what you want to do with the PDFs

with BytesIO() as bytes_stream:
    writer.write(bytes_stream)
    bytes_stream.seek(0)
    data = bytes_stream.read()  # that is now the "bytes" represention

Чтобы объединить PDF файлы без сохранения их локально, вы можете использовать библиотеку requests для загрузки содержимого каждого файла, а затем передать содержимое классу PdfFileReader в библиотеке PyPDF2.

import requests
import PyPDF2
from io import BytesIO

def merge_pdfs_remotely(urls, output_filename):
    # Create a list of file-like objects from the URLs
    file_streams = [BytesIO(requests.get(url).content) for url in urls]
    
    # Create the PDF merger object
    merger = PyPDF2.PdfFileMerger()
    
    # Add each PDF file to the merger
    for stream in file_streams:
        merger.append(PyPDF2.PdfFileReader(stream))
Вернуться на верх