Добавление текста к чертежу DWG часто является частью более крупного инженерного проекта. В некоторых случаях может потребоваться пометить оборудование, идентифицировать помещения, добавить ссылки на ревизии или разместить заметки в заранее заданных координатах. Когда эти данные берутся из базы данных или таблицы, ручное добавление каждой метки в CAD‑редакторе становится ненужной работой.

Aspose.CAD for Python via .NET позволяет загружать чертеж DWG, добавлять текстовый объект в его модельное пространство и экспортировать аннотированное содержимое. В этом руководстве вы добавите текст в чертеж DWG с помощью Python, зададите его позицию и внешний вид и сохраните результат в виде DXF и PDF.

Установить Aspose.CAD for Python via .NET

Вам нужна рабочая среда Python, пакет Aspose.CAD, и файл DWG для аннотирования. AutoCAD не требуется для выполнения этого примера.

Установите пакет с помощью pip:

pip install aspose-cad

Для получения дополнительных сведений об установке см. руководство по установке Aspose.CAD.

Поместите файл DWG с именем sample.dwg в ту же папку, что и ваш скрипт Python. Пример использует координаты модельного пространства (100, 100, 0) и высоту текста 5.0 единиц черчения. Возможно, вам потребуется скорректировать эти значения, чтобы они соответствовали вашему чертежу.

Добавить текст в чертеж DWG на Python

Чертежи CAD хранят текст как сущности, а не как пиксели. Класс CadText представляет однострочную сущность TEXT со свойствами для её содержимого, расположения, высоты, стиля и слоя. Добавление такой сущности сохраняет аннотационную часть модели CAD, а не просто рисует слова поверх экспортированного изображения.

Рабочий процесс заключается в загрузке файла DWG, поиске его блока модельного пространства, создании сущности CadText, добавлении её в этот блок, обновлении границ чертежа и экспорте результата.

Полный код Python для вставки текста в чертеж DWG

Следующий пример был протестирован с 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), чтобы получить доступ к загруженному чертежу через свойства, специфичные для CAD, включая block_entities.

with оператор сохраняет изображение открытым, пока его сущности модифицируются и экспортируются, затем освобождает ресурс после завершения обработки.

2. Найти блок Model-Space

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. Ее идентификатор цвета 256 означает ByLayer, поэтому слой контролирует её цвет.

После установки этих свойств, model_space.add_entity(text_entity) вставляет аннотацию в модельное пространство.

4. Пересчитать границы рисунка

Добавление текста может изменить область, занимаемую графическим содержимым. Вызов ниже обновляет границы рисунка перед экспортом:

cad_image.update_size(True)

Булевый аргумент требуется API Python, используемому в этом тестовом примере. Вызов update_size() без него может вызвать ошибку отсутствующего аргумента.

5. Экспорт аннотированного чертежа

DxfOptions используется для сохранения чертежа в формате DXF. CadRasterizationOptions контролирует размеры страницы при рендеринге, а PdfOptions создает PDF‑файл.

Обратите внимание, что размеры PDF указаны как 1600.0 и 1200.0, а не целыми числами. Тестируемые привязки Python ожидают числовые значения в таком виде для этих сеттеров.

Размеры страницы управляют макетом экспорта; они не являются высотой текста или реальными размерами чертежа.

Изменить положение текста, высоту, цвет и стиль

Вы можете настроить сущность CadText, изменив её свойства перед вызовом add_entity().

СвойствоЧто контролируетПример
default_valueТекст, отображаемый в чертеже"VALVE V-101"
first_alignmentПозиция текста в координатах CADCad3DPoint(150.0, 80.0, 0.0)
text_heightВысота текста в единицах чертежа3.0
scale_xГоризонтальный коэффициент масштабирования текста1.0
style_typeИмя стиля текста"Standard"
layer_nameСлой, связанный с текстом"0"
color_idЗначение индекса цвета AutoCAD1 для красного; 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 не является размером шрифта в три пункта; она измеряется в единицах чертежа.

Вы также должны использовать стиль текста и слой, которые существуют в исходном чертеже. В примере используются общие значения по умолчанию, но чертежи с пользовательскими стандартами могут требовать других имён.

Добавить несколько текстовых меток в чертеж 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

Формат, который вы выбираете, зависит от того, что происходит после аннотации.

Сохранить как DXF для редактирования CAD

В основном примере используется DxfOptions для экспорта чертежа:

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

DXF полезен, когда следующий шаг включает CAD‑приложение или другую систему, потребляющую графические сущности. Однако таблица поддерживаемых форматов Aspose.CAD описывает запись 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 предназначен для просмотра полученного чертежа, а не для редактирования его CAD‑элементов. Если вам нужен обновлённый файл DWG, используйте отдельный совместимый CAD‑рабочий процесс для его создания из соответствующего промежуточного формата; прямое сохранение DWG не указано в Python API.

Устранение неполадок при вставке текста в файлы DWG

Вставленный текст не виден. Сначала проверьте координаты текста. Метка могла быть размещена за пределами видимой геометрии. Также проверьте видимость слоя, высоту текста и выбранный стиль текста. Сравните выводы DXF и PDF, чтобы определить, происходит ли проблема при вставке сущности или при рендеринге.

Скрипт не может найти модельное пространство. Пример генерирует Model space block was not found. если ни одно имя блока не соответствует *Model_Space. Проверьте блоки в исходном файле и убедитесь, что он содержит данные модельного пространства в ожидаемой структуре. Не продолжайте работу с отсутствующей ссылкой на блок.

update_size() сообщает об отсутствующем аргументе. Используйте cad_image.update_size(True) как показано в работающем примере. Эта сигнатура важна для используемой здесь привязки Python.

Размеры страницы PDF вызывают ошибку типа. Передайте значения с плавающей запятой, такие как 1600.0 и 1200.0, в page_width и page_height соответственно.

Текст выглядит иначе, чем в редакторе CAD. Проверьте стиль текста чертежа и доступность соответствующих шрифтов в среде обработки. Рендеринг может отличаться, если ожидаемый шрифт отсутствует или заменён.

DXF содержит неожиданные различия. Запись DXF поддерживается только частично. Тестируйте с представительными чертежами и проверяйте полученные сущности в CAD‑просмотрщике перед тем, как интегрировать вывод в автоматизированный процесс.

Часто задаваемые вопросы

Можно ли добавить текст в файл DWG с помощью Python без AutoCAD?

Да. Aspose.CAD for Python via .NET может загрузить чертёж DWG и добавить сущность CadText без AutoCAD. Затем пример экспортирует изменённый чертёж в DXF и PDF.

Как указать позицию текста в чертеже DWG?

Установите first_alignment у объекта CadText, используя Cad3DPoint(x, y, z). Выберите значения, соответствующие подходящему расположению в оригинальном чертеже.

Могу ли я добавить текст в определённый слой?

Да. Установите layer_name в имя нужного слоя. В основном примере аннотация использует слой 0 и идентификатор цвета 256 (ByLayer).

Можно ли автоматически добавить несколько текстовых меток?

Да. Создайте новый объект CadText для каждой метки, задайте его содержимое и координаты и добавьте его в модельное пространство. Этот шаблон может быть основан на списке записей или другом структурированном источнике данных.

Могу ли я сохранить изменённый чертёж обратно в DWG?

Прямое сохранение DWG не указано в списке поддерживаемых форматов Aspose.CAD for Python. Тестовый рабочий процесс экспортирует изменённый чертёж в DXF и PDF, оставляя исходный DWG без изменений.

Получите бесплатную временную лицензию

Вы можете запросить бесплатную 30‑дневную временную лицензию для оценки Aspose.CAD for Python via .NET без ограничений оценки. Чтобы применить лицензию в вашем приложении Python, следуйте руководству по лицензированию Aspose.CAD.

Бесплатные учебные ресурсы

Изучите эти ресурсы для получения дополнительной информации о обработке чертежей CAD в Python:

Заключение

Добавление текста в чертеж DWG с помощью Python — практический способ генерировать метки оборудования, идентификаторы помещений и другие аннотации из данных приложения. Основные шаги включают поиск модельного пространства, создание сущности CadText с соответствующими координатами и стилем, а также обновление границ чертежа перед экспортом.

Следующим шагом является замена примерной метки координатами и идентификаторами из ваших собственных данных чертежа. Проверьте вывод DXF в CAD‑редакторе и используйте PDF в качестве копии для проверки, особенно при развертывании рабочего процесса на чертежах с различными единицами измерения, слоями или шрифтами.