Извлечение вложений из PDF

Извлечение конкретного вложения из PDF

Извлеките один встраиваемый файл из PDF‑документа с помощью Python и Aspose.PDF. Он ищет вложение по имени, извлекает его содержимое и сохраняет как отдельный файл. Это полезно для доступа к вложенным документам, таким как отчёты, журналы или вспомогательные файлы, хранящиеся внутри PDF.

  1. Определите функцию ‘extract_single_attachment()’.
  2. Откройте PDF‑документ.
  3. Найдите вложение.
  4. Извлеките содержимое вложения.
import aspose.pdf as ap

def extract_single_attachment(infile, attachment_name, outfile):
    with ap.Document(infile) as document:
        print(f"Extracting attachment: {attachment_name}")

        attachment_found = False
        for file_spec in document.embedded_files:
            if file_spec.name == attachment_name:
                with open(outfile, "wb") as f:
                    f.write(file_spec.contents.read())
                print("Attachment extracted successfully")
                attachment_found = True
                break

        if not attachment_found:
            raise ValueError(f"Attachment '{attachment_name}' not found in PDF")

Отобразить метаданные файлового вложения

Эта вспомогательная функция выводит информацию о метаданных из объекта спецификации файла. Обычно она используется при работе с внедрёнными файловыми вложениями в PDF с помощью Aspose.PDF, позволяя разработчикам просматривать такие детали, как контрольная сумма, дата создания, дата модификации и размер файла.

def _print_file_params(params):
    """Helper to print file specification parameters."""
    if params:
        print(f"CheckSum: {params.check_sum}")
        print(f"Creation Date: {params.creation_date}")
        print(f"Modification Date: {params.mod_date}")
        print(f"Size: {params.size}")

Извлечение и проверка всех вложений PDF

Этот фрагмент кода демонстрирует, как извлекать все вложенные файлы из PDF‑документа с использованием Python и Aspose.PDF. Он не только сохраняет каждое вложение в указанную папку, но и выводит подробные метаданные, такие как имя файла, описание, тип MIME, контрольная сумма и метки времени. Это полезно для аудита, экспорта или обработки вложенного контента в PDF‑файлах.

from os import path
import aspose.pdf as ap

def extract_attachments(infile, output_dir):
    with ap.Document(infile) as document:
        print(f"Total files: {len(document.embedded_files)}")

        for file_spec in document.embedded_files:
            print(f"Name: {file_spec.name}")
            print(f"Description: {file_spec.description}")
            print(f"Mime Type: {file_spec.mime_type}")
            _print_file_params(file_spec.params)

            output_path = path.join(output_dir, file_spec.name)
            with open(output_path, "wb") as f:
                f.write(file_spec.contents.read())

Извлечение файлов из аннотаций вложений PDF

Извлеките вложенный файл из аннотации FileAttachment в PDF с помощью Python и Aspose.PDF. Он ищет на первой странице первую аннотацию вложения, извлекает вложенный файл и сохраняет его в выбранный выходной каталог. Это полезно, когда PDF‑файлы содержат кликабельные значки вложения файлов вместо стандартных коллекций вложенных файлов.

from os import path
import aspose.pdf as ap
from aspose.pycore import cast

def extract_file_attachment_annotation(infile, output_dir):
    # Open PDF document
    with ap.Document(infile) as document:

        # Get first page
        page = document.pages[1]

        # Find first FileAttachment annotation
        file_attachment = next(
            (
                annot
                for annot in page.annotations
                if annot.annotation_type == ap.annotations.AnnotationType.FILE_ATTACHMENT
            ),
            None,
        )

        if file_attachment is None:
            print("No FileAttachment annotation found on the first page.")
            return

        # Cast to FileAttachmentAnnotation
        faa = cast(ap.annotations.FileAttachmentAnnotation, file_attachment)

        # Access embedded file
        file_spec = faa.file
        print(f"File name: {file_spec.name}")

        # Save embedded file to disk
        output_path = path.join(output_dir, f"extracted-{file_spec.name}")
        with open(output_path, "wb") as f:
            f.write(file_spec.contents.read())

        print(f"Extracted to: {output_path}")