ما الجديد
ما الجديد في 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)
دعم بايثون 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 # القيمة المعينة سابقًا، مثل "الخيار 1"
# يجب أن تكون القيمة أي عنصر من عناصر AllowedStates
checkbox.value = "الخيار 2"
checkbox_value = checkbox.value # الخيار 2
# إلغاء تحديد المربعات إما بتعيين القيمة إلى "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. استخدم الكود التالي لحل هذه المهمة:
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 = "(Unknown)"
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)