找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3332|回复: 1

[每日一码] PlotToFile这个函数怎么在cad中选一个区域打印成pdf图片

[复制链接]

已领礼包: 7个

财富等级: 恭喜发财

发表于 2017-11-17 15:46:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
请高手帮忙看下这段代码,为啥执行pPlot->PlotToFile(w_str.c_str(), szPrinterPath);就会异常
根本就不能打印出pdf图片。在线等

/*
*区域打印
*
*/
void Cplot::OnPrint(std::string strPath,int size,bool direc,AcGePoint2d ptStart,AcGePoint2d ptEnd)
{
        acDocManager->lockDocument(acDocManager->curDocument());        

        // Use ActiveX interface to get the application object
        IAcadApplicationPtr pAcad = acedGetAcadWinApp()->GetIDispatch(TRUE);
        //get the path to plotter configuration
        _bstr_t szPrinterPath;
        szPrinterPath = pAcad->Preferences->GetFiles()->GetPrinterConfigPath() + _bstr_t("\\DWG To PDF.pc3");//_T("DWG To PDF.pc3");//_T("DWF6 eplot.pc3");

        // get the current database
        //AcDbDatabase *curDocDB = acdbHostApplicationServices()->workingDatabase();
        // get a pointer to the layout manager
        AcApLayoutManager *pLayoutManager = (AcApLayoutManager *)acdbHostApplicationServices()->layoutManager();

        const ACHAR *layoutName = pLayoutManager->findActiveLayout (true);
        // get the current layout
        AcDbLayout *pLayout = pLayoutManager->findLayoutNamed (layoutName, true);  
        // if we got it ok
        if (pLayout != NULL)
        {
                Acad::ErrorStatus es;
                // get the plotsetttings class
                AcDbPlotSettingsValidator *pPlotSettingsValidator = acdbHostApplicationServices()->plotSettingsValidator();
                // if we got it ok
                if (pPlotSettingsValidator != NULL)
                {
                        // Refresh the layout lists in order to use it
                        pPlotSettingsValidator->refreshLists (pLayout);
                        // change the current layout plotter
                        es = pPlotSettingsValidator->setPlotCfgName (pLayout, szPrinterPath);   
                        // set the window to plot as the extents of the drawing

                        ACHAR* m_Name_2 = _T("ISO_A2_(420.00_x_594.00_MM)");//图纸名称
                        ACHAR* m_Name_3 = _T("ISO_A3_(297.00_x_420.00_MM)");//图纸名称
                        ACHAR* m_Name_4 = _T("ISO_A4_(210.00_x_297.00_MM)");//图纸名称
                        ACHAR* m_mediaName;
                        if (size == 2){
                                m_mediaName = m_Name_2;
                        }
                        else if (size == 3){
                                m_mediaName = m_Name_3;
                        }
                        else if (size ==4){
                                m_mediaName = m_Name_4;
                        }
                        es = pPlotSettingsValidator->setCanonicalMediaName(pLayout,m_mediaName);//设置图纸尺寸

                        es = pPlotSettingsValidator->setPlotWindowArea(pLayout,ptStart.x,ptStart.y,ptEnd.x,ptEnd.y);//设置打印范围,超出给范围的将打不出来
                        es = pPlotSettingsValidator->setPlotOrigin(pLayout,ptStart.x,ptStart.y);//设置打印原点                       
                        es = pPlotSettingsValidator->setPlotType(pLayout,AcDbPlotSettings::kWindow);//设置打印范围为窗口

                        es = pPlotSettingsValidator->setCurrentStyleSheet(pLayout,_T("acad.ctb"));//设置打印样式表
                        es = pPlotSettingsValidator->setPlotCentered(pLayout,true);//是否居中打印
                        es = pPlotSettingsValidator->setUseStandardScale(pLayout,true);//设置是否采用标准比例
                        es = pPlotSettingsValidator->setStdScaleType(pLayout,AcDbPlotSettings::kScaleToFit);//布满图纸

                        PlotRotation m_direc;
                        if (direc)        m_direc = AcDbPlotSettings::k0degrees; //纵向
                        else        m_direc = AcDbPlotSettings::k90degrees;//横向
                        es = pPlotSettingsValidator->setPlotRotation(pLayout,m_direc);//设置打印方向
                       
                }  

                pLayout->close ();

                // get the current document
                IAcadDocumentPtr  pDoc = pAcad->GetActiveDocument();

                //pDoc->SetVariable("BACKGROUNDPLOT",0);
                //pDoc->ActiveLayout->RefreshPlotDeviceInfo();

                // create a plot object
                IAcadPlotPtr pPlot = pDoc->GetPlot();

                // lets plot
                std::wstring w_str = CStringUtil::s2ws(strPath);

                try
                {
                        pPlot->PlotToFile(w_str.c_str(), szPrinterPath);
                        acDocManager->unlockDocument(acDocManager->curDocument());
                }
                catch (...)
                {
                        acDocManager->unlockDocument(acDocManager->curDocument());
                        AfxMessageBox(_T("打印任务繁忙,请稍后再试!"));
                        return;
                }
        }       
}

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 112个

财富等级: 日进斗金

发表于 2018-4-11 14:41:31 | 显示全部楼层
目前打印成pdf成功了吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-14 06:17 , Processed in 0.220500 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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