O que há de novo

O que há de novo no Aspose.PDF 23.12

A partir do Aspose.PDF 23.12, foi adicionada a compatibilidade com os novos recursos de conversão:

  • Implementar conversão de PDF para 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)
  • Implementar conversão de OFD para 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)

O suporte para Python 3.6 foi descontinuado.

O que há de novo no Aspose.PDF 23.11

Desde a versão 23.11 é possível remover o texto oculto. O seguinte trecho de código pode ser usado:


    import aspose.pdf as ap

    document = ap.Document(input_file)
    text_absorber = ap.text.TextFragmentAbsorber()
    # Esta opção pode ser usada para evitar que outros fragmentos de texto se movam após a substituição do texto oculto.
    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)

O que há de novo no Aspose.PDF 23.8

Desde a versão 23.8, há suporte para adicionar detecção de Atualizações Incrementais.

A função para detectar Atualizações Incrementais em um documento PDF foi adicionada. Essa função retorna ’true’ se um documento foi salvo com atualizações incrementais; caso contrário, retorna ‘false’.


    import aspose.pdf as ap

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

Além disso, o 23.8 suporta maneiras de trabalhar com campos de caixa de seleção aninhados. Muitos formulários PDF preenchíveis têm campos de caixa de seleção que atuam como grupos de rádio:

  • Criar campo de caixa de seleção de múltiplos valores:

    import aspose.pdf as ap

    document = ap.Document()
    page = document.pages.add()
    checkbox = ap.forms.CheckboxField(page, ap.Rectangle(50, 50, 70, 70, True))
    # Definir o valor da primeira opção do grupo de caixa de seleção
    checkbox.export_value = "opção 1"
    # Adicionar nova opção logo abaixo das existentes
    checkbox.add_option("opção 2")
    # Adicionar nova opção no retângulo fornecido
    checkbox.add_option("opção 3", ap.Rectangle(100, 100, 120, 120, True))
    document.form.add(checkbox)
    # Selecionar a caixa de seleção adicionada
    checkbox.value = "opção 2"
    document.save(DIR_OUTPUT + "checkbox_group.pdf")
  • Obter e definir o valor de uma checkbox de múltiplos valores:

    import aspose.pdf as ap

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

    # Os valores permitidos podem ser recuperados da coleção AllowedStates
    # Defina o valor da checkbox usando a propriedade Value
    checkbox.value = checkbox.allowed_states[0]
    checkbox_value = checkbox.value  # o valor definido anteriormente, por exemplo, "option 1"
    # O valor deve ser qualquer elemento de AllowedStates
    checkbox.value = "option 2"
    checkbox_value = checkbox.value  # opção 2
    # Desmarcar caixas definindo Value como "Off" ou definindo Checked como false
    checkbox.value = "Off"
    # ou, alternativamente:
    # checkbox.checked = False
    checkbox_value = checkbox.value  # Off
  • Atualizar o estado da checkbox ao clicar do usuário:

    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)  # por exemplo, as coordenadas de um clique do mouse
    # Opção 1: percorrer as anotações na página
    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
    # Opção 2: percorrer os campos no 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

O que há de novo no Aspose.PDF 23.7

Desde a versão 23.7, há suporte para adicionar a extração de formas:


    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)

Também suporta a capacidade de detectar Overflow ao adicionar texto:


    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)

O que há de novo no Aspose.PDF 23.6

Suporte à capacidade de definir o título da página 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 = "NOVA PÁGINA & TÍTULO"  # <-- isto foi adicionado

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

O que há de novo no Aspose.PDF 23.5

Desde a versão 23.5, há suporte para adicionar a opção FontSize em RedactionAnnotation. Use o próximo trecho de código para resolver esta tarefa:


    import aspose.pdf as ap

    doc = ap.Document(DIR_INPUT + "input.pdf")
    # Cria uma instância de RedactionAnnotation para uma região específica da página
    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
    # Texto a ser impresso na anotação de redação
    annot.overlay_text = "(Desconhecido)"
    annot.text_alignment = ap.HorizontalAlignment.CENTER
    # Repetir texto de sobreposição sobre a anotação de redação
    annot.repeat = False
    # Nova propriedade aqui!
    annot.font_size = 20
    # Adicionar anotação à coleção de anotações da primeira página
    doc.pages[1].annotations.add(annot, False)
    # Achata a anotação e redige o conteúdo da página (ou seja, remove texto e imagem
    # Sob a anotação redigida)
    annot.redact()
    out_file = DIR_OUTPUT + "RedactPage_out.pdf"
    doc.save(out_file)

Suporte para Python 3.5 foi descontinuado. Suporte para Python 3.11 foi adicionado.

O que há de novo no Aspose.PDF 23.3

A versão 23.3 introduziu suporte para adicionar uma resolução a uma imagem. Dois métodos podem ser usados para resolver este problema:


    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)

A imagem será colocada com resolução escalada ou você pode definir as propriedades FixedWidth ou FixedHeight em combinação com IsApplyResolution.

O que há de novo no Aspose.PDF 23.1

Desde a versão 23.1, há suporte para criação de anotação PrinterMark.

As marcas de impressora são símbolos gráficos ou texto adicionados a uma página para ajudar o pessoal de produção a identificar componentes de um trabalho de múltiplas chapas e manter uma saída consistente durante a produção. Exemplos comumente usados na indústria gráfica incluem:

  • Alvos de registro para alinhar chapas
  • Rampas de cinza e barras de cores para medir cores e densidades de tinta
  • Marcas de corte mostrando onde o meio de saída deve ser cortado

Mostraremos o exemplo da opção com barras de cores para medir cores e densidades de tinta. Existe uma classe abstrata básica PrinterMarkAnnotation e dela deriva ColorBarAnnotation - que já implementa essas listras. Vamos verificar o exemplo:


    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)

Also suporte a extração de imagens vetoriais. Tente usar o seguinte código para detectar e extrair gráficos vetoriais:


    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)