天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 70|回复: 0

arx打印dwg为pdf

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
发现autocad的打印需要把环境变量BACKGROUNDPLOT设置为0,即前台打印

void PlotDwgToPdf(std::shared_ptr<AcDbPlotSettings>& ptrPlotSettings)
{
    struct resbuf rbBackGroundPlot;
    acedGetVar(_T("BACKGROUNDPLOT"), &rbBackGroundPlot);
    if (rbBackGroundPlot.restype == RTSHORT && rbBackGroundPlot.resval.rint != 0)
    {
        int nOld = rbBackGroundPlot.resval.rint;
        rbBackGroundPlot.resval.rint = 0;
        acedSetVar(_T("BACKGROUNDPLOT"), &rbBackGroundPlot);
        rbBackGroundPlot.resval.rint = nOld;
    }

    AcPlPlotEngine* pEngine = NULL;
    if (Acad::eOk == AcPlPlotFactory::createPublishEngine(pEngine))
    {
        // Here is the progress dialog for the current plot process...
        AcPlPlotProgressDialog* pPlotProgDlg = acplCreatePlotProgressDialog(
            acedGetAcadFrame()->m_hWnd, false, 1);
        pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::PlotMSGIndex::kDialogTitle, L"Plot API Progress");
        pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::PlotMSGIndex::kCancelJobBtnMsg, L"Cancel Job");
        pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::PlotMSGIndex::kCancelSheetBtnMsg, L"Cancel Sheet");
        pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::PlotMSGIndex::kSheetSetProgressCaption, L"Job Progress");
        pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::PlotMSGIndex::kSheetProgressCaption, L"Sheet Progress");
        pPlotProgDlg->setPlotProgressRange(0, 100);
        pPlotProgDlg->onBeginPlot();
        pPlotProgDlg->setIsVisible(true);

        if (m_PlotSettingInfo.m_vecBlockInfo4Plot.size())
        {
            int nDwgCount = m_PlotSettingInfo.m_vecBlockInfo4Plot.size();
            for (int num = 0; num < m_PlotSettingInfo.m_vecBlockInfo4Plot.size(); num++)
            {
                if (pPlotProgDlg->isPlotCancelled() || pPlotProgDlg->isSheetCancelled())
                {
                    break;
                }
               
                CString csStatus;
                csStatus.Format(_T("正在打印%d/%d..."), num + 1, nDwgCount);
                pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::PlotMSGIndex::kSheetName, csDstPdf);
                pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::PlotMSGIndex::kStatus, csStatus);

                SetPlotSettingValidator(ptrPlotSettings, m_PlotSettingInfo.m_vecBlockInfo4Plot[num]);
                SetPlotInfo(m_PlotSettingInfo.m_LayoutId, ptrPlotSettings.get());
                DoPlot(pPlotProgDlg, pEngine, true, csDstPdf);

                int nProgressPercent = (num + 1) * 100 / nDwgCount;
                pPlotProgDlg->setPlotProgressPos(100);
            }
        }

        // Destroy the engine
        pEngine->destroy();
        pEngine = NULL;

        // and the progress dialog.
        pPlotProgDlg->destroy();
        pPlotProgDlg = NULL;
    }
    else
    {
        // Ensure the engine is not already busy...
        AfxMessageBox(L"Plot Engine is Busy...");
    }

    acedSetVar(_T("BACKGROUNDPLOT"), &rbBackGroundPlot);
}

 

 

 

 

arx打印dwg为pdf
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 09:23 , Processed in 0.151022 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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