Create multi sheet PDF from ARX using DSD

We already have a blog post on doing this from .NET, but it could take a bit of time to convert the code to ARX, so here it is.
It's not doing exactly the same but close enough :)

You'll have to include acplmisc.h and make sure your project links to AcPublish_crx.lib

static void plot (AcDbDatabase *pDb)
{
  CString pdfPath = "C:\\temp\\pdf\\myPDF.pdf"; 
  CString deviceName =  L"DWG To PDF.pc3";
  Acad::ErrorStatus es = Acad::eOk;

  const TCHAR *docName;
  es = pDb->getFilename(docName);   

  AcDbLayoutManager *layoutManager = 
    acdbHostApplicationServices()->layoutManager();
  AcDbDictionary *layoutDict = NULL;
  es = pDb->getLayoutDictionary(layoutDict, AcDb::OpenMode::kForRead);

  // Start collecting info for the DSD data
  AcPlDSDEntries dsdEntries;
  AcDbDictionaryIterator *layoutIterator = layoutDict->newIterator();

  // If we only want to plot paper spaces and not the model layout
  AcDbObjectId msId = acdbSymUtil()->blockModelSpaceId(pDb);

  for (; layoutIterator && !layoutIterator->done(); layoutIterator->next())
  {
    AcDbObjectPointer<AcDbLayout> layout(
      layoutIterator->objectId(), AcDb::OpenMode::kForRead); 

    if (layout->getBlockTableRecordId() == msId)
      continue;

    const ACHAR *layoutName;
    layout->getLayoutName(layoutName);

    AcPlDSDEntry dsdEntry;
    dsdEntry.setLayout(layoutName);
    dsdEntry.setDwgName(docName);
    dsdEntry.setTitle(layoutName);
    dsdEntries.append(dsdEntry);     
  }

  delete layoutIterator; 
  layoutDict->close();

  AcPlDSDData dsdData;
  dsdData.setDSDEntries(dsdEntries);  

  dsdData.setProjectPath(L"c:\\temp\\pdf\\");
  dsdData.setLogFilePath(L"c:\\temp\\pdf\\logdwf.log");
  dsdData.setSheetType(AcPlDSDEntry::SheetType::kMultiPDF);
  dsdData.setNoOfCopies(1);
  dsdData.setDestinationName(pdfPath);
  dsdData.setPromptForDwfName(false);
  dsdData.setSheetSetName(L"PublisherSet");

  AcPlPlotConfig *plotConfig;
  acplPlotConfigManager->setCurrentConfig(plotConfig, deviceName);    

  // We need this for acplPublishExecute 
  acedArxLoad(L"AcPublish.arx"); 

  acplPublishExecute(dsdData, plotConfig, false);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值