明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 81|回复: 3

后台打印dwg如何进行设置

[复制链接]
发表于 2020-11-20 19:11 | 显示全部楼层 |阅读模式
本人小白,想要实现后台打印dwg中特定范围的功能,
参考代码:
  1. static void plot (AcDbDatabase *pDb)
  2.     {
  3.         //设置pdf保存路径
  4.         CString pdfPath = _T("d:\\myPDF.pdf");
  5.         //设置打印机设备名
  6.         CString deviceName =  _T("DWG To PDF.pc3");
  7.         Acad::ErrorStatus es = Acad::eOk;

  8.         const TCHAR *docName;
  9.         //获取数据的路径和文件名,注意pdb如果是当前文件,
  10.         //一定要保存后再打印,否者这个路径可能是临时文件
  11.         //pDb即使的后台数据库依然能打印
  12.         es = pDb->getFilename(docName);  

  13.         //获取ACAD应用程序布局管理器
  14.         AcDbLayoutManager *layoutManager = acdbHostApplicationServices()->layoutManager();
  15.         AcDbDictionary *layoutDict = NULL;
  16.         //获取数据库的布局词典
  17.         es = pDb->getLayoutDictionary(layoutDict, AcDb::kForRead);

  18.         //开始收集DSD数据的信息
  19.         // Start collecting info for the DSD data
  20.         AcPlDSDEntries dsdEntries;

  21.         //迭代器遍历布局词典
  22.         AcDbDictionaryIterator *layoutIterator = layoutDict->newIterator();

  23.         //如果我们只想打印图纸空间而不是模型布局,获取pDb模型空间的ID
  24.         // If we only want to plot paper spaces and not the model layout
  25.         AcDbObjectId msId = acdbSymUtil()->blockModelSpaceId(pDb);
  26.          
  27.         for (; layoutIterator && !layoutIterator->done(); layoutIterator->next())
  28.         {
  29.             AcDbObjectPointer<AcDbLayout> layout(layoutIterator->objectId(), AcDb::kForRead);
  30.             //跳过模型空间
  31.             if (layout->getBlockTableRecordId() == msId)
  32.                 continue;

  33.             [b]//!!!注意,布局的打印设置要提前设置好,如纸张,打印线型,等
  34.             //布局使用的是保存的布局的页面设置,也可以设置窗口打印和区域等
  35.             //此处是读模式,是不能修改layout设置[/b]
  36.             const ACHAR *layoutName;
  37.             layout->getLayoutName(layoutName);      
  38.             //测试,修改输出的标题名加前缀,pdf单页模式会作为文件名
  39.             CString strPre=_T("sk_");
  40.             strPre+= layoutName ;
  41.             const ACHAR *szOutLayoutName = (LPCTSTR)strPre;
  42.             //设置DSD条目
  43.             AcPlDSDEntry dsdEntry;

  44.             dsdEntry.setLayout(layoutName);
  45.             dsdEntry.setDwgName(docName);
  46.             //测试 此处修改dsdEntry.setTitle(layoutName);
  47.             //条目标题,单页pdf会使用这个名字来保存文件名
  48.             //并且条目的标题如果相同,原有的条目可能会被覆盖
  49.             dsdEntry.setTitle(szOutLayoutName);
  50.             //添加条目到dsd条目集合
  51.             dsdEntries.append(dsdEntry);   
  52.         }
  53.         //删除(释放)布局遍历迭代器
  54.         delete layoutIterator;
  55.         layoutDict->close();

  56.         //将dsd条目添加到dsd数据
  57.         AcPlDSDData dsdData;
  58.         dsdData.setDSDEntries(dsdEntries);

  59.         //设置dsd数据项目路径
  60.         dsdData.setProjectPath(_T("d:\"));
  61.         //设置dsd数据的日志路径,pdf打印机可能无效,没有生成日志
  62.         dsdData.setLogFilePath(_T("d:\\logdwf.log"));

  63.         //设置单页还是多页,如果是单页,将会使用布局名来保存文件名
  64.         //kSinglePDF kMultiPDF
  65.         dsdData.setSheetType(AcPlDSDEntry::kMultiPDF);
  66.         //设置打印的份数,这个pdf打印机不能设置,始终是1
  67.         dsdData.setNoOfCopies(1);
  68.         //设置目标名,保存的文件名(单页无效)
  69.         dsdData.setDestinationName(pdfPath);
  70.         //设置提示输入dwf名,如果为true可能会提示输入文件名
  71.         dsdData.setPromptForDwfName(false);
  72.         //设置图纸集的名字,这个会显示在打印和发布详细信息中
  73.         dsdData.setSheetSetName(_T("PublisherSet"));

  74.         //设置当前配置和打印设备名
  75.         AcPlPlotConfig *plotConfig;
  76.         acplPlotConfigManager->setCurrentConfig(plotConfig, deviceName);   
  77.          
  78.          
  79.         //后面的acplPublishExecute需要加载AcPublish.arx
  80.         // We need this for acplPublishExecute
  81.         acedArxLoad(_T("AcPublish.arx"));

  82.         //可能需要#include "acplmisc.h"
  83.         //可能需要2010-2012#pragma comment(lib,"AcPublish.lib")
  84.         //可能需要2013及其以上#pragma comment(lib,"AcPublish_crx.lib")
  85.         //执行发布程序
  86.         acplPublishExecute(dsdData, plotConfig, false);
  87.     }
复制代码


其中如何设置layout,请大佬指点,不胜感激。
 楼主| 发表于 2020-11-23 15:06 | 显示全部楼层
顶一下~
有偿解决问题~
发表于 2020-11-27 13:31 | 显示全部楼层

顶一下~,同问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号  
©2000-2020 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2020-12-3 18:08 , Processed in 0.145288 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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