PDFBuilder::ColorBlackOnWhite);
77 printPDFBuilder1->SetWidths(NXOpen::PrintPDFBuilder::WidthCustomThreeWidths);
78 printPDFBuilder1->SetRasterImages(true);
79 printPDFBuilder1->SetImageResolution(NXOpen::PrintPDFBuilder::ImageResolutionOptionHigh);
80 printPDFBuilder1->SetAddWatermark(true);
81 printPDFBuilder1->SetWatermark(waterRemark.c_str());
82 printPDFBuilder1->SetAppend(appendStatus);
83
84 std::vector<NXOpen::NXObject *> sheets1(1);
85 NXOpen::Drawings::DrawingSheet *drawingSheet1(dynamic_cast<NXOpen::Drawings::DrawingSheet *>(NXOpen::NXObjectManager::Get(sheetTAG)));
86 sheets1[0] = drawingSheet1;
87 printPDFBuilder1->SourceBuilder()->SetSheets(sheets1);
88 printPDFBuilder1->SetFilename(exportPath);
89
90 NXOpen::NXObject *nXObject1;
91 nXObject1 = printPDFBuilder1->Commit();
92 printPDFBuilder1->Destroy();
93 return 0;
94 }
95 catch (const exception& e2){
96 UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, e2.what());
97 throw;
98 }
99 }
100
101 int getSheetInfos()
102 {
103 // 获取显示部件及图纸信息
104 int _errCode = 0;
105 tag_t dispTAG = UF_PART_ask_display_part();
106 char part_fspec[MAX_FSPEC_BUFSIZE] = { 0 };
107 if (_errCode = UF_PART_ask_part_name(dispTAG, part_fspec) != 0) return _errCode;
108
109 std::string strPartName(part_fspec);
110 transform(strPartName.begin(), strPartName.end(), strPartName.begin(), ::tolower);
111 if (strPartName.find("dwg") == string::npos) return -1;
112
113 int num_draws = 0;
114 tag_t *drawTAGs = nullptr;
115 if (_errCode = UF_DRAW_ask_drawings(&num_draws, &drawTAGs) != 0)
116 return _errCode;
117
118 string export_path = strPartName.substr(0, strPartName.find_last_of("."));
119 for (int idx = 0; idx < num_draws; idx++){
120 // 导出PDF
121 UF_DRAW_info_t drawInfos;
122 _errCode = UF_DRAW_ask_drawing_info(drawTAGs[0], &drawInfos);
123 double xDimension = drawInfos.size.custom_size[0];
124 double yDimension = drawInfos.size.custom_size[1];
125 _errCode = exportDwg2PDF(xDimension, yDimension, string("huangym1\r\n2023-03-25"), drawTAGs[idx], export_path + ".pdf", false);
126 string tempStr(export_path + ".pdf");
127
128 // 打开PDF
129 USES_CONVERSION;
130 const WCHAR * cLineChar = A2W(tempStr.c_str());
131
132 SHELLEXECUTEINFO sei;
133 ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));//使用前最好清空
134 sei.cbSize = sizeof(SHELLEXECUTEINFO);//管理员权限执行cmd,最基本的使用与 ShellExecute 类似
135 sei.lpFile = cLineChar;
136 sei.nShow = SW_SHOW;
137 sei.lpVerb = _T("open");
138 BOOL bResult = ShellExecuteEx(&sei);
139 if (bResult)//执行成功
140 {
141 if (sei.hProcess)//指定 SEE_MASK_NOCLOSEPROCESS 并其成功执行,则 hProcess 将会返回执行成功的进程句柄
142 WaitForSingleObject(sei.hProcess, INFINITE);//等待执行完毕
143 }
144 }
145 if (drawTAGs){
146 UF_free(drawTAGs);
147 drawTAGs = nullptr;
148 }
149 return _errCode;
150 }
151
152 //========================
153 // 保存操作入口点函数
154 //========================
155 extern "C" DllExport void ufput()
156 {
157 try{
158 if (UF_initialize()) return;
159
160 getSheetInfos();
161
162 UF_terminate();
163 }
164 catch (const NXException& e1)
165 {
166 UI::Get |