Что нового

Что нового в Aspose.PDF 23.12

С Aspose.PDF 23.12 была добавлена поддержка новых функций конверсии:

  • Реализована конвертация PDF в Markdown

    import aspose.pdf as ap

    input_pdf_path = DIR_INPUT + "input.pdf"
    markdown_output_file_path = DIR_OUTPUT + "output_md_file.md"

    doc = ap.Document(input_pdf_path)
    save_options = ap.pdftomarkdown.MarkdownSaveOptions()
    save_options.resources_directory_name = "images"
    doc.save(markdown_output_file_path, save_options)
  • Реализована конвертация OFD в PDF

    import aspose.pdf as ap

    input_path = DIR_INPUT + "input.ofd"
    output_path = DIR_OUTPUT + "output.pdf"
    document = ap.Document(input_path, ap.OfdLoadOptions())
    document.save(output_path)

Поддержка Python 3.6 была прекращена.

Что нового в Aspose.PDF 23.11

Начиная с версии 23.11, появилась возможность удаления скрытого текста. Для этого можно использовать следующий фрагмент кода:


    import aspose.pdf as ap

    document = ap.Document(input_file)
    text_absorber = ap.text.TextFragmentAbsorber()
    # Этот параметр можно использовать, чтобы предотвратить перемещение других фрагментов текста после замены скрытого текста.
    text_absorber.text_replace_options = ap.text.TextReplaceOptions(ap.text.TextReplaceOptions.ReplaceAdjustment.NONE)
    document.pages.accept(text_absorber)

    for fragment in text_absorber.text_fragments:
        if fragment.text_state.invisible:
            fragment.text = ''

    document.save(output_file)

Что нового в Aspose.PDF 23.8

Начиная с версии 23.8 поддерживается добавление обнаружения инкрементных обновлений.

Функция для обнаружения инкрементных обновлений в PDF-документе была добавлена. Эта функция возвращает ’true’, если документ был сохранен с инкрементными обновлениями; в противном случае возвращает ‘false’.


    import aspose.pdf as ap

    doc = ap.Document(file_path)
    updated = doc.has_incremental_update()
    print(updated)

Кроме того, версия 23.8 поддерживает способы работы с вложенными полями флажков. Многие заполняемые PDF-формы имеют поля флажков, которые действуют как группы переключателей:

  • Создание поля флажков с несколькими значениями:

    import aspose.pdf as ap

    document = ap.Document()
    page = document.pages.add()
    checkbox = ap.forms.CheckboxField(page, ap.Rectangle(50, 50, 70, 70, True))
    # Установите значение первой опции группы флажков
    checkbox.export_value = "option 1"
    # Добавьте новую опцию прямо под существующими
    checkbox.add_option("option 2")
    # Добавьте новую опцию в заданный прямоугольник
    checkbox.add_option("option 3", ap.Rectangle(100, 100, 120, 120, True))
    document.form.add(checkbox)
    # Выберите добавленный флажок
    checkbox.value = "option 2"
    document.save(DIR_OUTPUT + "checkbox_group.pdf")
  • Получить и установить значение флажка с множественным выбором:

    import aspose.pdf as ap

    doc = ap.Document("example.pdf")
    form = doc.form
    checkbox = cast(ap.forms.CheckboxField, form.fields[0])

    # Допустимые значения можно получить из коллекции AllowedStates
    # Установите значение флажка, используя свойство Value
    checkbox.value = checkbox.allowed_states[0]
    checkbox_value = checkbox.value  # ранее установленное значение, например, "option 1"
    # Значение должно быть любым элементом AllowedStates
    checkbox.value = "option 2"
    checkbox_value = checkbox.value  # option 2
    # Снимите выделение с флажков, установив Value в "Off" или установив Checked в false
    checkbox.value = "Off"
    # или, альтернативно:
    # checkbox.checked = False
    checkbox_value = checkbox.value  # Off
  • Обновить состояние флажка при клике пользователя:

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

    input_file = DIR_INPUT + "input.pdf"
    document = ap.Document(input_file)
    point = ap.Point(62,462)  # например, координаты щелчка мыши
    # Вариант 1: просмотреть аннотации на странице
    page = document.pages[5]
    for annotation in page.annotations:
        if(annotation.rect.contains(point)):
            widget = cast(ap.annotations.WidgetAnnotation, annotation)
            checkbox = cast(ap.forms.CheckboxField, widget.parent)
            if(annotation.active_state == "Off"):
                checkbox.value = widget.get_checked_state_name()
            else:
                checkbox.value = "Off"
        break
    # Вариант 2: просмотреть поля в AcroForm
    for widget in document.form:
        field = cast(ap.forms.Field, widget)
        if(field == None):
            continue
        checkBoxFound = False
        for annotation in field:
            if(annotation.rect.contains(point)):
                checkBoxFound = True
                if(annotation.active_state=="Off"):
                    annotation.parent.value = annotation.get_checked_state_name()
                else:
                    annotation.parent.value = "Off"
            if(checkBoxFound):
                break

Что нового в Aspose.PDF 23.7

Начиная с версии 23.7 поддерживается добавление извлечения формы:


    import aspose.pdf as ap

    input1_file = DIR_INPUT + "input_1.pdf"
    input2_file = DIR_INPUT + "input_2.pdf"

    source = ap.Document(input1_file)
    dest = ap.Document(input2_file)

    graphic_absorber = ap.vector.GraphicsAbsorber()
    graphic_absorber.visit(source.pages[1])
    area = ap.Rectangle(90, 250, 300, 400, True)
    dest.pages[1].add_graphics(graphic_absorber.elements, area)

Также поддерживается возможность обнаружения переполнения при добавлении текста:


    import aspose.pdf as ap

    output_file = DIR_OUTPUT + "output.pdf"
    doc = ap.Document()
    paragraph_content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras nisl tortor, efficitur sed cursus in, lobortis vitae nulla. Quisque rhoncus, felis sed dictum semper, est tellus finibus augue, ut feugiat enim risus eget tortor. Nulla finibus velit nec ante gravida sollicitudin. Morbi sollicitudin vehicula facilisis. Vestibulum ac convallis erat. Ut eget varius sem. Nam varius pharetra lorem, id ullamcorper justo auctor ac. Integer quis erat vitae lacus mollis volutpat eget et eros. Donec a efficitur dolor. Maecenas non dapibus nisi, ut pellentesque elit. Sed pellentesque rhoncus ante, a consectetur ligula viverra vel. Integer eget bibendum ante. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur elementum, sem a auctor vulputate, ante libero iaculis dolor, vitae facilisis dolor lorem at orci. Sed laoreet dui id nisi accumsan, id posuere diam accumsan."
    fragment = ap.text.TextFragment(paragraph_content)
    rectangle = ap.Rectangle(100, 600, 500, 700, False)
    paragraph = ap.text.TextParagraph()
    paragraph.vertical_alignment = ap.VerticalAlignment.TOP
    paragraph.formatting_options.wrap_mode = ap.text.TextFormattingOptions.WordWrapMode.BY_WORDS
    paragraph.rectangle = rectangle
    is_fit_rectangle = fragment.text_state.is_fit_rectangle(paragraph_content, rectangle)

    while is_fit_rectangle == False:
        fragment.text_state.font_size -= 0.5
        is_fit_rectangle = fragment.text_state.is_fit_rectangle(paragraph_content, rectangle)

    paragraph.append_line(fragment)
    builder = ap.text.TextBuilder(doc.pages.add())
    builder.append_paragraph(paragraph)
    doc.save(output_file)

Что нового в Aspose.PDF 23.6

Поддержка возможности установки заголовка страницы HTML, Epub:


    import aspose.pdf as ap

    input_pdf = DIR_INPUT + "input.pdf"
    output_html = DIR_OUTPUT + "output_title.html"
    options = ap.HtmlSaveOptions()
    options.fixed_layout = True
    options.raster_images_saving_mode = ap.HtmlSaveOptions.RasterImagesSavingModes.AS_EMBEDDED_PARTS_OF_PNG_PAGE_BACKGROUND
    options.parts_embedding_mode = ap.HtmlSaveOptions.PartsEmbeddingModes.EMBED_ALL_INTO_HTML
    options.title = "NEW PAGE & TITILE"  # <-- это добавлено

    document = ap.Document(input_pdf)
    document.save(output_html, options)

Что нового в Aspose.PDF 23.5

Начиная с версии 23.5 поддерживается добавление опции RedactionAnnotation FontSize. Используйте следующий код для решения этой задачи:


    import aspose.pdf as ap

    doc = ap.Document(DIR_INPUT + "input.pdf")
    # Создание экземпляра RedactionAnnotation для определенного региона страницы
    annot = ap.annotations.RedactionAnnotation(doc.pages[1], ap.Rectangle(367, 756.919982910156, 420, 823.919982910156, True))
    annot.fill_color = ap.Color.black
    annot.border_color = ap.Color.yellow
    annot.color = ap.Color.blue
    # Текст, который будет напечатан на замаскированной аннотации
    annot.overlay_text = "(Неизвестно)"
    annot.text_alignment = ap.HorizontalAlignment.CENTER
    # Повторить текст наложения поверх замаскированной аннотации
    annot.repeat = False
    # Новое свойство здесь!
    annot.font_size = 20
    # Добавление аннотации в коллекцию аннотаций первой страницы
    doc.pages[1].annotations.add(annot, False)
    # Сглаживает аннотацию и скрывает содержимое страницы (т.е. удаляет текст и изображение
    # Под замаскированной аннотацией)
    annot.redact()
    out_file = DIR_OUTPUT + "RedactPage_out.pdf"
    doc.save(out_file)

Поддержка Python 3.5 была прекращена. Добавлена поддержка Python 3.11.

Что нового в Aspose.PDF 23.3

Версия 23.3 представила поддержку добавления разрешения к изображению. Для решения этой задачи можно использовать два метода:


    import aspose.pdf as ap

    input_file = DIR_INPUT + "input.jpg"
    table = ap.Table()
    table.column_widths = "600"
    image = ap.Image()
    image.is_apply_resolution = True
    image.file = input_file
    for i in range(0, 2):
        row = table.rows.add()
        cell = row.cells.add()
        cell.paragraphs.add(image)

    page.paragraphs.add(table)

Изображение будет размещено с масштабированным разрешением, или вы можете установить свойства FixedWidth или FixedHeight в сочетании с IsApplyResolution.

Что нового в Aspose.PDF 23.1

Начиная с версии 23.1 поддерживается создание аннотации PrinterMark.

Печатные метки — это графические символы или текст, добавляемые на страницу, чтобы помочь производственному персоналу в идентификации компонентов многопластинчатой задачи и поддержании стабильного вывода во время производства. Примеры, часто используемые в полиграфической промышленности, включают:

  • Мишени для совмещения пластин
  • Серые шкалы и цветные полосы для измерения цветов и плотности чернил
  • Метки обрезки, показывающие, где следует обрезать выходной материал

Мы покажем пример опции с цветными полосами для измерения цветов и плотности чернил. Существует базовый абстрактный класс PrinterMarkAnnotation и от него дочерний класс ColorBarAnnotation, который уже реализует эти полосы. Давайте проверим пример:


    import aspose.pdf as ap

    out_file = DIR_OUTPUT  + "ColorBarTest.pdf"
    doc = ap.Document()
    page = doc.pages.add()
    page.trim_box = ap.Rectangle(20, 20, 580, 820, True)
    add_annotations(page)
    doc.save(out_file)


def add_annotations(page: ap.Page):
    rect_black = ap.Rectangle(100, 300, 300, 320, True)
    rect_cyan = ap.Rectangle(200, 600, 260, 690, True)
    rect_magenta = ap.Rectangle(10, 650, 140, 670, True)
    color_bar_black = ap.annotations.ColorBarAnnotation(page, rect_black, ap.annotations.ColorsOfCMYK.BLACK)
    color_bar_cyan = ap.annotations.ColorBarAnnotation(page, rect_cyan, ap.annotations.ColorsOfCMYK.CYAN)
    color_ba_magenta = ap.annotations.ColorBarAnnotation(page, rect_magenta, ap.annotations.ColorsOfCMYK.BLACK)
    color_ba_magenta.color_of_cmyk = ap.annotations.ColorsOfCMYK.MAGENTA
    color_bar_yellow = ap.annotations.ColorBarAnnotation(page, ap.Rectangle(400, 250, 450, 700, True), ap.annotations.ColorsOfCMYK.YELLOW)
    page.annotations.add(color_bar_black, False)
    page.annotations.add(color_bar_cyan, False)
    page.annotations.add(color_ba_magenta, False)
    page.annotations.add(color_bar_yellow, False)

Также поддерживается извлечение векторных изображений. Попробуйте использовать следующий код для обнаружения и извлечения векторной графики:


    import aspose.pdf as ap

    input_pdf = DIR_INPUT + "input.pdf"
    output_pdf = DIR_OUTPUT + "output.svg"
    doc = ap.Document(input_pdf)
    doc.pages[1].try_save_vector_graphics(output_pdf)