Tự động xuất PDF nhiều sheet trong NX Open: quy trình bền vững với PrintPDFBuilder
Thiết kế quy trình NX Open xuất PDF nhiều sheet ổn định: chọn bản vẽ, đặt tên tệp, cấu hình nét chữ, ghi log và đóng part an toàn.
Quản trị viên 7 phút đọc

Tự động xuất PDF từ hàng chục hoặc hàng trăm file NX tưởng như chỉ là lặp lại thao tác File → Export → PDF. Thực tế, một công cụ chạy ổn định phải giải quyết đồng thời việc chọn đúng drawing sheet, bảo toàn nét và chữ, đặt tên không trùng, đóng part đúng cách và tiếp tục chạy khi một file lỗi.
Các thảo luận trên diễn đàn kỹ thuật NX tiếng Trung cho thấy lỗi thường không nằm ở riêng lệnh xuất PDF. Có trường hợp công cụ chỉ xử lý sheet đầu tiên, có trường hợp gọi chương trình ngoài sai đường dẫn, và cũng có công cụ yêu cầu đóng toàn bộ file trước khi bắt đầu. Vì vậy, nên thiết kế batch exporter như một quy trình có trạng thái thay vì một vòng lặp đơn giản.
1. Xác định rõ đơn vị công việc
Trước khi viết mã, hãy chọn một trong ba mô hình đầu ra:
• Mỗi part tạo một PDF chứa tất cả drawing sheet.
• Mỗi drawing sheet tạo một PDF riêng.
• Nhiều part được ghép vào một PDF tổng.
Mô hình đầu tiên phù hợp nhất với phát hành hồ sơ theo mã chi tiết. Mô hình thứ hai thuận tiện khi downstream system quản lý từng khổ giấy. Mô hình thứ ba chỉ nên dùng khi thứ tự tài liệu đã được kiểm soát chặt, vì chế độ append dễ tạo kết quả khó truy vết nếu job bị ngắt giữa chừng.
2. Tiền kiểm tra trước khi gọi PrintPDFBuilder
Với mỗi file đầu vào, quy trình nên kiểm tra lần lượt:
• Đường dẫn có tồn tại và phần mở rộng có đúng là PRT hay không.
• Part có mở được đầy đủ hay chỉ ở trạng thái partially loaded.
• DrawingSheets có ít nhất một phần tử.
• Tên sheet có thuộc danh sách cần xuất hay không.
• Thư mục đích có quyền ghi và còn đủ dung lượng.
• Tên PDF sau khi chuẩn hóa có trùng với tệp đang tồn tại hay không.
Không nên coi file không có drawing sheet là lỗi làm dừng toàn bộ batch. Hãy ghi trạng thái “SKIPPED_NO_SHEET” vào log rồi chuyển sang file tiếp theo.
3. Tạo builder đúng vòng đời
Trong NX Open, PrintPDFBuilder được tạo từ PlotManager của work part. Luồng xử lý điển hình là:
• Mở part và đặt nó làm work part phù hợp.
• Lấy tập DrawingSheet cần xuất.
• Gọi PlotManager.CreatePrintPdfbuilder().
• Gán sheet qua SourceBuilder.
• Thiết lập filename, kích thước, màu, độ phân giải và cách xuất text.
• Commit kết quả.
• Destroy builder trong khối finally hoặc cơ chế tương đương.
Builder nên được tạo mới cho từng part. Tái sử dụng một builder qua nhiều part dễ giữ lại tham chiếu sheet cũ hoặc cấu hình không còn hợp lệ. Sau Commit, luôn Destroy dù thành công hay có ngoại lệ.
4. Chọn sheet theo quy tắc thay vì cố định “Sheet 1”
Một đoạn journal ghi lại thao tác thường chứa FindObject với tên sheet cụ thể. Cách này chạy được trên file mẫu nhưng sẽ thất bại khi doanh nghiệp dùng tên A0, A1, DETAIL hoặc REV_B.
Giải pháp bền vững hơn là duyệt DrawingSheets và lọc theo cấu hình:
• all: lấy toàn bộ sheet theo thứ tự trong part.
• active: chỉ lấy sheet đang active.
• name pattern: lấy sheet có tên khớp biểu thức, ví dụ RELEASE_*.
• attribute: chỉ lấy sheet có thuộc tính trạng thái RELEASED.
Trước Commit, hãy ghi danh sách tên sheet vào log. Nhờ vậy khi người dùng báo thiếu trang, ta biết sheet đã không được chọn hay đã được chọn nhưng lỗi trong bước xuất.
5. Thiết lập nét, màu và chữ cho bản PDF dùng sản xuất
PDF xem trên màn hình và PDF dùng in xưởng có yêu cầu khác nhau. Các tùy chọn đáng kiểm soát gồm:
• Colors: dùng BlackOnWhite cho bản in đơn sắc, hoặc PartColors khi màu mang ý nghĩa kỹ thuật.
• Widths: dùng bảng line width đã chuẩn hóa; tránh để mọi nét cùng độ dày.
• OutputText: Text giúp tìm kiếm nội dung, còn Polylines giảm rủi ro thiếu font nhưng làm file nặng và mất khả năng tìm chữ.
• RasterImages: bật khi sheet có shaded view hoặc ảnh nhúng.
• ImageResolution: chọn mức vừa đủ; độ phân giải cao cho mọi job có thể làm batch chậm đáng kể.
• Size và Units: không trộn metric với kích thước thiết lập theo inch.
Một bài thảo luận tiếng Trung về xuất PDF đạt chuẩn nhấn mạnh rằng chất lượng cuối phụ thuộc cả cấu hình line width trong bản vẽ, không chỉ nút Export. Vì vậy, automation không thể sửa hoàn toàn một template drafting chưa được chuẩn hóa.
6. Đặt tên tệp không trùng và truy vết được
Tên đầu ra nên được tạo từ dữ liệu ổn định, ví dụ:
Mã_chi_tiết + Revision + Loại_tài_liệu + ngày_phát_hành.pdf
Hãy thay các ký tự cấm của Windows, bỏ khoảng trắng cuối, giới hạn chiều dài và kiểm tra trùng tên sau khi chuẩn hóa. Không nên âm thầm overwrite. Tùy chính sách, công cụ có thể:
• Từ chối và ghi DUPLICATE.
• Thêm hậu tố thời gian.
• Ghi đè chỉ khi người dùng bật tùy chọn rõ ràng.
Nếu xuất mỗi sheet thành một file, cần thêm tên sheet vào filename. Nếu ghép nhiều sheet, nên lưu danh sách sheet trong file log hoặc metadata đi kèm.
7. Không dùng đa luồng để gọi NX API trực tiếp
Một batch lớn dễ khiến người viết muốn mở nhiều thread. Tuy nhiên, gọi NX Open đồng thời từ worker thread là nguồn lỗi khó đoán. Cách an toàn là để một luồng chính điều phối mọi lời gọi NX API; các tác vụ không chạm NX như quét thư mục, kiểm tra tên, nén kết quả hoặc ghi log có thể tách riêng nếu cần.
Nếu dùng external mode, hãy truyền tham số bằng API xử lý command line thay vì ghép chuỗi thủ công. Đường dẫn executable, file PRT và thư mục đích phải được quote đúng, nhất là khi chứa khoảng trắng. Thảo luận về batch PDF trên UG爱好者 cho thấy chỉ một chuỗi đường dẫn ghép sai cũng đủ khiến chương trình bị hiểu thành lệnh không tồn tại.
8. Đóng part và khôi phục trạng thái phiên làm việc
Sau mỗi file, cần quyết định rõ part có được lưu hay không. Một trình xuất PDF chỉ đọc dữ liệu thường không nên ghi thay đổi vào PRT. Quy trình nên:
• Lưu lại work/display part ban đầu.
• Mở file theo chế độ phù hợp.
• Không save trừ khi yêu cầu nghiệp vụ bắt buộc.
• Đóng part vừa xử lý và giải phóng trạng thái load.
• Khôi phục part ban đầu khi batch kết thúc.
Nếu file đã được người dùng mở trước đó, không được tự ý đóng nó. Hãy theo dõi cờ “openedByBatch” để chỉ đóng những part do công cụ mở.
9. Log theo từng file và tiếp tục khi có lỗi
Một log hữu ích nên có thời gian bắt đầu, file nguồn, sheet đã chọn, file đích, thời gian xử lý, kết quả và thông báo ngoại lệ. Phân loại tối thiểu:
• SUCCESS
• SKIPPED_NO_SHEET
• SKIPPED_FILTERED
• FAILED_OPEN
• FAILED_EXPORT
• FAILED_WRITE
Thay vì bọc cả batch trong một try/catch, hãy cô lập lỗi theo từng part. Cuối job, hiển thị tổng số thành công, bỏ qua và thất bại; đồng thời cung cấp đường dẫn log để xử lý lại đúng các file lỗi.
10. Kiểm thử trước khi chạy hàng loạt
Bộ test nên có ít nhất một file cho mỗi tình huống: một sheet, nhiều sheet, không có sheet, tên Unicode, đường dẫn có khoảng trắng, shaded view, font đặc biệt, PDF đích đã tồn tại và part bị lỗi load. Sau khi xuất, kiểm tra số trang PDF, kích thước giấy, độ dày nét, khả năng tìm text và tên file.
Checklist triển khai nhanh
• Chốt quy tắc một part/một PDF hay một sheet/một PDF.
• Duyệt DrawingSheets thay vì cố định tên sheet.
• Tạo và Destroy PrintPDFBuilder cho từng part.
• Chuẩn hóa Colors, Widths, OutputText và ImageResolution.
• Không gọi NX API từ nhiều worker thread.
• Không đóng part đã mở sẵn bởi người dùng.
• Ghi log theo từng file và tiếp tục sau lỗi.
• Đối chiếu số file, số sheet và số trang sau khi chạy.
Nguồn tham khảo
• UG爱好者 – 工程图批量导出PDF工具: kinh nghiệm thực tế về batch PDF/STEP, điều kiện file đầu vào và giới hạn sheet — https://www.ugsnx.com/thread-343645-1-1.html
• UG爱好者 – UG的二次开发之批量导出pdf图出现错误: ví dụ lỗi đường dẫn, external process và vòng đời mở/đóng part — https://www.ugsnx.com/archiver/tid-309401.html
• UG爱好者 – 如何导出合格的PDF文档: thiết lập line width, màu và chất lượng bản PDF dùng in ấn — https://www.ugsnx.com/thread-207736-1-1.html
• 胡君UG二次开发 – NXOpen::PrintPDFBuilder: tham chiếu builder, SourceBuilder, OutputText, RasterImages, kích thước và độ phân giải — https://www.ugapi.com/doc/NXOpen/a04710.html
Bài viết được biên soạn lại thành quy trình kỹ thuật độc lập từ nhiều nguồn tham khảo, không dịch hoặc sao chép nguyên văn nội dung diễn đàn.
Bình luận (0)
Chưa có bình luận. Hãy là người đầu tiên chia sẻ ý kiến.
Đăng nhập để bình luận.


