objectARX2010及其以上版本使用publish打印(发布)图纸,后台布局打印图纸例子浅析
AutoCAD 2010版本开始新增了一个发布图纸的功能,可以后台打印图纸,以下是ADN官方博客例子浅析
先加入相关的头文件和库文件
//添加头文件和库CAD2010及其以上新增
#if _MSC_VER == 1500
#include "acplmisc.h"
#pragma comment(lib,"AcPublish.lib")
#else if _MSC_VER > 1500
#include "acplmisc.h"
#pragma comment(lib,"AcPublish_crx.lib")
#endif
函数主体
//数据可以是后台数据库,但是一定是保存了的数据库,不能是临时数据库
static void plot (AcDbDatabase *pDb)
{
//设置pdf保存路径
CString pdfPath = _T("d:\\myPDF.pdf");
//设置打印机设备名
CString deviceName = _T("DWG To PDF.pc3");
Acad::ErrorStatus es = Acad::eOk; const TCHAR *docName;
//获取数据的路径和文件名,注意pdb如果是当前文件,
//一定要保存后再打印,否者这个路径可能是临时文件
//pDb即使的后台数据库依然能打印
es = pDb->getFilename(docName); //获取ACAD应用程序布局管理器
AcDbLayoutManager *layoutManager = acdbHostApplicationServices()->layoutManager();
AcDbDictionary *layoutDict = NULL;
//获取数据库的布局词典
es = pDb->getLayoutDictionary(layoutDict, AcDb::kForRead); //开始收集DSD数据的信息
// Start collecting info for the DSD data
AcPlDSDEntries dsdEntries; //迭代器遍历布局词典
AcDbDictionaryIterator *layoutIterator = layoutDict->newIterator(); //如果我们只想打印图纸空间而不是模型布局,获取pDb模型空间的ID
// If we only want to plot paper spaces and not the model layout
AcDbObjectId msId = acdbSymUtil()->blockModelSpaceId(pDb); for (; layoutIterator && !layoutIterator->done(); layoutIterator->next())
{
AcDbObjectPointer<AcDbLayout> layout(layoutIterator->objectId(), AcDb::kForRead);
//跳过模型空间
if (layout->getBlockTableRecordId() == msId)
continue; //!!!注意,布局的打印设置要提前设置好,如纸张,打印线型,等
//布局使用的是保存的布局的页面设置,也可以设置窗口打印和区域等
//此处是读模式,是不能修改layout设置
const ACHAR *layoutName;
layout->getLayoutName(layoutName);
//测试,修改输出的标题名加前缀,pdf单页模式会作为文件名
CString strPre=_T("sk_");
strPre+= layoutName ;
const ACHAR *szOutLayoutName = (LPCTSTR)strPre;
//设置DSD条目
AcPlDSDEntry dsdEntry; dsdEntry.setLayout(layoutName);
dsdEntry.setDwgName(docName);
//测试 此处修改dsdEntry.setTitle(layoutName);
//条目标题,单页pdf会使用这个名字来保存文件名
//并且条目的标题如果相同,原有的条目可能会被覆盖
dsdEntry.setTitle(szOutLayoutName);
//添加条目到dsd条目集合
dsdEntries.append(dsdEntry);
}
//删除(释放)布局遍历迭代器
delete layoutIterator;
layoutDict->close(); //将dsd条目添加到dsd数据
AcPlDSDData dsdData;
dsdData.setDSDEntries(dsdEntries); //设置dsd数据项目路径
dsdData.setProjectPath(_T("d:\\"));
//设置dsd数据的日志路径,pdf打印机可能无效,没有生成日志
dsdData.setLogFilePath(_T("d:\\logdwf.log")); //设置单页还是多页,如果是单页,将会使用布局名来保存文件名
//kSinglePDF kMultiPDF
dsdData.setSheetType(AcPlDSDEntry::kMultiPDF);
//设置打印的份数,这个pdf打印机不能设置,始终是1
dsdData.setNoOfCopies(1);
//设置目标名,保存的文件名(单页无效)
dsdData.setDestinationName(pdfPath);
//设置提示输入dwf名,如果为true可能会提示输入文件名
dsdData.setPromptForDwfName(false);
//设置图纸集的名字,这个会显示在打印和发布详细信息中
dsdData.setSheetSetName(_T("PublisherSet")); //设置当前配置和打印设备名
AcPlPlotConfig *plotConfig;
acplPlotConfigManager->setCurrentConfig(plotConfig, deviceName); //后面的acplPublishExecute需要加载AcPublish.arx
// We need this for acplPublishExecute
acedArxLoad(_T("AcPublish.arx")); //可能需要#include "acplmisc.h"
//可能需要2010-2012#pragma comment(lib,"AcPublish.lib")
//可能需要2013及其以上#pragma comment(lib,"AcPublish_crx.lib")
//执行发布程序
acplPublishExecute(dsdData, plotConfig, false);
}
测试代码
//如果使用当前数据库,一定要保存文件否则会出错,
//当前数据库有自动保存操作,即使不操作,如果不保存,也会出错。
//plot(acdbHostApplicationServices()->workingDatabase());
AcDbDatabase *pDb=new AcDbDatabase();
pDb->readDwgFile(_T("D:\\TestPublish.dwg"));
plot(pDb);
if (pDb!=NULL)
{
delete pDb;
pDb=NULL;
}
objectARX2010及其以上版本使用publish打印(发布)图纸,后台布局打印图纸例子浅析的更多相关文章
- 译: 3. RabbitMQ Spring AMQP 之 Publish/Subscribe 发布和订阅
在第一篇教程中,我们展示了如何使用start.spring.io来利用Spring Initializr创建一个具有RabbitMQ starter dependency的项目来创建spring-am ...
- php redis pub/sub(Publish/Subscribe,发布/订阅的信息系统)之基本使用
一.场景介绍 最近的一个项目需要用到发布/订阅的信息系统,以做到最新实时消息的通知.经查找后发现了redis pub/sub(发布/订阅的信息系统)可以满足我的开发需求,而且学习成本和使用成本也比较低 ...
- 各个 C# 版本的主要特性、发布日期和发布方式(C# 1.0 - 7.3)
原文 各个 C# 版本的主要特性.发布日期和发布方式(C# 1.0 - 7.3) 本文收集各个 C# 版本的主要特性.发布日期和发布方式. C# 8.0 尚在预览版本 C# 7.3 2018 年 5 ...
- 阿里巴巴开源 Dragonwell JDK 最新版本 8.1.1-GA 发布
导读:新版本主要有三大变化:同步了 OpenJDK 上游社区 jdk8u222-ga 的最新更新:带来了正式的 feature:G1ElasticHeap:发布了用户期待的 Windows 实验版本 ...
- 【原创】我所理解的自动更新-APP发布与后台发布
发布后台 创建渠道:添加新的渠道,设置渠道名称,自动生成渠道id. 查看渠道:查看渠道基本信息,渠道app版本号,资源版本号,是否开启更新. 创建/更新APP:选择打包ios,androi ...
- Bootice1.34版本把grub4dos0.46a写入硬盘MBR失败一个例子
Bootice1.34版本把grub4dos0.46a写入硬盘MBR失败一个例子 一个同事的台式机,BIOS启动,500GB硬盘,分了四个MBR分区,C盘是激活的主分区,第二个分区50 ...
- iOS release版本去除NSLog打印信息
因为NSLog的输出还是比较消耗系统资源的,而且输出的数据也可能会暴露出App里的保密数据,所以发布正式版时需要把这些输出全部屏蔽掉. 我们可以在发布版本前先把所有NSLog语句注释掉,等以后要调试时 ...
- .net的mvc的fw版本为4.5发布到阿里云【云虚拟主机】上.
注意:云虚拟主机和云服务器(ECS)不是同一个产品,请注意分别. 云服务器ECS: 云虚拟主机: 我用的是云虚拟主机也是第二个,版本是window server 声明:默认,已经把域名[已备案]绑定 ...
- 解决php -v查看到版本于phpinfo()打印的版本不一致问题
https://blog.csdn.net/haif_city/article/details/81315372 整个事件的起因是这样的 通过git拉取laraevl项目发现缺少.env文件,打算使用 ...
随机推荐
- monkey+shell命令解析总结
结束monkey方法 Linux下: adb shell top | grep monkey windows下: 1.adb shell top | find "monkey" 5 ...
- python开发应用-本地数据获取方法
文件的打开.读写和关闭 文件的打开: file_obj=open(filename,mode='r',buffering=-1,...) filename是强制参数 mode是可选参数,默认值是r b ...
- python_并发编程——数据共享
1.数据共享 实现进程之间的数据共享 from multiprocessing import Manager,Process class MyPro(Process): def __init__(se ...
- HDU - 4059: The Boss on Mars (容斥 拉格朗日 小小的优化搜索)
pro: T次询问,每次给出N(N<1e8),求所有Σi^4 (i<=N,且gcd(i,N)==1) ; sol: 因为N比较小,我们可以求出素因子,然后容斥. 主要问题就是求1到P的 ...
- redis windows版本的使用
ServiceStack的redis-windows下载 下载新的版本解压到硬盘,使用黑窗口切换到路径后执行 redis-server redis.windows.conf 即可看到redis启动到6 ...
- 关于java项目跑着跑着就挂掉的问题
部署项目后,安装redis,从redis中获取数据,或一些数据库查询操作,服务器cpu和内存占用率突增.
- uwsgi example
ref (uwsgi unix socket example) cat /etc/os-release curl --version # curl sudo pip install uwsgi e ...
- shell脚本编程基础之自定义函数库
脚本编程知识点 ${#VAR_NAME}:引用变量中字符的长度 A="25 90 100 120": echo ${A#* }:针对A变量,#表示从左往右,*空格表示以空格为分隔符 ...
- 关于html异步加载外部json文件报错问题
一. HTML代码如下: 参考网站(echarts-JSON请求数据):https://blog.csdn.net/you23hai45/article/details/51585506 <!D ...
- C++通过迭代修改字符串本身(auto类型说明符)
以字符串这种支持 for (declaration : expression) statement 这样for语句迭代的数据结构为例,我们看看auto关键字在类型推断中的作用. string s = ...