Манипулировать PDF документом в Python через .NET

Манипуляция с PDF-документом на Python

Валидация PDF-документа на соответствие стандарту PDF/A (A 1A и A 1B)

Чтобы проверить PDF-документ на совместимость с PDF/A-1a или PDF/A-1b, используйте метод validate класса Document. Этот метод позволяет указать имя файла, в который будет сохранён результат, и требуемый тип валидации из перечисления PdfFormat: PDF_A_1A или PDF_A_1B.

Следующий фрагмент кода показывает, как выполнить валидацию PDF-документа для PDF/A-1A.


    import aspose.pdf as ap

    # Открыть документ
    document = ap.Document(input_pdf)

    # Проверка PDF на соответствие PDF/A-1a
    document.validate(output_xml, ap.PdfFormat.PDF_A_1A)

Следующий фрагмент кода показывает, как выполнить валидацию PDF-документа для PDF/A-1B.


    import aspose.pdf as ap

    # Открыть документ
    document = ap.Document(input_pdf)

    # Проверка PDF на соответствие PDF/A-1b
    document.validate(output_xml, ap.PdfFormat.PDF_A_1B)

Работа с Оглавлением

Добавление Оглавления в Существующий PDF

Оглавление в PDF обозначает “Table of Contents” (Таблица Содержания). Это функция, которая позволяет пользователям быстро перемещаться по документу, предоставляя обзор его разделов и заголовков.

Чтобы добавить оглавление в существующий PDF файл, используйте класс Heading в пространстве имен aspose.pdf. Пространство имен aspose.pdf может как создавать новые, так и обрабатывать существующие PDF файлы. Чтобы добавить оглавление в существующий PDF, используйте пространство имен Aspose.Pdf. Следующий фрагмент кода показывает, как создать таблицу содержания внутри существующего PDF файла с использованием Python через .NET.


    import aspose.pdf as ap

    # Загрузите существующий PDF файл
    doc = ap.Document(input_pdf)

    # Получите доступ к первой странице PDF файла
    tocPage = doc.pages.insert(1)

    # Создайте объект для представления информации об оглавлении
    tocInfo = ap.TocInfo()
    title = ap.text.TextFragment("Table Of Contents")
    title.text_state.font_size = 20
    title.text_state.font_style = ap.text.FontStyles.BOLD

    # Установите заголовок для оглавления
    tocInfo.title = title
    tocPage.toc_info = tocInfo

    # Создайте строковые объекты, которые будут использоваться как элементы оглавления
    titles = ["First page", "Second page", "Third page", "Fourth page"]
    for i in range(0, 2):
        # Создайте объект Heading
        heading2 = ap.Heading(1)
        segment2 = ap.text.TextSegment()
        heading2.toc_page = tocPage
        heading2.segments.append(segment2)

        # Укажите целевую страницу для объекта заголовка
        heading2.destination_page = doc.pages[i + 2]

        # Целевая страница
        heading2.top = doc.pages[i + 2].rect.height

        # Координата назначения
        segment2.text = titles[i]

        # Добавьте заголовок на страницу, содержащую оглавление
        tocPage.paragraphs.add(heading2)

    # Сохраните обновленный документ
    doc.save(output_pdf)

Установить разные TabLeaderType для разных уровней Оглавления

Aspose.PDF для Python также позволяет устанавливать разные TabLeaderType для разных уровней оглавления. Вам нужно установить свойство line_dash для TocInfo.


    import aspose.pdf as ap

    doc = ap.Document()
    tocPage = doc.pages.add()
    toc_info = ap.TocInfo()

    # установить LeaderType
    toc_info.line_dash = ap.text.TabLeaderType.SOLID
    title = ap.text.TextFragment("Содержание")
    title.text_state.font_size = 30
    toc_info.title = title

    # Добавить секцию списка в коллекцию секций документа Pdf
    tocPage.toc_info = toc_info
    # Определите формат списка из четырех уровней, установив отступы слева
    # и
    # настройки формата текста для каждого уровня

    toc_info.format_array_length = 4
    toc_info.format_array[0].margin.left = 0
    toc_info.format_array[0].margin.right = 30
    toc_info.format_array[0].line_dash = ap.text.TabLeaderType.DOT
    toc_info.format_array[0].text_state.font_style = ap.text.FontStyles.BOLD | ap.text.FontStyles.ITALIC
    toc_info.format_array[1].margin.left = 10
    toc_info.format_array[1].margin.right = 30
    toc_info.format_array[1].line_dash = 3
    toc_info.format_array[1].text_state.font_size = 10
    toc_info.format_array[2].margin.left = 20
    toc_info.format_array[2].margin.right = 30
    toc_info.format_array[2].text_state.font_style = ap.text.FontStyles.BOLD
    toc_info.format_array[3].line_dash = ap.text.TabLeaderType.SOLID
    toc_info.format_array[3].margin.left = 30
    toc_info.format_array[3].margin.right = 30
    toc_info.format_array[3].text_state.font_style = ap.text.FontStyles.BOLD

    # Создать секцию в документе Pdf
    page = doc.pages.add()

    # Добавить четыре заголовка в секцию
    for Level in range(1, 5):
        heading2 = ap.Heading(Level)
        segment2 = ap.text.TextSegment()
        heading2.segments.append(segment2)
        heading2.is_auto_sequence = True
        heading2.toc_page = tocPage
        segment2.text = "Пример Заголовка" + str(Level)
        heading2.text_state.font = ap.text.FontRepository.find_font("Arial")

        # Добавить заголовок в Оглавление.
        heading2.is_in_list = True
        page.paragraphs.add(heading2)

    # сохранить Pdf
    doc.save(output_pdf)

Скрыть номера страниц в ОГЛ

В случае, если вы не хотите отображать номера страниц вместе с заголовками в ОГЛ, вы можете использовать свойство is_show_page_numbers класса TocInfo как false. Пожалуйста, ознакомьтесь с следующим фрагментом кода, чтобы скрыть номера страниц в оглавлении:


    import aspose.pdf as ap

    doc = ap.Document()
    toc_page = doc.pages.add()
    toc_info = ap.TocInfo()
    title = ap.text.TextFragment("Содержание")
    title.text_state.font_size = 20
    title.text_state.font_style = ap.text.FontStyles.BOLD
    toc_info.title = title
    # Добавить секцию списка в коллекцию секций PDF документа
    toc_page.toc_info = toc_info
    # Определите формат списка из четырех уровней, установив отступы слева и
    # параметры форматирования текста для каждого уровня

    toc_info.is_show_page_numbers = False
    toc_info.format_array_length = 4
    toc_info.format_array[0].margin.right = 0
    toc_info.format_array[0].text_state.font_style = ap.text.FontStyles.BOLD | ap.text.FontStyles.ITALIC
    toc_info.format_array[1].margin.left = 30
    toc_info.format_array[1].text_state.underline = True
    toc_info.format_array[1].text_state.font_size = 10
    toc_info.format_array[2].text_state.font_style = ap.text.FontStyles.BOLD
    toc_info.format_array[3].text_state.font_style = ap.text.FontStyles.BOLD
    page = doc.pages.add()
    # Добавить четыре заголовка в секцию
    for Level in range(1, 5):
        heading2 = ap.Heading(Level)
        segment2 = ap.text.TextSegment()
        heading2.toc_page = toc_page
        heading2.segments.append(segment2)
        heading2.is_auto_sequence = True
        segment2.text = "это заголовок уровня " + str(Level)
        heading2.is_in_list = True
        page.paragraphs.add(heading2)
    doc.save(output_pdf)

Настройка номеров страниц при добавлении оглавления

Обычно при добавлении оглавления в PDF-документ настраиваются номера страниц. Например, может потребоваться добавить некоторый префикс перед номером страницы, например, P1, P2, P3 и так далее. В таком случае Aspose.PDF для Python предоставляет свойство page_numbers_prefix класса TocInfo, которое можно использовать для настройки номеров страниц, как показано в следующем примере кода.


    import aspose.pdf as ap

    # Загрузить существующие PDF-файлы
    doc = ap.Document(input_pdf)
    # Получить доступ к первой странице PDF-файла
    toc_page = doc.pages.insert(1)
    # Создать объект для представления информации об оглавлении
    toc_info = ap.TocInfo()
    title = ap.text.TextFragment("Table Of Contents")
    title.text_state.font_size = 20
    title.text_state.font_style = ap.text.FontStyles.BOLD
    # Установить заголовок для оглавления
    toc_info.title = title
    toc_info.page_numbers_prefix = "P"
    toc_page.toc_info = toc_info
    for i in range(len(doc.pages)):
        # Создать объект заголовка
        heading2 = ap.Heading(1)
        segment2 = ap.text.TextSegment()
        heading2.toc_page = toc_page
        heading2.segments.append(segment2)
        # Указать страницу назначения для объекта заголовка
        heading2.destination_page = doc.pages[i + 1]
        # Страница назначения
        heading2.top = doc.pages[i + 1].rect.height
        # Координата назначения
        segment2.text = "Page " + str(i)
        # Добавить заголовок на страницу, содержащую оглавление
        toc_page.paragraphs.add(heading2)

    # Сохранить обновленный документ
    doc.save(output_pdf)

Как установить дату окончания срока действия PDF

Мы применяем привилегии доступа к PDF-файлам, чтобы определенная группа пользователей могла получить доступ к определенным функциям/объектам PDF-документов. Чтобы ограничить доступ к PDF-файлу, мы обычно применяем шифрование, и у нас может возникнуть необходимость установить срок действия PDF-файла, чтобы пользователь, получающий/просматривающий документ, получал действительное уведомление о сроке действия PDF-файла.


    import aspose.pdf as ap

    # Создаем объект Document
    doc = ap.Document()
    # Добавляем страницу в коллекцию страниц PDF-файла
    doc.pages.add()
    # Добавляем текстовый фрагмент в коллекцию абзацев объекта страницы
    doc.pages[1].paragraphs.add(ap.text.TextFragment("Hello World..."))
    # Создаем объект JavaScript для установки даты окончания срока действия PDF
    javaScript = ap.annotations.JavascriptAction(
        "var year=2017;"
        + "var month=5;"
        + "today = new Date(); today = new Date(today.getFullYear(), today.getMonth());"
        + "expiry = new Date(year, month);"
        + "if (today.getTime() > expiry.getTime())"
        + "app.alert('The file is expired. You need a new one.');"
    )
    # Устанавливаем JavaScript как действие открытия PDF
    doc.open_action = javaScript

    # Сохраняем PDF-документ
    doc.save(output_pdf)

Уплощение Заполняемого PDF в Python

PDF-документы часто содержат формы с интерактивными заполняемыми элементами, такими как переключатели, флажки, текстовые поля, списки и т.д. Чтобы сделать их не редактируемыми для различных целей, необходимо уплощить PDF-файл. Aspose.PDF предоставляет функцию для уплощения вашего PDF в Python всего несколькими строками кода:


    import aspose.pdf as ap

    # Загрузить исходную PDF-форму
    doc = ap.Document(input_pdf)

    # Уплощение Заполняемого PDF
    if len(doc.form.fields) > 0:
        for item in doc.form.fields:
            item.flatten()

    # Сохранить обновленный документ
    doc.save(output_pdf)