ObjectARX 打印常见问题

打印慢

可能是系统变量默认为后台打印,导致生成缓慢,解决方式,设置BACKGROUNDPLOT系统变量为前台打印

	struct resbuf res,res2;
	acedGetVar(_T("BACKGROUNDPLOT"),&res);
	res2.restype=RTSHORT;
	res2.resval.rint=0;
	acedSetVar(_T("BACKGROUNDPLOT"),&res2);	
	//恢复系统变量
	acedSetVar(_T("BACKGROUNDPLOT"),&res);

窗口打印偏移

窗口打印的时候打印范围和设置的范围发生偏移,一般是窗口打印的坐标未设置为DCS。

导致这个问题的原因是View的Target偏移

后台解决方式可以参考 https://blog.csdn.net/txh0001/article/details/44754773

或者前台设置DCS

        //DCS
	ads_point minPt={ptMin.x,ptMin.y,0.0};
	ads_point maxPt={ptMax.x,ptMax.y,0.0};
	ads_point minPtDcs;
	ads_point maxPtDcs;
	struct resbuf from, to;
	from.restype = RTSHORT;
	to.restype = RTSHORT;
	from.resval.rint = 0;
	to.resval.rint=2;
	acedTrans(minPt,&from,&to,0,minPtDcs);
	acedTrans(maxPt,&from,&to,0,maxPtDcs);

打印预览返回值

这是ARX文档挖的一个坑,获取endPage的函数参数返回值即可。

        es = AcPlPlotFactory::createPreviewEngine(pEngine,AcPlPlotFactory::kShowPlot|AcPlPlotFactory::kShowNextSheet|AcPlPlotFactory::kShowPreviousSheet);
        //-------省略---------
	ACPL_PREVIEWENDPLOT retPreview;
	memset(&retPreview,0,sizeof(ACPL_PREVIEWENDPLOT));
	es = pEngine->endPage(&retPreview);
        //-------省略---------
        switch(retPreview.nStatus)
	{
	case kNormal:
		AfxMessageBox(_T("正常"));
		break;
	case kNext:
		AfxMessageBox(_T("下一页"));
		break;
	case kPrevious:
		AfxMessageBox(_T("上一页"));
		break;
	case kPlot:
		AfxMessageBox(_T("打印"));
		break;
	}
posted @ 2022-03-23 11:33  edata  阅读(537)  评论(0编辑  收藏  举报