找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 230|回复: 0

[每日一码] PlotToFile这个函数怎么在cad中选一个区域打印成pdf图片

[复制链接]

1

主题

0

回帖

33

积分

管理员

积分
33
发表于 2024-3-14 20:39:52 | 显示全部楼层 |阅读模式
  1. 请高手帮忙看下这段代码,为啥执行pPlot->PlotToFile(w采用str.c采用str(), szPrinterPath);就会异常
  2. 根本就不能打印出pdf图片。在线等
  3. /*
  4. *区域打印
  5. *
  6. */
  7. void Cplot::OnPrint(std::string strPath,int size,bool direc,AcGePoint2d ptStart,AcGePoint2d ptEnd)
  8. {
  9.         acDocManager->lockDocument(acDocManager->curDocument());        
  10.         // Use ActiveX interface to get the application object
  11.         IAcadApplicationPtr pAcad = acedGetAcadWinApp()->GetIDispatch(TRUE);
  12.         //get the path to plotter configuration
  13.         采用bstr采用t szPrinterPath;
  14.         szPrinterPath = pAcad->Preferences->GetFiles()->GetPrinterConfigPath() + 采用bstr采用t("\\DWG To PDF.pc3");//采用T("DWG To PDF.pc3");//采用T("DWF6 eplot.pc3");
  15.         // get the current database
  16.         //AcDbDatabase *curDocDB = acdbHostApplicationServices()->workingDatabase();
  17.         // get a pointer to the layout manager
  18.         AcApLayoutManager *pLayoutManager = (AcApLayoutManager *)acdbHostApplicationServices()->layoutManager();
  19.         const ACHAR *layoutName = pLayoutManager->findActiveLayout (true);
  20.         // get the current layout
  21.         AcDbLayout *pLayout = pLayoutManager->findLayoutNamed (layoutName, true);  
  22.         // if we got it ok
  23.         if (pLayout != NULL)
  24.         {
  25.                 Acad::ErrorStatus es;
  26.                 // get the plotsetttings class
  27.                 AcDbPlotSettingsValidator *pPlotSettingsValidator = acdbHostApplicationServices()->plotSettingsValidator();
  28.                 // if we got it ok
  29.                 if (pPlotSettingsValidator != NULL)
  30.                 {
  31.                         // Refresh the layout lists in order to use it
  32.                         pPlotSettingsValidator->refreshLists (pLayout);
  33.                         // change the current layout plotter
  34.                         es = pPlotSettingsValidator->setPlotCfgName (pLayout, szPrinterPath);   
  35.                         // set the window to plot as the extents of the drawing
  36.                         ACHAR* m采用Name采用2 = 采用T("ISO采用A2采用(420.00采用x采用594.00采用MM)");//图纸名称
  37.                         ACHAR* m采用Name采用3 = 采用T("ISO采用A3采用(297.00采用x采用420.00采用MM)");//图纸名称
  38.                         ACHAR* m采用Name采用4 = 采用T("ISO采用A4采用(210.00采用x采用297.00采用MM)");//图纸名称
  39.                         ACHAR* m采用mediaName;
  40.                         if (size == 2){
  41.                                 m采用mediaName = m采用Name采用2;
  42.                         }
  43.                         else if (size == 3){
  44.                                 m采用mediaName = m采用Name采用3;
  45.                         }
  46.                         else if (size ==4){
  47.                                 m采用mediaName = m采用Name采用4;
  48.                         }
  49.                         es = pPlotSettingsValidator->setCanonicalMediaName(pLayout,m采用mediaName);//设置图纸尺寸
  50.                         es = pPlotSettingsValidator->setPlotWindowArea(pLayout,ptStart.x,ptStart.y,ptEnd.x,ptEnd.y);//设置打印范围,超出给范围的将打不出来
  51.                         es = pPlotSettingsValidator->setPlotOrigin(pLayout,ptStart.x,ptStart.y);//设置打印原点                       
  52.                         es = pPlotSettingsValidator->setPlotType(pLayout,AcDbPlotSettings::kWindow);//设置打印范围为窗口
  53.                         es = pPlotSettingsValidator->setCurrentStyleSheet(pLayout,采用T("acad.ctb"));//设置打印样式表
  54.                         es = pPlotSettingsValidator->setPlotCentered(pLayout,true);//是否居中打印
  55.                         es = pPlotSettingsValidator->setUseStandardScale(pLayout,true);//设置是否采用标准比例
  56.                         es = pPlotSettingsValidator->setStdScaleType(pLayout,AcDbPlotSettings::kScaleToFit);//布满图纸
  57.                         PlotRotation m采用direc;
  58.                         if (direc)        m采用direc = AcDbPlotSettings::k0degrees; //纵向
  59.                         else        m采用direc = AcDbPlotSettings::k90degrees;//横向
  60.                         es = pPlotSettingsValidator->setPlotRotation(pLayout,m采用direc);//设置打印方向
  61.                        
  62.                 }  
  63.                 pLayout->close ();
  64.                 // get the current document
  65.                 IAcadDocumentPtr  pDoc = pAcad->GetActiveDocument();
  66.                 //pDoc->SetVariable("BACKGROUNDPLOT",0);
  67.                 //pDoc->ActiveLayout->RefreshPlotDeviceInfo();
  68.                 // create a plot object
  69.                 IAcadPlotPtr pPlot = pDoc->GetPlot();
  70.                 // lets plot
  71.                 std::wstring w采用str = CStringUtil::s2ws(strPath);
  72.                 try
  73.                 {
  74.                         pPlot->PlotToFile(w采用str.c采用str(), szPrinterPath);
  75.                         acDocManager->unlockDocument(acDocManager->curDocument());
  76.                 }
  77.                 catch (...)
  78.                 {
  79.                         acDocManager->unlockDocument(acDocManager->curDocument());
  80.                         AfxMessageBox(采用T("打印任务繁忙,请稍后再试!"));
  81.                         return;
  82.                 }
  83.         }      
  84. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-29 20:40 , Processed in 0.129639 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表