DWG 도면에 텍스트를 추가하는 것은 종종 더 큰 엔지니어링 작업의 일부입니다. 특정 경우에는 장비에 라벨을 붙이거나, 방을 식별하거나, 개정 참조를 추가하거나, 미리 정의된 좌표에 메모를 배치해야 할 수 있습니다. 이러한 세부 정보가 데이터베이스나 스프레드시트에서 제공될 때, CAD 편집기에서 각 라벨을 수동으로 추가하는 것은 불필요한 작업입니다.

Aspose.CAD for Python via .NET 은(는) DWG 도면을 로드하고 모델 공간에 텍스트 엔터티를 추가한 뒤 주석이 달린 콘텐츠를 내보낼 수 있게 해줍니다. 이 튜토리얼에서는 Python을 사용하여 DWG 도면에 텍스트를 추가하고, 위치와 모양을 설정한 뒤 결과를 DXF 및 PDF 로 저장합니다.

Aspose.CAD for Python via .NET 설치

작동하는 Python 환경과 Aspose.CAD package, 그리고 주석을 달 DWG 파일이 필요합니다. 이 예제를 실행하는 데 AutoCAD는 필요하지 않습니다.

pip으로 패키지를 설치합니다:

pip install aspose-cad

추가 설정 세부 사항은 Aspose.CAD 설치 가이드를 참조하십시오.

Python 스크립트와 동일한 폴더에 sample.dwg라는 DWG 파일을 배치하십시오. 예제는 모델 공간 좌표 (100, 100, 0)와 텍스트 높이 5.0 그리기 단위를 사용합니다. 도면에 맞게 이러한 값을 조정해야 할 수 있습니다.

Python에서 DWG 도면에 텍스트 추가

CAD 도면은 텍스트를 픽셀 대신 엔터티로 저장합니다. CadText 클래스는 단일 라인 TEXT 엔터티를 나타내며, 내용, 위치, 높이, 스타일 및 레이어에 대한 속성을 가집니다. 이러한 엔터티를 추가하면 내보낸 이미지 위에 단순히 단어를 그리는 것이 아니라 CAD 모델의 주석 부분을 유지합니다.

워크플로는 DWG 파일을 로드하고, 모델‑스페이스 블록을 찾아, CadText 엔터티를 생성한 다음 해당 블록에 추가하고, 도면 경계를 업데이트한 후 결과를 내보내는 것입니다.

DWG 도면에 텍스트 삽입을 위한 전체 Python 코드

다음 예제는 Aspose.CAD for Python via .NET을 사용하여 테스트되었습니다. 이 예제는 도면에 Hello from Aspose.CAD Python 라벨을 추가하고 두 개의 출력 파일을 생성합니다.

import aspose.cad as cad
from aspose.pycore import cast

from aspose.cad.fileformats.cad import CadImage
from aspose.cad.fileformats.cad.cadobjects import (
    CadText,
    Cad3DPoint,
)

from aspose.cad.imageoptions import (
    DxfOptions,
    PdfOptions,
    CadRasterizationOptions,
)

# Input and output files
input_file = "sample.dwg"
output_dxf = "drawing_with_text.dxf"
output_pdf = "drawing_with_text.pdf"

# Text properties
text_value = "Hello from Aspose.CAD Python"
text_x = 100.0
text_y = 100.0
text_height = 5.0

# Load the DWG drawing
with cad.Image.load(str(input_file)) as image:

# IMPORTANT: Cast Image to CadImage
    cad_image = cast(CadImage, image)

# Find model space
    model_space = None

for block in cad_image.block_entities.values_typed:
        block_name = block.name or ""
        original_name = block.original_block_name or ""

if (
            block_name.lower() == "*model_space"
            or original_name.lower() == "*model_space"
        ):
            model_space = block
            break

if model_space is None:
        raise RuntimeError(
            "Model space block was not found."
        )

# Create a new TEXT entity
    text_entity = CadText()

text_entity.default_value = text_value
    text_entity.style_type = "Standard"
    text_entity.layer_name = "0"
    text_entity.color_id = 256

text_entity.text_height = text_height
    text_entity.scale_x = 1.0

# Set text position
    text_entity.first_alignment = Cad3DPoint(
        text_x,
        text_y,
        0.0
    )

# Add the text to model space
    model_space.add_entity(text_entity)

# Update drawing bounds
    cad_image.update_size(True)

# Save as editable DXF
    dxf_options = DxfOptions()
    cad_image.save(str(output_dxf), dxf_options)

print(f"DXF created: {output_dxf}")

# Save as PDF for viewing
    raster_options = CadRasterizationOptions()
    raster_options.page_width = 1600.0
    raster_options.page_height = 1200.0

pdf_options = PdfOptions()
    pdf_options.vector_rasterization_options = raster_options

cad_image.save(str(output_pdf), pdf_options)

print(f"PDF created: {output_pdf}")

print("Text added successfully.")

예상 출력

스크립트가 성공적으로 완료되면 sample.dwg 옆에 다음 파일이 생성됩니다:

  • drawing_with_text.dxf — 새 텍스트 엔터티가 포함된 내보낸 CAD 도면이며, DXF 라이터가 지원하는 경우에 해당합니다.
  • drawing_with_text.pdf — 주석이 달린 도면의 렌더링된 복사본으로 검토 또는 공유용입니다.

콘솔 출력은 다음과 같습니다:

DXF created: drawing_with_text.dxf
PDF created: drawing_with_text.pdf
Text added successfully.

두 출력 파일을 모두 열어 레이블이 보이고 올바르게 배치되었는지 확인하십시오. 원본 sample.dwg는 수정되지 않았습니다.

Python 코드 작동 방식

예제에서 몇 가지 세부 사항은 간단한 테스트 드로잉에서 실제 파일로 이동할 때 중요합니다.

1. DWG 도면 로드 및 캐스팅

cad.Image.load() 메서드는 소스 파일을 엽니다. 예제에서는 cast(CadImage, image)를 사용하여 로드된 도면에 block_entities와 같은 CAD 전용 속성을 통해 접근할 수 있습니다.

with 문은 이미지가 열려 있는 상태에서 해당 엔터티가 수정 및 내보내기될 때까지 유지하고, 처리 완료 시 리소스를 해제합니다.

2. 모델 공간 블록 찾기

DWG 도면에는 여러 블록이 포함될 수 있습니다. 새 텍스트는 의도된 그리기 공간을 나타내는 블록에 추가해야 합니다.

예제는 cad_image.block_entities.values_typed를 반복하면서 block.name과 block.original_block_name 모두에서 *Model_Space를 대소문자를 구분하지 않고 확인합니다. 이는 모델 공간에 항상 직접 사전 키를 사용하여 접근할 수 있다고 가정하는 것을 방지합니다.

모델 공간을 찾을 수 없으면, 스크립트는 RuntimeError를 발생시킵니다. 이는 새 주석 없이 파일을 조용히 내보내는 것보다 바람직합니다.

3. 텍스트 엔터티 생성 및 위치 지정

CadText()는 새로운 단일 라인 주석을 생성합니다. 그 default_value 속성은 표시되는 텍스트를 저장합니다. 위치는 Cad3DPoint(text_x, text_y, 0.0)에서 가져오며, first_alignment에 할당됩니다.

이 예제에서 text_height = 5.0은 도면 단위의 높이를 정의하고, scale_x = 1.0은 수평 스케일 팩터를 설정합니다. 엔터티는 Standard 텍스트 스타일과 레이어 0을 사용합니다. 색상 ID 256은 ByLayer를 의미하므로 레이어가 색상을 제어합니다.

이러한 속성을 설정한 후, model_space.add_entity(text_entity)는 주석을 모델 공간에 삽입합니다.

4. 그리기 경계 재계산

텍스트를 추가하면 도형 콘텐츠가 차지하는 영역이 변경될 수 있습니다. 아래 호출은 내보내기 전에 도형 경계를 업데이트합니다:

cad_image.update_size(True)

Boolean 인수는 이 테스트 예제에서 사용된 Python API에 필요합니다. update_size()를 인수 없이 호출하면 누락된 인수 오류가 발생할 수 있습니다.

5. 주석이 달린 도면 내보내기

DxfOptions는 도면을 DXF 형식으로 저장하는 데 사용됩니다. CadRasterizationOptions는 렌더링을 위한 페이지 크기를 제어하고, PdfOptions는 PDF 파일을 생성합니다.

PDF 차원이 정수 대신 1600.0 및 1200.0으로 작성된다는 점에 유의하십시오. 테스트된 Python 바인딩은 이러한 설정자에 대해 이 형식의 숫자 값을 기대합니다.

페이지 차원은 내보내기 레이아웃을 제어합니다; 이는 텍스트 높이나 도면의 실제 차원이 아님.

텍스트 위치, 높이, 색상 및 스타일 변경

add_entity()를 호출하기 전에 속성을 변경하여 CadText 엔터티를 사용자 정의할 수 있습니다.

속성제어 내용예시
default_value도면에 표시되는 텍스트"VALVE V-101"
first_alignmentCAD 좌표의 텍스트 위치Cad3DPoint(150.0, 80.0, 0.0)
text_height도면 단위의 텍스트 높이3.0
scale_x가로 텍스트 스케일 팩터1.0
style_type텍스트 스타일 이름"Standard"
layer_name텍스트와 연결된 레이어"0"
color_idAutoCAD 색인 색상 값1은 빨간색; 256은 ByLayer

예를 들어, 메인 스크립트에서 텍스트 속성을 변경하여 밸브에 레이블을 지정합니다:

text_entity.default_value = "VALVE V-101"
text_entity.first_alignment = Cad3DPoint(
    150.0, 80.0, 0.0
)
text_entity.text_height = 3.0
text_entity.scale_x = 1.0
text_entity.style_type = "Standard"
text_entity.layer_name = "0"
text_entity.color_id = 1

메인 예제에서 model_space.add_entity(text_entity) 이전에 이 속성 설정 스니펫을 실행하십시오.

실제 도면에 맞는 좌표를 사용하십시오. CAD 도면은 종종 프로젝트별 단위 또는 좌표 시스템을 사용하므로 (150, 80)은 한 도면에서는 내부에 있을 수 있지만 다른 도면에서는 기하학에서 멀리 떨어져 있을 수 있습니다. 마찬가지로 높이 3.0은 3포인트 글꼴 크기가 아니라 도면 단위로 측정됩니다.

소스 도면에 존재하는 텍스트 스타일과 레이어를 사용해야 합니다. 예제는 일반적인 기본값을 사용하지만, 사용자 정의 표준이 적용된 도면은 다른 이름이 필요할 수 있습니다.

DWG 도면에 여러 텍스트 레이블 추가

단일 레이블이 작동하면 동일한 접근 방식을 여러 주석에 확장할 수 있습니다. 이는 장비 식별자, 방 이름 또는 검사 참조가 이미 구조화된 데이터로 저장된 경우에 유용합니다.

예를 들어, 레이블과 삽입 좌표를 정의합니다:

labels = [
    ("VALVE V-101", 40.0, 80.0),
    ("VALVE V-102", 70.0, 80.0),
    ("PUMP P-201", 100.0, 80.0),
    ("CONTROL PANEL", 130.0, 80.0),
]

for label, x, y in labels:
    text = CadText()
    text.default_value = label
    text.first_alignment = Cad3DPoint(x, y, 0.0)
    text.text_height = 2.5
    text.scale_x = 1.0
    text.style_type = "Standard"
    text.layer_name = "0"
    text.color_id = 256

model_space.add_entity(text)

cad_image.update_size(True)

이 스니펫을 with 블록 안, 모델 공간을 찾은 후 그리고 DXF/PDF 내보내기 전에 삽입하십시오. 이것은 작동하는 단일 텍스트 예제와 동일한 엔터티 생성 패턴을 사용합니다; 다중 레이블 변형은 여기서 별도로 테스트되지 않았습니다.

실제 애플리케이션에서는 labels를 CSV 파일, 장비 등록부 또는 데이터베이스에서 채울 수 있습니다. 애플리케이션의 주요 책임은 유효한 좌표와 적절한 텍스트 속성을 제공하는 것입니다. 라이브러리는 지정한 위치에 엔터티를 삽입하며, 레이블 겹침을 자동으로 방지하지는 않습니다.

텍스트가 포함된 도면을 DXF 또는 PDF로 저장

선택하는 형식은 주석 처리 후에 발생하는 일에 따라 달라집니다.

CAD 편집을 위한 DXF 저장

주요 예제는 DxfOptions를 사용하여 도면을 내보냅니다:

dxf_options = DxfOptions()
cad_image.save("drawing_with_text.dxf", dxf_options)

DXF는 다음 단계가 CAD 애플리케이션이나 도면 엔터티를 사용하는 다른 시스템을 포함할 때 유용합니다. 그러나 Aspose.CAD’s supported-format table은 DXF 쓰기가 부분적으로 지원된다고 설명합니다. 엔지니어링 워크플로에서 사용하기 전에 내보낸 파일의 중요한 주석, 레이어 및 기하학을 검증하십시오.

보기 및 공유를 위한 PDF 저장

디자인 검토, 보고서 또는 문서 배포를 위해, 예제는 PDF도 내보냅니다:

raster_options = CadRasterizationOptions()
raster_options.page_width = 1600.0
raster_options.page_height = 1200.0

pdf_options = PdfOptions()
pdf_options.vector_rasterization_options = raster_options

cad_image.save("drawing_with_text.pdf", pdf_options)

PDF는 결과 도면을 편집하기보다 보기 위해 사용됩니다. 업데이트된 DWG 파일이 필요하면 적절한 중간 형식에서 이를 생성하기 위해 별도의 호환 CAD 워크플로를 사용하십시오; Python API에서는 직접 DWG 저장이 지원되지 않습니다.

DWG 파일에서 텍스트 삽입 문제 해결

삽입된 텍스트가 보이지 않습니다. 먼저 텍스트 좌표를 확인하십시오. 레이블이 보이는 기하학 영역 밖에 배치되었을 수 있습니다. 또한 레이어의 가시성, 텍스트 높이 및 선택된 텍스트 스타일을 검사하십시오. DXF 및 PDF 출력물을 비교하여 문제가 엔터티 삽입 중에 발생하는지 렌더링 중에 발생하는지 확인하십시오.

스크립트가 모델 공간을 찾을 수 없습니다. 예제는 블록 이름이 *Model_Space와 일치하지 않을 경우 Model space block was not found. 오류를 발생시킵니다. 소스 파일의 블록을 검사하고 예상 구조에 모델 공간 데이터가 포함되어 있는지 확인하십시오. 누락된 블록 참조로 진행하지 마십시오.

update_size()가 인수가 누락되었다는 오류를 보고합니다. cad_image.update_size(True)를 작동 예제에 표시된 대로 사용하십시오. 이 서명은 여기서 사용되는 Python 바인딩에 중요합니다.

PDF 페이지 차원으로 인해 유형 오류가 발생합니다. page_width와 page_height에 각각 1600.0 및 1200.0과 같은 부동 소수점 값을 전달하십시오.

텍스트가 CAD 편집기와 다르게 보입니다. 도면의 텍스트 스타일과 해당 폰트가 처리 환경에 있는지 확인하십시오. 예상 폰트가 없거나 대체된 경우 렌더링이 다를 수 있습니다.

DXF에 예상치 못한 차이가 포함되어 있습니다. DXF 쓰기는 부분적으로만 지원됩니다. 대표 도면으로 테스트하고, 자동화 프로세스에 출력을 통합하기 전에 CAD 뷰어에서 결과 엔터티를 검토하십시오.

자주 묻는 질문

AutoCAD 없이 Python으로 DWG 파일에 텍스트를 추가할 수 있나요?

예. Aspose.CAD for Python via .NET은 DWG 도면을 로드하고 AutoCAD 없이 CadText 엔터티를 추가할 수 있습니다. 그런 다음 예제는 수정된 도면을 DXF 및 PDF로 내보냅니다.

DWG 도면에서 텍스트 위치를 어떻게 지정하나요?

원본 도면에서 적절한 위치에 해당하는 값을 선택하여 Cad3DPoint(x, y, z)를 사용해 CadText 객체의 first_alignment를 설정하십시오.

특정 레이어에 텍스트를 추가할 수 있나요?

예. layer_name을 의도한 레이어의 이름으로 설정합니다. 주요 예제에서는 주석이 레이어 0과 색상 ID 256(ByLayer)을 사용합니다.

텍스트 레이블을 자동으로 여러 개 추가할 수 있나요?

예. 각 레이블마다 새로운 CadText 엔터티를 생성하고, 내용과 좌표를 설정한 뒤 모델 공간에 추가합니다. 이 패턴은 레코드 목록이나 다른 구조화된 데이터 소스로 구동될 수 있습니다.

수정된 도면을 DWG로 다시 저장할 수 있나요?

Direct DWG 저장은 Aspose.CAD for Python 지원 형식에 나열되어 있지 않습니다. 테스트된 워크플로는 수정된 도면을 DXF와 PDF로 내보내며, 원본 DWG는 변경되지 않은 상태로 남깁니다.

무료 임시 라이선스 받기

평가 제한 없이 Aspose.CAD for Python via .NET을 평가하려면 무료 30일 임시 라이선스를 요청할 수 있습니다 . Python 애플리케이션에 라이선스를 적용하려면 Aspose.CAD 라이선스 가이드를 따르세요.

무료 학습 자료

Python에서 CAD 도면을 처리하는 방법에 대한 자세한 정보를 보려면 다음 리소스를 확인하십시오.

결론

Python을 사용하여 DWG 도면에 텍스트를 추가하는 것은 애플리케이션 데이터에서 장비 라벨, 방 식별자 및 기타 주석을 생성하는 실용적인 방법입니다. 필수 단계는 모델 공간을 찾고, 적절한 좌표와 스타일을 가진 CadText 엔터티를 생성한 다음, 내보내기 전에 도면 경계를 업데이트하는 것입니다.

다음 단계는 예제 레이블을 자체 도면 데이터의 좌표와 식별자로 교체하는 것입니다. CAD 편집기에서 DXF 출력을 확인하고, 특히 서로 다른 단위, 레이어 또는 글꼴을 가진 도면에 워크플로를 적용할 때 검토용 사본으로 PDF를 사용하십시오.