大佬们给看看这段代码,页面设置我已经在cad里手动设置好了,直接打印就可以,用这段代码前面都正常,唯独最后es = pEngine->endPlot();报错了。
 - void PlotSiglePageA()//打印单页文档
- {
- Acad::ErrorStatus es;
- AcDbPlotSettings* pPlotSettings=nullptr;
- AcDbObjectId layoutId;
- {
- AcDbLayoutManager* pLayoutManager = acdbHostApplicationServices()->layoutManager();//获取布局管理器
- AcDbObjectId btrId = pLayoutManager->getActiveLayoutBTRId();//当前布局的块表记录ID
- AcDbBlockTableRecord* pBTR;
- if (acdbOpenObject(pBTR,btrId,AcDb::kForRead)!=Acad::eOk)
- {
- acutPrintf(_T("\n错误:无法打开布局块表记录!"));
- return;
- }
- layoutId= pBTR->getLayoutId();//获取当前布局id
- pBTR->close();
- if (!layoutId.isValid ())
- {
- return;
- }
- AcDbLayout* pLayout = NULL;
- if (acdbOpenObject(pLayout,layoutId,AcDb::kForRead)!=Acad::eOk)
- {
- return;
- }
- pPlotSettings = new AcDbPlotSettings(pLayout->modelType());
- es=pPlotSettings->copyFrom(pLayout);
- pLayout->close();
- if (es != Acad::eOk) {
- acutPrintf(_T("\n错误:无法复制打印设置!"));
- delete pPlotSettings;
- return;
- }
- }
- AcPlPlotEngine* pEngine;
- if (Acad::eOk == AcPlPlotFactory::createPublishEngine(pEngine))
- {
- es = pEngine->beginPlot(NULL);
- if (es==Acad::eOk)
- {
- AcPlPlotPageInfo pageInfo;
- AcPlPlotInfo plotInfo;
- plotInfo.setLayout(layoutId);
- plotInfo.setOverrideSettings(pPlotSettings);
- AcPlPlotInfoValidator validator;
- validator.setMediaMatchingPolicy(AcPlPlotInfoValidator::kMatchEnabled);
- es = validator.validate(plotInfo);
- if (es==Acad::eOk)
- {
- const ACHAR *szDocName=acDocManager->curDocument()->fileName();
- if (szDocName != nullptr && wcslen(szDocName) > 0)
- {
- es = pEngine->beginDocument(plotInfo, szDocName);
- es = pEngine->beginPage(pageInfo, plotInfo, true);
- es = pEngine->beginGenerateGraphics();
- es = pEngine->endGenerateGraphics();
- es = pEngine->endPage();
- es = pEngine->endDocument();
- es = pEngine->endPlot();
- acutPrintf(_T("\nARX错误信息:%s"),acadErrorStatusText(es));
- //前面的es都正常,唯独这里报错了。eInvalidInput
- }
- }
- }
- pEngine->destroy();
- pEngine = NULL;
- }
- delete pPlotSettings;
- return;
- }
|