主要就是打印的过程不太懂,比如打印进度对话框的设置等等,我是否可以不要打印进度对话框??
另外,我参考论坛里的一个关于打印的帖子,我把代码部分修改了一下,然后在CAD执行打印命令的时候一直显示“正在打印作业”,就是打不出来,高手帮我看一下是什么原因好吗?

 另外, 整个打印的过程是比较复杂的, 要全面搞懂, 就要了解AcDbLayout、 AcDbPlotSettings、
AcDbPlotSettingsValidator、 AcPlPlotEngine、 AcPlPlotInfo几个类(缺一不可),以及它们之间的相互关系,而打印进度对话框可以不要。 

窗口打印的设置方法
       
        //pPSV->setPlotType(pPlotSettings, AcDbPlotSettings::kExtents); //设置打印区域为范围

        //注意次序,不能颠倒
        pPSV->setPlotWindowArea(pPlotSettings, 2211, 1823, 2618, 2109);
        pPSV->setPlotOrigin(pPlotSettings, 2211, 1823);
        pPSV->setPlotType(pPlotSettings, AcDbPlotSettings::kWindow);     //设置打印区域为窗口  

  1. void batPlot()
  2. {
  3.         //批量打印
  4.         // 取得当前layout
  5.         AcDbLayoutManager *pLayoutManager =
  6.                 acdbHostApplicationServices()->layoutManager(); //取得布局管理器对象
  7.         AcDbLayout *pLayout =
  8.                 pLayoutManager->findLayoutNamed(pLayoutManager->findActiveLayout(TRUE),TRUE);//获得当前布局
  9.         AcDbObjectId  m_layoutId = pLayout->objectId();//获得布局的Id
  10.     //获得打印机验证器对象
  11.     AcDbPlotSettingsValidator *pPSV =NULL;
  12.     pPSV = acdbHostApplicationServices()->plotSettingsValidator();
  13.     //更新打印设备列表
  14.     pPSV->refreshLists(pLayout);
  15.         //打印机设置
  16.         ACHAR* m_strDevice = _T(“DWF6 ePlot.pc3”);//打印机名字
  17.         pPSV->setPlotCfgName(pLayout,m_strDevice);//设置打印设备
  18.         ACHAR* m_mediaName = _T(“ISO A4”);//图纸名称
  19.         pPSV->setCanonicalMediaName(pLayout,m_mediaName);//设置图纸尺寸
  20.         pPSV->setPlotType(pLayout,AcDbPlotSettings::kWindow);//设置打印范围为窗口
  21.         pPSV->setPlotWindowArea(pLayout,100,100,200,200);//设置打印范围,超出给范围的将打不出来
  22.         pPSV->setCurrentStyleSheet(pLayout,_T(“JSTRI.ctb”));//设置打印样式表
  23.         pPSV->setPlotCentered(pLayout,true);//是否居中打印
  24.         pPSV->setUseStandardScale(pLayout,true);//设置是否采用标准比例
  25.         pPSV->setStdScaleType(pLayout,AcDbPlotSettings::kScaleToFit);//布满图纸
  26.         pPSV->setPlotRotation(pLayout,AcDbPlotSettings::k90degrees);//设置打印方向
  27.  

            //pPSV->setPlotViewName(pLayout,_T(“打印1”));

  28.       
  29.         //准备打印/////////////////////////////////////////////////////////////////////////
  30.         AcPlPlotEngine* pEngine = NULL;//创建打印引擎
  31.         if(AcPlPlotFactory::createPublishEngine(pEngine)!=Acad::eOk)
  32.         {
  33.                 acedAlert(_T(“打印失败!”));
  34.                 return;
  35.         }
  36.         // 打印进度对话框
  37.         AcPlPlotProgressDialog *pPlotProgDlg = acplCreatePlotProgressDialog(acedGetAcadFrame()->m_hWnd,false,1);
  38.         pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kDialogTitle,_T(“lot API Progress”));
  39.         pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kCancelJobBtnMsg,_T(“Cancel Job”));
  40.         pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kCancelSheetBtnMsg,_T(“Cancel Sheet”));
  41.         pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kSheetSetProgressCaption,_T(“Job Progress”));
  42.         pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kSheetProgressCaption,_T(“Sheet Progress”));
  43.         pPlotProgDlg->setPlotProgressRange(0,100);
  44.         pPlotProgDlg->onBeginPlot();
  45.         pPlotProgDlg->setIsVisible(true);
  46.         //begin plot
  47.         Acad::ErrorStatus es = pEngine->beginPlot(pPlotProgDlg);
  48.         AcPlPlotPageInfo pageInfo;//打印页信息
  49.         AcPlPlotInfo plotInfo; //打印信息
  50.         // 设置布局
  51.         plotInfo.setLayout(m_layoutId);
  52.         // 重置参数
  53.         plotInfo.setOverrideSettings(pLayout);
  54.         AcPlPlotInfoValidator validator;//创建打印信息验证器
  55.         validator.setMediaMatchingPolicy(AcPlPlotInfoValidator::kMatchEnabled);
  56.         es = validator.validate(plotInfo);
  57.         // begin document
  58.         const TCHAR *szDocName = acDocManager->curDocument()->fileName();//获得当前的文件名
  59.         es = pEngine->beginDocument(plotInfo, szDocName, NULL,1,true,NULL);
  60.         //给打印机和进度对话框发送消息
  61.         pPlotProgDlg->onBeginSheet();
  62.         pPlotProgDlg->setSheetProgressRange(0, 100);
  63.         pPlotProgDlg->setSheetProgressPos(0);
  64.         //begin page
  65.         es = pEngine->beginPage(pageInfo, plotInfo, true);
  66.         es = pEngine->beginGenerateGraphics();
  67.         es = pEngine->endGenerateGraphics();
  68.         //end page
  69.         es = pEngine->endPage();
  70.         pPlotProgDlg->setSheetProgressPos(100);
  71.         pPlotProgDlg->onEndSheet();
  72.         pPlotProgDlg->setPlotProgressPos(100);
  73.         //end document
  74.         es = pEngine->endDocument();
  75.         //end plot
  76.         es = pEngine->endPlot();
  77.         //返回资源
  78.         pEngine->destroy();
  79.         pEngine = NULL;
  80.         pPlotProgDlg->destroy();
  81.         pLayout->close();
  82. }

版权声明:本文为c-gis原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/c-gis/articles/2214470.html