13/01/2016
Создание многолистового PDF файла при помощи DSD
У нас уже была статья как это сделать при помощи .NET, но может потребоваться некоторое время для конвертации этого кода в ARX, так что вот он.Он не совсем такой, как в .NET, но очень похож :)
Вам понадобится включить в исходный код acplmisc.h и убедиться, что линкеру указано использовать библиотеку AcPublish_crx.lib (для AutoCAD версии 2012 и более ранних AcPublish.lib)
Код - C++: [Выделить]
- 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);
- // Начнём собирать данные в DSD
- AcPlDSDEntries dsdEntries;
- AcDbDictionaryIterator *layoutIterator = layoutDict->newIterator();
- // Если мы собираемся печатать только листы пространства листа
- 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);
- // Мы должны это загрузить для работы acplPublishExecute
- acedArxLoad(L"AcPublish.arx");
- acplPublishExecute(dsdData, plotConfig, false);
- }
Источник: http://adndevblog.typepad.com/autocad/2016/01/create-multi-sheet-pdf-from-arx-using-dsd.html
Автор перевода: Александр Ривилис
Отредактировано 13.01.2016 в 00:09:01
Обсуждение: http://adn-cis.org/forum/index.php?topic=3327
Опубликовано 13.01.2016Отредактировано 13.01.2016 в 00:09:01