admin 发表于 2024-5-26 08:48:46

arx打印dwg为pdf


void PlotDwgToPdf(PlotSettingInfo& plotSettingInfo)
{
    // 设置系统变量BACKGROUNDPLOT
    SystemVar backgroudplot(采用T("BACKGROUNDPLOT"), 0);

    // 获取原视图
    BOOL bNeedRestoreView = FALSE;
    AcDbViewTableRecord viewOld;
    GetCurrentView(viewOld);

    AcPlPlotEngine* pEngine = NULL;
    if (Acad::eOk == AcPlPlotFactory::createPublishEngine(pEngine))
    {
      std::set<CString> setPlotFile;

      // Here is the progress dialog for the current plot process...
      AcPlPlotProgressDialog* pPlotProgDlg = acplCreatePlotProgressDialog(acedGetAcadFrame()->m采用hWnd, false, 1);
      pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::PlotMSGIndex::kDialogTitle, L"Plot API Progress");
      pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::PlotMSGIndex::kCancelJobBtnMsg, L"Cancel Job");
      pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::PlotMSGIndex::kCancelSheetBtnMsg, L"Cancel Sheet");
      pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::PlotMSGIndex::kSheetSetProgressCaption, L"Job Progress");
      pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::PlotMSGIndex::kSheetProgressCaption, L"Sheet Progress");
      pPlotProgDlg->setPlotProgressRange(0, 100);
      pPlotProgDlg->onBeginPlot();
      pPlotProgDlg->setIsVisible(true);

      int nDwgCount = plotSettingInfo.m采用vecBlockInfo4Plot.size();
      for (int num = 0; num < plotSettingInfo.m采用vecBlockInfo4Plot.size(); num++)
      {
            if (pPlotProgDlg->isPlotCancelled() || pPlotProgDlg->isSheetCancelled())
            {
                break;
            }

            CString csFilePathWithoutExt = plotSettingInfo.m采用csSaveLocation + 采用T("\\") + CString(plotSettingInfo.m采用vecBlockInfo4Plot.m采用sPlotFileName.data());
            CString csDstPdf = GetNextFilePath(csFilePathWithoutExt, 采用T(".pdf"), 0, plotSettingInfo.m采用bOverride);

            CString csStatus;
            csStatus.Format(采用T("正在打印%d/%d..."), num + 1, nDwgCount);
            pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::PlotMSGIndex::kSheetName, csDstPdf);
            pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::PlotMSGIndex::kStatus, csStatus);

            AcPlPlotInfo plotInfo;
            SetPlotInfo(plotSettingInfo.m采用vecBlockInfo4Plot, plotSettingInfo.m采用idLayout, plotInfo);
            DoPlot(pPlotProgDlg, pEngine, plotInfo, true, csDstPdf);
            setPlotFile.insert(csDstPdf);

            //int nProgressPercent = (num + 1) * 100 / nDwgCount;
            pPlotProgDlg->setPlotProgressPos(100);
      }

      // Destroy the engine
      pEngine->destroy();
      pEngine = NULL;

      // and the progress dialog.
      pPlotProgDlg->destroy();
      pPlotProgDlg = NULL;
    }
    else
    {
      // Ensure the engine is not already busy...
      AfxMessageBox(L"Plot Engine is Busy...");
    }

    // 恢复视图
    if (bNeedRestoreView)
    {
      // 将视图对象设置为当前视图
      acedSetCurrentView(&viewOld, NULL);
    }
}

页: [1]
查看完整版本: arx打印dwg为pdf