天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 83|回复: 0

在 ObjectARX 中使用绘图 ActiveX 打印

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
  在 ObjectARX 中使用绘图 ActiveX 打印
下面的代码演示如何在批处理模式下使用 ActiveX API 打印所有工作表C++

批量打印要点:

1) 使用 IAcadPlot 对象的 StartBatchMode() 方法设置要打印的页数

2) 准备一个 BSTR 类型的字符串变体数组,其中包含将要打印的工作表的名称,并将其作为参数传递给方法 SetLayoutsToPlot()

3) 对于打印,我们使用 PlotToDevice() 方法


// используем MFC для проверки этого кода
#import "acax19enu.tlb" raw_interfaces_only no_namespace
void fBatchPlotLayouts()
{
try
{
  // получаем объект приложения AutoCAD
  IAcadApplicationPtr pApp = NULL;
  pApp = acedGetAcadWinApp()->GetIDispatch(TRUE);
  // получаем активный документ
  IAcadDocumentPtr pDoc = NULL;
  pApp->get_ActiveDocument(&pDoc);
  IAcadLayoutsPtr pLayOuts;
  IAcadLayoutPtr pLayOut;
  long mNumberOflayouts;
  // получаем коллекцию листов и число листов
  pDoc->get_Layouts(&pLayOuts);
  pLayOuts->get_Count(&mNumberOflayouts);
  // создаем variant-массив для имен листов
  VARIANT mLayArr;
  SAFEARRAYBOUND mSAB;
  mSAB.lLbound = 0;
  mSAB.cElements = mNumberOflayouts;
  VariantInit(&mLayArr);
  mLayArr.vt = VT_ARRAY | VT_BSTR;
  mLayArr.parray = SafeArrayCreate(VT_BSTR,1,&mSAB);
  // заполняем variant-массив
  long mCtr;
  // заметим, что индексация массива начинается с нуля
  for(mCtr = 0; mCtr < mNumberOflayouts; mCtr ++)
  {
   pLayOuts->Item(_variant_t(mCtr), &pLayOut);
   BSTR strName;
   pLayOut->get_Name(&strName);
   SafeArrayPutElement(mLayArr.parray, &mCtr, strName);
  }
  // печатаем имена листов, которые будут напечатаны
  BSTR bstrName;
  acutPrintf(_T("\nЛисты, которые будут напечатаны: "));
  for(mCtr = 0; mCtr < mNumberOflayouts;mCtr ++)
  {
   SafeArrayGetElement(mLayArr.parray,&mCtr,&bstrName);
   acutPrintf(_T("\n%s"),(TCHAR*)(_bstr_t)bstrName);
  }
  acutPrintf(_T("\nПечать начата...\n"));
  // Печатаем листы
  IAcadPlotPtr pPlot;
  pDoc->get_Plot(&pPlot);
  // устанавливаем число копий для печати и режим ошибки – без сообщений
  pPlot->put_NumberOfCopies(1);
  pPlot->put_QuietErrorMode(VARIANT_TRUE);
  // число листов, которое будет напечатано
  pPlot->StartBatchMode(mNumberOflayouts);
  // устанавливаем листы для печати
  pPlot->SetLayoutsToPlot(mLayArr);
  VARIANT_BOOL returnBool;
  pPlot->PlotToDevice(_variant_t("DWF6 ePlot.pc3"), &returnBool);
  // чистим память
  VariantClear(&mLayArr);
}
catch (_com_error &e)
{
  acutPrintf(
   _T("\nОшибка пакетной печати. %s"),e.ErrorMessage());
}
}

 

 

 

 

在 ObjectARX 中使用绘图 ActiveX 打印
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 12:43 , Processed in 0.106941 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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