Python 및 .NET 버전 차이점

Aspose.Words for Python via .NET는 Aspose.Words for .NET의 래퍼이므로 두 제품의 기능 세트가 거의 동일합니다. 그럼에도 불구하고 이 페이지에 설명된 기능과 API에는 작업의 미묘한 차이와 차이점이 있습니다.

기능 차이점

래핑 프로세스로 인해 Python 버전에서는 사용할 수 없는 일부 기능이 있습니다. 다음은 현재 Python 버전에서 사용할 수 없는 가장 주목할만한 기능 목록입니다.

  • 인터페이스 구현은 아직 지원되지 않으므로 IWarningCallback, IReplacingCallback, IFieldUpdatingCallback, IFieldMergingCallback 등과 같은 콜백을 사용할 수 없습니다.
  • Aspose.Words의 .NET Standard 2.0 버전이 Python 버전의 백엔드로 사용되므로 인쇄 기능을 사용할 수 없습니다. 이 버전 역시 이 기능을 제공하지 않습니다.
  • 필드 이름과 필드 값의 배열을 데이터 소스로 하는 간단한 Mail Merge 기능만 제공됩니다.
  • 현재 Python 코드에서는 DocumentVisitor 구현이 불가능합니다.

Python에서 Aspose.Words 객체 캐스팅

Python 개발자에게는 유형 캐스팅이 자연스럽지 않지만 문서 노드나 필드를 구체적인 유형으로 캐스팅하지 않으면 일부 작업을 수행할 수 없습니다. Python via .NET용 Aspose.Words는 필요한 경우 객체 캐스팅을 허용하는 특별한 방법을 제공합니다.

캐스팅 노드

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() 메서드를 사용해야 합니다. Aspose.Words Node 클래스의 Python 버전에서는 다음과 같은 as_xxx 메서드 링크를 소개합니다

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 메서드 세트도 제공합니다

캐스팅 스타일

테이블 스타일을 사용하려면 캐스팅도 필요합니다

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")

캐스팅 올레 컨트롤

다음 코드 예제에서는 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 메서드 세트를 제공합니다

인덱서 속성에 액세스

Python용 Aspose.Words는 int 유형별로만 인덱서 속성을 허용하지만 .NET에서는 문자열과 같은 다른 유형을 사용할 수도 있습니다. 이 격차를 메우기 위해 다음 클래스에는 추가 메서드가 있습니다

API 회원 이름 지정

Python 세계에 더 가까워지기 위해 Python via .NET용 Aspose.Words의 API 멤버는 Pythonic Snake 스타일을 사용하지만 대부분의 경우 .NET API용 Aspose.Words에는 일대일 아날로그가 있습니다. XML 파일에서 이러한 아날로그를 찾을 수 있습니다.