Thêm văn bản vào bản vẽ DWG thường là một phần của công việc kỹ thuật lớn hơn. Trong một số trường hợp, bạn có thể cần gắn nhãn cho thiết bị, xác định phòng, thêm tham chiếu sửa đổi, hoặc đặt ghi chú tại các tọa độ đã định trước. Khi những chi tiết này đến từ cơ sở dữ liệu hoặc bảng tính, việc thêm từng nhãn một cách thủ công trong trình chỉnh sửa CAD là công việc không cần thiết.
Aspose.CAD for Python via .NET cho phép bạn tải một bản vẽ DWG, thêm một thực thể văn bản vào không gian mô hình của nó, và xuất nội dung đã chú thích. Trong hướng dẫn này, bạn sẽ thêm văn bản vào bản vẽ DWG bằng Python, đặt vị trí và kiểu dáng của nó, và lưu kết quả dưới dạng DXF và PDF.
Cài đặt Aspose.CAD for Python via .NET
Bạn cần một môi trường Python hoạt động, Aspose.CAD package, và một tệp DWG để chú thích. AutoCAD không bắt buộc để chạy ví dụ này.
Cài đặt gói bằng pip:
pip install aspose-cad
Để biết thêm chi tiết thiết lập, xem hướng dẫn cài đặt Aspose.CAD.
Đặt một tệp DWG có tên sample.dwg trong cùng thư mục với script Python của bạn. Ví dụ sử dụng tọa độ không gian mô hình (100, 100, 0) và chiều cao văn bản là 5.0 đơn vị vẽ. Bạn có thể cần điều chỉnh các giá trị này để phù hợp với bản vẽ của mình.
Thêm Văn Bản vào Bản Vẽ DWG trong Python
Bản vẽ CAD lưu trữ văn bản dưới dạng các thực thể thay vì các pixel. Lớp CadText đại diện cho một thực thể TEXT một dòng, với các thuộc tính cho nội dung, vị trí, chiều cao, kiểu dáng và lớp. Thêm thực thể như vậy giữ lại phần chú thích của mô hình CAD thay vì chỉ vẽ các từ lên trên một hình ảnh đã xuất.
Quy trình làm việc là tải tệp DWG, xác định khối model-space của nó, tạo một thực thể CadText, thêm nó vào khối đó, cập nhật giới hạn bản vẽ và xuất kết quả.
Mã Python đầy đủ để chèn văn bản vào bản vẽ DWG
Ví dụ sau đã được kiểm tra với Aspose.CAD for Python via .NET. Nó thêm nhãn Hello from Aspose.CAD Python vào bản vẽ và tạo ra hai tệp đầu ra.
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.")
Kết quả mong đợi
Khi script hoàn thành thành công, nó tạo ra các tệp sau bên cạnh sample.dwg:
drawing_with_text.dxf— tệp CAD đã xuất với thực thể văn bản mới, nếu bộ ghi DXF hỗ trợ.drawing_with_text.pdf— bản sao đã render của bản vẽ đã chú thích để xem xét hoặc chia sẻ.
Kết quả đầu ra trên console là:
DXF created: drawing_with_text.dxf
PDF created: drawing_with_text.pdf
Text added successfully.
Mở cả hai tệp đầu ra để xác nhận rằng nhãn hiển thị và được đặt đúng vị trí. Tệp sample.dwg gốc không bị thay đổi.
Cách hoạt động của mã Python
Một vài chi tiết trong ví dụ quan trọng khi bạn chuyển từ bản vẽ thử nghiệm đơn giản sang tệp sản xuất.
1. Tải và Ép kiểu Bản vẽ DWG
cad.Image.load() method mở tệp nguồn. Ví dụ sau đó sử dụng cast(CadImage, image) để bản vẽ đã tải có thể được truy cập thông qua các thuộc tính đặc thù của CAD, bao gồm block_entities.
with statement giữ cho hình ảnh mở trong khi các thực thể của nó được sửa đổi và xuất ra, sau đó giải phóng tài nguyên khi quá trình xử lý kết thúc.
2. Tìm khối Model-Space
Một bản vẽ DWG có thể chứa nhiều khối. Văn bản mới phải được thêm vào khối đại diện cho không gian vẽ mong muốn.
Ví dụ lặp qua cad_image.block_entities.values_typed và kiểm tra cả block.name và block.original_block_name đối với *Model_Space, không phân biệt chữ hoa chữ thường. Điều này tránh việc giả định rằng không gian mô hình luôn có thể được truy cập bằng một khóa từ điển trực tiếp.
Nếu không thể tìm thấy không gian mô hình, script sẽ gây ra một RuntimeError. Điều này được ưu tiên hơn việc xuất file một cách im lặng mà không có chú thích mới.
3. Tạo và Định vị Thực thể Văn bản
CadText() tạo chú thích một dòng mới. Thuộc tính default_value của nó lưu trữ văn bản hiển thị. Vị trí được lấy từ Cad3DPoint(text_x, text_y, 0.0), được gán cho first_alignment.
Trong ví dụ này, text_height = 5.0 xác định chiều cao theo đơn vị vẽ, và scale_x = 1.0 đặt hệ số tỷ lệ theo chiều ngang. Thực thể sử dụng kiểu văn bản Standard và lớp 0. ID màu của nó là 256 có nghĩa là ByLayer, vì vậy lớp kiểm soát màu của nó.
Sau khi các thuộc tính này được thiết lập, model_space.add_entity(text_entity) chèn chú thích vào không gian mô hình.
4. Tính lại giới hạn vẽ
Thêm văn bản có thể làm thay đổi khu vực chiếm bởi nội dung vẽ. Lệnh dưới đây cập nhật giới hạn vẽ trước khi xuất:
cad_image.update_size(True)
Đối số Boolean là bắt buộc đối với API Python được sử dụng trong ví dụ đã kiểm tra này. Gọi update_size() mà không có nó có thể gây ra lỗi thiếu đối số.
5. Xuất bản vẽ đã chú thích
DxfOptions được sử dụng để lưu bản vẽ dưới dạng DXF. CadRasterizationOptions kiểm soát kích thước trang cho việc render, và PdfOptions tạo ra tệp PDF.
Lưu ý rằng kích thước PDF được viết dưới dạng 1600.0 và 1200.0, không phải số nguyên. Các ràng buộc Python đã kiểm tra mong đợi các giá trị số ở dạng này cho các setter này.
Kích thước trang kiểm soát bố cục xuất; chúng không phải là chiều cao văn bản hoặc kích thước thực tế của bản vẽ.
Thay đổi vị trí, chiều cao, màu sắc và kiểu chữ
Bạn có thể tùy chỉnh một thực thể CadText bằng cách thay đổi các thuộc tính của nó trước khi gọi add_entity().
| Property | What it controls | Example |
|---|---|---|
default_value | Văn bản hiển thị trong bản vẽ | "VALVE V-101" |
first_alignment | Vị trí văn bản trong tọa độ CAD | Cad3DPoint(150.0, 80.0, 0.0) |
text_height | Chiều cao văn bản theo đơn vị bản vẽ | 3.0 |
scale_x | Hệ số tỉ lệ ngang của văn bản | 1.0 |
style_type | Tên kiểu văn bản | "Standard" |
layer_name | Lớp liên kết với văn bản | "0" |
color_id | Giá trị chỉ mục màu AutoCAD | 1 cho màu đỏ; 256 cho ByLayer |
Ví dụ, thay đổi các thuộc tính văn bản trong script chính để gắn nhãn cho van:
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
Chạy đoạn mã thiết lập thuộc tính này trước model_space.add_entity(text_entity) trong ví dụ chính.
Sử dụng các tọa độ phù hợp với bản vẽ thực tế. Các bản vẽ CAD thường sử dụng đơn vị hoặc hệ tọa độ riêng cho dự án, vì vậy (150, 80) có thể nằm trong một bản vẽ và cách xa hình học trong bản vẽ khác. Tương tự, chiều cao 3.0 không phải là kích thước phông chữ ba điểm; nó được đo bằng đơn vị của bản vẽ.
Bạn cũng nên sử dụng kiểu văn bản và lớp đã tồn tại trong bản vẽ nguồn. Ví dụ sử dụng các mặc định chung, nhưng các bản vẽ với tiêu chuẩn tùy chỉnh có thể yêu cầu các tên khác.
Thêm Nhiều Nhãn Văn Bản vào Bản Vẽ DWG
Khi một nhãn duy nhất đã hoạt động, bạn có thể mở rộng cùng một cách tiếp cận cho nhiều chú thích. Điều này hữu ích khi các định danh thiết bị, tên phòng hoặc tham chiếu kiểm tra đã được lưu trữ dưới dạng dữ liệu có cấu trúc.
Ví dụ, xác định các nhãn và tọa độ chèn của chúng:
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)
Đặt đoạn mã này bên trong khối with, sau khi đã tìm thấy model space và trước khi xuất DXF/PDF. Nó sử dụng cùng mẫu tạo thực thể như ví dụ đơn văn bản đang hoạt động; biến thể đa nhãn chưa được kiểm tra riêng ở đây.
Trong một ứng dụng thực tế, labels có thể được điền từ tệp CSV, một sổ đăng ký thiết bị, hoặc một cơ sở dữ liệu. Trách nhiệm chính của ứng dụng của bạn là cung cấp các tọa độ hợp lệ và các thuộc tính văn bản thích hợp. Thư viện chèn các thực thể vào các vị trí bạn chỉ định; nó không tự động ngăn chặn việc chồng lấn nhãn.
Lưu bản vẽ kèm văn bản dưới dạng DXF hoặc PDF
Định dạng bạn chọn phụ thuộc vào những gì xảy ra sau khi chú thích.
Lưu dưới dạng DXF để chỉnh sửa CAD
Ví dụ chính sử dụng DxfOptions để xuất bản bản vẽ:
dxf_options = DxfOptions()
cad_image.save("drawing_with_text.dxf", dxf_options)
DXF hữu ích khi bước tiếp theo liên quan đến một ứng dụng CAD hoặc hệ thống khác tiêu thụ các thực thể bản vẽ. Tuy nhiên, bảng định dạng được hỗ trợ của Aspose.CAD mô tả việc ghi DXF là partially supported. Xác thực các chú thích quan trọng, lớp và hình học trong tệp đã xuất trước khi sử dụng trong quy trình công việc kỹ thuật.
Lưu dưới dạng PDF để xem và chia sẻ
Đối với các buổi đánh giá thiết kế, báo cáo hoặc phân phối tài liệu, ví dụ cũng xuất ra 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 được thiết kế để xem bản vẽ kết quả hơn là chỉnh sửa các thực thể CAD của nó. Nếu bạn cần một tệp DWG cập nhật, hãy sử dụng quy trình CAD tương thích riêng để tạo ra nó từ một định dạng trung gian thích hợp; việc lưu DWG trực tiếp không được liệt kê cho API Python.
Xử lý sự cố chèn văn bản trong tệp DWG
Văn bản đã chèn không hiển thị. Kiểm tra tọa độ văn bản trước tiên. Nhãn có thể đã được đặt ngoài phạm vi hình học có thể nhìn thấy. Cũng kiểm tra tính hiển thị của lớp, chiều cao văn bản và kiểu văn bản đã chọn. So sánh các đầu ra DXF và PDF để xác định liệu vấn đề xảy ra trong quá trình chèn thực thể hay khi render.
Kịch bản không thể tìm thấy không gian mô hình. Ví dụ sẽ ném lỗi Model space block was not found. nếu không có tên khối nào khớp với *Model_Space. Kiểm tra các khối trong tệp nguồn và xác nhận rằng nó chứa dữ liệu không gian mô hình theo cấu trúc mong đợi. Đừng tiếp tục với tham chiếu khối bị thiếu.
update_size() báo cáo thiếu đối số. Sử dụng cad_image.update_size(True) như trong ví dụ hoạt động. Chữ ký này quan trọng đối với binding Python được sử dụng ở đây.
Kích thước trang PDF gây ra lỗi kiểu dữ liệu. Truyền các giá trị số thực như 1600.0 và 1200.0 vào page_width và page_height, tương ứng.
Văn bản trông khác so với trình chỉnh sửa CAD. Kiểm tra kiểu văn bản của bản vẽ và xem các phông chữ tương ứng có sẵn trong môi trường xử lý hay không. Việc hiển thị có thể khác nhau nếu phông chữ mong đợi bị thiếu hoặc được thay thế.
DXF chứa các khác biệt không mong đợi. Việc ghi DXF chỉ được hỗ trợ một phần. Hãy thử với các bản vẽ đại diện và xem lại các thực thể tạo ra trong một trình xem CAD trước khi tích hợp đầu ra vào quy trình tự động.
Câu hỏi thường gặp
Tôi có thể thêm văn bản vào tệp DWG bằng Python mà không cần AutoCAD không?
Đúng. Aspose.CAD for Python via .NET có thể tải một bản vẽ DWG và thêm một thực thể CadText mà không cần AutoCAD. Ví dụ sau đó xuất bản vẽ đã chỉnh sửa sang DXF và PDF.
Làm thế nào để chỉ định vị trí của văn bản trong bản vẽ DWG?
Đặt first_alignment cho đối tượng CadText bằng cách sử dụng Cad3DPoint(x, y, z). Chọn các giá trị tương ứng với vị trí phù hợp trong bản vẽ gốc.
Tôi có thể thêm văn bản vào một lớp cụ thể không?
Có. Đặt layer_name thành tên của lớp mong muốn. Trong ví dụ chính, chú thích sử dụng lớp 0 và ID màu 256 (ByLayer).
Tôi có thể tự động thêm nhiều nhãn văn bản không?
Có. Tạo một thực thể CadText mới cho mỗi nhãn, đặt nội dung và tọa độ của nó, và thêm vào không gian mô hình. Mẫu này có thể được điều khiển bằng một danh sách các bản ghi hoặc một nguồn dữ liệu có cấu trúc khác.
Tôi có thể lưu bản vẽ đã chỉnh sửa trở lại DWG không?
Việc lưu trực tiếp DWG không được liệt kê trong Aspose.CAD for Python supported formats. Quy trình thử nghiệm xuất bản vẽ đã chỉnh sửa sang DXF và PDF, để nguyên DWG nguồn không thay đổi.
Nhận Giấy phép Tạm thời Miễn phí
Bạn có thể yêu cầu giấy phép tạm thời miễn phí trong 30 ngày để đánh giá Aspose.CAD for Python via .NET mà không có hạn chế đánh giá. Để áp dụng giấy phép trong ứng dụng Python của bạn, hãy làm theo hướng dẫn cấp phép Aspose.CAD.
Tài nguyên học miễn phí
Khám phá các tài nguyên này để biết thêm thông tin về việc xử lý bản vẽ CAD trong Python:
- Aspose.CAD for Python Developer Guide – Tìm hiểu cách tải và xử lý các tệp CAD.
- Aspose.CAD Python API Reference – Xem lại các lớp, thuộc tính và phương thức được sử dụng trong các ví dụ.
- Work with Text in CAD Drawings – Tìm hiểu về các loại thực thể chứa văn bản trong CAD.
- Supported CAD File Formats – Xác nhận các định dạng đầu vào và đầu ra có sẵn.
- Free Online CAD Applications – Xem hoặc chuyển đổi các tệp CAD bằng công cụ dựa trên trình duyệt.
- Aspose.CAD Support Forum – Đặt câu hỏi về các bản vẽ cụ thể hoặc hành vi của API.
Kết luận
Thêm văn bản vào bản vẽ DWG bằng Python là một cách thực tiễn để tạo nhãn thiết bị, định danh phòng và các chú thích khác từ dữ liệu ứng dụng. Các bước thiết yếu là xác định không gian mô hình, tạo một thực thể CadText với tọa độ và kiểu dáng phù hợp, và cập nhật giới hạn bản vẽ trước khi xuất.
Bước tiếp theo là thay thế nhãn mẫu bằng tọa độ và định danh từ dữ liệu bản vẽ của bạn. Kiểm tra đầu ra DXF trong trình chỉnh sửa CAD và sử dụng PDF như một bản sao để xem xét, đặc biệt khi triển khai quy trình làm việc trên các bản vẽ có đơn vị, lớp hoặc phông chữ khác nhau.
