تفاوت نسخه Python و .NET
Aspose.Words for Python via .NET یک بسته بندی Aspose.Words برای .NET است، به همین دلیل است که این دو محصول تقریباً مجموعه ای از ویژگی های مشابه دارند. با این وجود، تفاوت های ظریف کار و تفاوت در ویژگی ها و API وجود دارد که در این صفحه توضیح داده شده است.
تفاوت ویژگی ها
با توجه به فرآیند بسته بندی برخی از ویژگی ها وجود دارد که در نسخه Python موجود نیست. در اینجا لیستی از قابل توجه ترین ویژگی هایی است که در حال حاضر در نسخه Python موجود نیستند.
- پیاده سازی اینترفیس ها هنوز پشتیبانی نمی شود، به همین دلیل امکان استفاده از تماس های برگشتی مانند IWarningCallback، IReplacingCallback، IFieldUpdatingCallback، IFieldMergingCallback و غیره وجود ندارد.
- ویژگی چاپ در دسترس نیست زیرا نسخه .NET Standard 2.0 Aspose.Words به عنوان پشتیبان نسخه پایتون استفاده می شود که همچنین این قابلیت را ارائه نمی دهد.
- فقط عملکرد ساده Mail Merge با آرایه هایی از نام فیلدها و مقادیر فیلدها به عنوان منبع داده ارائه می شود.
- اجرای DocumentVisitor در حال حاضر از طریق کد Python امکان پذیر نیست.
ریخته گری اشیاء Aspose.Words در Python
اگرچه ریختهگری نوع برای توسعهدهندگان Python طبیعی نیست، برخی از وظایف بدون ریختهگری گرهها یا فیلدهای اسناد به نوع بتن قابل انجام نیستند. Aspose.Words برای Python via .NET روشهای خاصی را ارائه میکند که امکان ریختهگری اشیاء را در صورت لزوم فراهم میکند.
گره های ریخته گری
کلاس پایه برای تمام گره های سند در Aspose.Words DOM کلاس Node است. به عنوان مثال روش get_child و نمونه ای از کلاس Node را برمی گرداند، اما اگر نیاز به تغییر گره برگشتی دارید، در بیشتر موارد باید آن را به نوع بتن ریخته کنید. کد زیر نحوه تغییر رنگ فونت اولین Run در سند را نشان می دهد:
doc = aw.Document(docs_base.my_dir + "Document.docx")
# Get the first Run node and cast it to Run object.
run = doc.get_child(aw.NodeType.RUN, 0, True).as_run()
# Make changes to the run
run.font.color = drawing.Color.red
# Save the result
doc.save(docs_base.artifacts_dir + "WorkingWithNode.change_run_color.docx")
هنگامی که از روش clone استفاده می شود، ممکن است ریخته گری نیز لازم باشد:
doc = aw.Document(docs_base.my_dir + "Document.docx")
clone = doc.clone().as_document()
clone.save(docs_base.artifacts_dir + "CloneAndCombineDocuments.cloning_document.docx")
همانطور که ممکن است متوجه شده باشید که در کد C# در کجا از (Paragraph)node
برای ریخته گری استفاده می کنید، در Python باید از روش node.as_paragraph()
استفاده کنید. در نسخه Python کلاس Aspose.Words Node پیوند زیر از متدهای as_xxx
را معرفی می کند:
- as_document()
- as_section()
- as_body()
- as_header_footer()
- as_table()
- as_row()
- as_cell()
- as_paragraph()
- as_bookmark_start()
- as_bookmark_end()
- as_editable_range_start()
- as_editable_range_end()
- as_group_shape()
- as_shape()
- as_comment()
- as_footnote()
- as_run()
- as_field_start()
- as_field_separator()
- as_field_end()
- as_form_field()
- as_special_char()
- as_smart_tag()
- as_structured_document_tag()
- as_structured_document_tag_range_start()
- as_structured_document_tag_range_end()
- as_glossary_document()
- as_building_block()
- as_comment_range_start()
- as_comment_range_end()
- as_office_math()
- as_sub_document()
- as_composite_node()
روش as_xxx
یک RuntimeError
را با پیامی مانند زیر افزایش می دهد اگر گره را نمی توان به نوع مشخص شده کوچک کرد:
RuntimeError: Proxy error(InvalidCastException): Unable to cast object of type ‘Aspose.Words.XXX’ to type ‘Aspose.Words.Drawing.YYY’.
زمینه های ریخته گری
همین وضعیت در مورد زمین ها صدق می کرد. مثال کد زیر نحوه جایگزینی لینک هایپر لینک را نشان می دهد:
doc = aw.Document(docs_base.my_dir + "Hyperlinks.docx")
for field in doc.range.fields :
if field.type == aw.fields.FieldType.FIELD_HYPERLINK:
hyperlink = field.as_field_hyperlink()
# Some hyperlinks can be local (links to bookmarks inside the document), ignore these.
if hyperlink.sub_address != None :
continue
hyperlink.address = "https:#www.aspose.com"
hyperlink.result = "Aspose - The .net & Java Component Publisher"
doc.save(docs_base.artifacts_dir + "WorkingWithFields.replace_hyperlinks.docx")
همانطور که متوجه شدید شی Field نیز مجموعه ای از روش های as_xxx
را ارائه می دهد که در زیر لیست شده است:
- as_field_unknown()
- as_field_merge_barcode()
- as_field_display_barcode()
- as_field_print()
- as_field_private()
- as_field_advance()
- as_field_form_check_box()
- as_field_form_drop_down()
- as_field_index()
- as_field_rd()
- as_field_ta()
- as_field_toa()
- as_field_ask()
- as_field_auto_text()
- as_field_auto_text_list()
- as_field_bibliography()
- as_field_citation()
- as_field_dde()
- as_field_dde_auto()
- as_field_fill_in()
- as_field_glossary()
- as_field_import()
- as_field_include()
- as_field_shape()
- as_field_database()
- as_field_skip_if()
- as_field_list_num()
- as_field_rev_num()
- as_field_section()
- as_field_section_pages()
- as_field_data()
- as_field_embed()
- as_field_ocx()
- as_field_auto_num()
- as_field_auto_num_lgl()
- as_field_auto_num_out()
- as_field_add_in()
- as_field_barcode()
- as_field_bidi_outline()
- as_field_eq()
- as_field_footnote_ref()
- as_field_info()
- as_field_user_address()
- as_field_user_initials()
- as_field_user_name()
- as_field_include_picture()
- as_field_page()
- as_field_create_date()
- as_field_edit_time()
- as_field_print_date()
- as_field_save_date()
- as_field_go_to_button()
- as_field_author()
- as_field_comments()
- as_field_file_name()
- as_field_file_size()
- as_field_keywords()
- as_field_last_saved_by()
- as_field_num_chars()
- as_field_num_pages()
- as_field_num_words()
- as_field_subject()
- as_field_template()
- as_field_title()
- as_field_formula()
- as_field_symbol()
- as_field_quote()
- as_field_set()
- as_field_address_block()
- as_field_compare()
- as_field_date()
- as_field_doc_property()
- as_field_doc_variable()
- as_field_greeting_line()
- as_field_hyperlink()
- as_field_if()
- as_field_include_text()
- as_field_link()
- as_field_macro_button()
- as_field_merge_field()
- as_field_merge_rec()
- as_field_merge_seq()
- as_field_next()
- as_field_next_if()
- as_field_note_ref()
- as_field_page_ref()
- as_field_ref()
- as_field_seq()
- as_field_style_ref()
- as_field_tc()
- as_field_time()
- as_field_toc()
- as_field_xe()
- as_field_form_text()
سبک های بازیگری
ریخته گری نیز برای کار با سبک های جدول مورد نیاز است:
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
table = builder.start_table()
builder.insert_cell()
builder.write("Name")
builder.insert_cell()
builder.write("Value")
builder.end_row()
builder.insert_cell()
builder.insert_cell()
builder.end_table()
# Add a table style and modify it's properties.
tableStyle = doc.styles.add(aw.StyleType.TABLE, "MyTableStyle1").as_table_style()
tableStyle.borders.line_style = aw.LineStyle.DOUBLE
tableStyle.borders.line_width = 1
tableStyle.left_padding = 18
tableStyle.right_padding = 18
tableStyle.top_padding = 12
tableStyle.bottom_padding = 12
table.style = tableStyle
doc.save(docs_base.artifacts_dir + "WorkingWithTableStylesAndFormatting.create_table_style.docx")
Casting Ole Controls
مثال کد زیر نحوه خواندن ویژگی های کنترل ActiveX را نشان می دهد:
doc = aw.Document(docs_base.my_dir + "ActiveX controls.docx")
properties = ""
for shape in doc.get_child_nodes(aw.NodeType.SHAPE, True) :
shape = shape.as_shape()
if shape.ole_format == None :
break
oleControl = shape.ole_format.ole_control
if oleControl.is_forms2_ole_control :
checkBox = oleControl.as_forms2_ole_control()
properties = properties + "\nCaption: " + checkBox.caption
properties = properties + "\nValue: " + checkBox.value
properties = properties + "\nEnabled: " + str(checkBox.enabled)
properties = properties + "\nType: " + str(checkBox.type)
if checkBox.child_nodes != None :
properties = properties + "\nChildNodes: " + checkBox.child_nodes
properties += "\n"
properties = properties + "\nTotal ActiveX Controls found: " + str(doc.get_child_nodes(aw.NodeType.SHAPE, True).count)
print("\n" + properties)
منابع فونت ریخته گری
کلاس FontSourceBase مجموعه ای از روش های as_xxx
را ارائه می دهد که در زیر لیست شده است:
- as_file_font_source()
- as_folder_font_source()
- as_memory_font_source()
- as_stream_font_source()
- as_system_font_source()
دسترسی به ویژگی های ایندکسر
Aspose.Words برای Python ویژگی های نمایه ساز را فقط بر اساس نوع int مجاز می کند، اما در .NET می توان از انواع دیگر مانند رشته ها استفاده کرد. برای پر کردن این شکاف کلاس های زیر یک روش اضافی دارند:
- FormFieldCollection * get_by_name(bookmark_name)
- FontInfoCollection * get_by_name(name)
- CustomXmlPartCollection * get_by_id(id)
- CustomXmlPropertyCollection * get_by_name(name)
- BuiltInDocumentProperties * get_by_name(name)
- CustomDocumentProperties * get_by_name(name)
- BookmarksOutlineLevelCollection * get_by_name(name)
- VbaModuleCollection * get_by_name(name)
- BookmarkCollection * get_by_name(bookmark_name)
- BorderCollection * get_by_border_type(border_type)
- HeaderFooterCollection * get_by_header_footer_type(header_footer_type)
- StyleCollection * get_by_name(name) * get_by_style_identifier(sti)
- VariableCollection * get_by_name(name)
نامگذاری اعضای API
برای نزدیکتر شدن به دنیای Python، اعضای API Aspose.Words برای Python via .NET از سبک مار پایتونیک استفاده میکنند، با این حال در اکثر موارد آنها یک به یک آنالوگ در Aspose.Words برای .NET API دارند. شما می توانید این آنالوگ را در فایل xml پیدا کنید.