Quoi de neuf
Quoi de neuf dans Aspose.PDF 23.12
À partir d’Aspose.PDF 23.12, la prise en charge des nouvelles fonctionnalités de conversion a été ajoutée :
- Implémenter la conversion de PDF en 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)
- Implémenter la conversion de OFD en 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)
Le support pour Python 3.6 a été interrompu.
Quoi de neuf dans Aspose.PDF 23.11
Depuis la version 23.11, il est possible de supprimer le texte caché. Le code suivant peut être utilisé :
import aspose.pdf as ap
document = ap.Document(input_file)
text_absorber = ap.text.TextFragmentAbsorber()
# Cette option peut être utilisée pour empêcher d'autres fragments de texte de se déplacer après le remplacement du texte caché.
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)
Quoi de neuf dans Aspose.PDF 23.8
Depuis la version 23.8, le support pour ajouter la détection des mises à jour incrémentielles a été ajouté.
La fonction pour détecter les mises à jour incrémentielles dans un document PDF a été ajoutée. Cette fonction renvoie ’true’ si un document a été enregistré avec des mises à jour incrémentielles; sinon, elle renvoie ‘false’.
import aspose.pdf as ap
doc = ap.Document(file_path)
updated = doc.has_incremental_update()
print(updated)
De plus, 23.8 prend en charge les moyens de travailler avec des champs de case à cocher imbriqués. De nombreux formulaires PDF remplissables ont des champs de case à cocher qui agissent comme des groupes radio:
- Créer un champ de case à cocher à valeurs multiples :
import aspose.pdf as ap
document = ap.Document()
page = document.pages.add()
checkbox = ap.forms.CheckboxField(page, ap.Rectangle(50, 50, 70, 70, True))
# Définir la valeur de l'option du premier groupe de cases à cocher
checkbox.export_value = "option 1"
# Ajouter une nouvelle option juste en dessous des options existantes
checkbox.add_option("option 2")
# Ajouter une nouvelle option au rectangle donné
checkbox.add_option("option 3", ap.Rectangle(100, 100, 120, 120, True))
document.form.add(checkbox)
# Sélectionner la case à cocher ajoutée
checkbox.value = "option 2"
document.save(DIR_OUTPUT + "checkbox_group.pdf")
- Obtenir et définir la valeur d’une case à cocher à valeurs multiples :
import aspose.pdf as ap
doc = ap.Document("example.pdf")
form = doc.form
checkbox = cast(ap.forms.CheckboxField, form.fields[0])
# Les valeurs autorisées peuvent être récupérées à partir de la collection AllowedStates
# Définir la valeur de la case à cocher en utilisant la propriété Value
checkbox.value = checkbox.allowed_states[0]
checkbox_value = checkbox.value # la valeur précédemment définie, par exemple "option 1"
# La valeur doit être un élément de AllowedStates
checkbox.value = "option 2"
checkbox_value = checkbox.value # option 2
# Décochez les cases en définissant soit Value à "Off", soit Checked à false
checkbox.value = "Off"
# ou, alternativement :
# checkbox.checked = False
checkbox_value = checkbox.value # Off
- Mettre à jour l’état de la case à cocher lors d’un clic utilisateur :
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) # par exemple, les coordonnées d'un clic de souris
# Option 1 : parcourir les annotations sur la page
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
# Option 2 : parcourir les champs dans l'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
Quoi de neuf dans Aspose.PDF 23.7
Depuis la version 23.7, il est possible d’ajouter l’extraction de formes :
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)
Il prend également en charge la capacité de détecter le débordement lors de l’ajout de texte :
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)
Quoi de neuf dans Aspose.PDF 23.6
Prise en charge de la possibilité de définir le titre de la page 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 = "NOUVELLE PAGE & TITRE" # <-- ceci ajouté
document = ap.Document(input_pdf)
document.save(output_html, options)
Quoi de neuf dans Aspose.PDF 23.5
Depuis la version 23.5, support pour ajouter l’option RedactionAnnotation FontSize. Utilisez l’extrait de code suivant pour résoudre cette tâche :
import aspose.pdf as ap
doc = ap.Document(DIR_INPUT + "input.pdf")
# Créer une instance de RedactionAnnotation pour une région spécifique de la page
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
# Texte à imprimer sur l'annotation de rédaction
annot.overlay_text = "(Inconnu)"
annot.text_alignment = ap.HorizontalAlignment.CENTER
# Répéter le texte de superposition sur l'annotation de rédaction
annot.repeat = False
# Nouvelle propriété ici !
annot.font_size = 20
# Ajouter l'annotation à la collection d'annotations de la première page
doc.pages[1].annotations.add(annot, False)
# Aplatit l'annotation et rédige le contenu de la page (c'est-à-dire supprime le texte et l'image
# sous l'annotation rédigée)
annot.redact()
out_file = DIR_OUTPUT + "RedactPage_out.pdf"
doc.save(out_file)
Le support pour Python 3.5 a été interrompu. Le support pour Python 3.11 a été ajouté.
Quoi de neuf dans Aspose.PDF 23.3
La version 23.3 a introduit la prise en charge de l’ajout d’une résolution à une image. Deux méthodes peuvent être utilisées pour résoudre ce problème :
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)
L’image sera placée avec une résolution mise à l’échelle ou vous pouvez définir les propriétés FixedWidth ou FixedHeight en combinaison avec IsApplyResolution
Quoi de neuf dans Aspose.PDF 23.1
Depuis la version 23.1, il est possible de créer une annotation PrinterMark.
Les marques d’imprimante sont des symboles graphiques ou du texte ajoutés à une page pour aider le personnel de production à identifier les composants d’un travail à plaques multiples et à maintenir une sortie cohérente pendant la production. Exemples couramment utilisés dans l’industrie de l’impression incluent :
- Cibles d’enregistrement pour aligner les plaques
- Rampes de gris et barres de couleur pour mesurer les couleurs et les densités d’encre
- Marques de coupe indiquant où le support de sortie doit être coupé
Nous allons montrer l’exemple de l’option avec des barres de couleur pour mesurer les couleurs et les densités d’encre. Il y a une classe abstraite de base PrinterMarkAnnotation et de celle-ci un enfant ColorBarAnnotation - qui implémente déjà ces bandes. Vérifions l’exemple :
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 supporte l’extraction des images vectorielles. Essayez d’utiliser le code suivant pour détecter et extraire des graphiques vectoriels :
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)