脚本用于将cad中的标准图框逐个导出成pdf文件(单个文件而不是多个文件)。并且要求按照从左至右,从上至下的顺序来导出文件。

------------------------------------------------------------------------------------------------------------------------------------

需要进行导出cad文件的截图

-------------------------------------------------------------------------------------------------------------------------------------

实践中,最初使用autocad的VBA,不过最初的方法没有考虑到图框输出的顺序。由于需要考虑顺序于是转用python,使用win32com组件难以写入坐标,因此改用comtypes模块。使用comtypes来处理的麻烦在于ms.Item(i)获取的接口与VBA的不同(像VBA那样ms.Item(i).Lengh会报错),VBA和其他程序中使用接口的差别不是特别了解,只是知道在获取接口之后必须通过接口查询来获取需要的另外接口,程序中为了获取多段线的长度Length而必须更换接口。另外向CAD传递坐标需要使用到array模块。

几处关键所在:

1.需要安装comtypes模块与pdfFactory虚拟打印机。

2.需要接口查询获取需要的接口。

3.对于搜索的图框进行排序,纵轴方向降序而横轴升序。

4.对于搜索到的图框,考虑到是横向还是纵向。

注意的问题:

1.各个图框绘制时并非都是左上角对齐到网格,因此需要处理。frames.sort(lambda

x,y:(cmp(round(y[0][1]/20,0),round(x[0][1]/20,0)) or

cmp(round(x[0][0]/20,0),round(y[0][0]/20,0))))虽然在大多时候会得到正确的结果,但极端状况下图框的顺序还是会有些错误。无论用int也好round也好,效果都差不多。

2.在python对于一些对象值的设定需要在VBA对象浏览器中查询,比如在VBA中使用layout.PaperUnits =

acMillimeters,而在python中必须使用layout.PaperUnits = 1。

3.打印时候需要设置前台打印,否则可能报错,doc.SetVariable('BACKGROUNDPLOT', 0)。

4.对于打印输出的相关设置最好显示给值,而不使用适用默认值,因为很多CAD文档会有一些意想不到的设置。

5.使用VBA是很直接的一种方式,如果改用python而没有体现python的优势,还是保持VBA的为好。使用python往往是需要使用一些特定的模块,或是特定构造有关,如lis,dict等。

-------------------------------------------------------------------------------------------------------------------------------------

# -*- coding: utf-8 -*-

'''

Created on 2011-9-20

@author: mtl

'''

import array

import comtypes.client

#根据需要修改以下参数。

paper = 'A3'

def main():

#打印机设置。

acad =

comtypes.client.GetActiveObject("AutoCAD.Application")

doc =

acad.ActiveDocument

ms =

doc.ModelSpace

doc.ActiveLayout.ConfigName

= "pdfFactory Pro"

if paper ==

'A3':

doc.ActiveLayout.CanonicalMediaName = "A3"

perimeter = 1434

elif paper

== 'A4':

doc.ActiveLayout.CanonicalMediaName = "A4"

perimeter = 1014

doc.ActiveLayout.PaperUnits = 1

doc.ActiveLayout.CenterPlot = True

doc.Plot.QuietErrorMode = False

doc.ActiveLayout.UseStandardScale = False

doc.ActiveLayout.SetCustomScale(1, 1)

doc.SetVariable('BACKGROUNDPLOT', 0)

doc.Regen(1)

#搜索所有标准图框。

frames =

[]

for i in

range(0,ms.Count):

if ms.Item(i).ObjectName == 'AcDbPolyline':

pline = ms.Item(i).QueryIn

更多来源:http://www.zgjx114.com/question/

terface(comtypes.gen.AutoCAD.IAcadLWPolyline)

if abs(pline.Length - perimeter) < 2:

ll,ur = pline.GetBoundingBox()

print ll,ur

frames.append([(ll[0],ur[1]),ll[:-1],ur[:-1]])

#图框排序:y轴降序,x轴升序。

frames.sort(lambda

x,y:(cmp(round(y[0][1]/20,0),round(x[0][1]/20,0)) or

cmp(round(x[0][0]/20,0),round(y[0][0]/20,0))))

#打印输出。

for frame in

frames:

#设定横向/纵向打印。

if abs(frame[1][0] - frame[2][0]) > abs(frame[1][1] -

frame[2][1]):

doc.ActiveLayout.PlotRotation = 1

else:

doc.ActiveLayout.PlotRotation = 0

doc.ActiveLayout.SetWindowToPlot(array.array('d',frame[1]),

array.array('d',frame[2]))

doc.ActiveLayout.PlotType = 4

doc.Plot.PlotToDevice(doc.ActiveLayout.ConfigName)

if __name__ == "__main__":

main()

如何用python做软件导出cad_使用python将cad批量导出至pdf相关推荐

  1. 用python做自我介绍_用python做个自我介绍(python入门教程)_逻辑教育

    原标题:用python做个自我介绍(python入门教程)_逻辑教育 本文涉及的python基础语法为:数据类型等 数字类型 1. 字符串的拼接 我们在上一章中已经简单介绍了一下字符串的创建方式,这里 ...

  2. 用python做软件_女友闹别扭不用担心,Python做个软件轻松哄好

    学编程难免有时觉得枯燥,但我们可以自己用编程来做一些有趣的事情,不仅可以排解自己的无聊,还可以给女朋友一个惊喜,增进两人感情! 人们都喜欢记住一些重要的日子,比如说跟女朋友认识的日子,结婚纪念日.周年 ...

  3. python能做软件开发吗-学习Python软件开发能做什么?

    原标题:学习Python软件开发能做什么? 近年来,Python语言可以说是快速抢占了人们的眼球.它以其代码简短.可读性强.适合迅速开发而广泛应用等优点让许多学员想要学习,很多人会问,学习python ...

  4. python 做软件授权代理_软件提卡+授权API+代理系统三合一网站源码(开源)

    功能说明: 此网站系统是集成了以下多种功能:软件授权验证系统通过API接口进行验证使用者是否拥有授权. 软件可设置使用时间,如使用者没有授权,将手动添加试用授权.网站手动生成卡密系统内部对接授权系统q ...

  5. 手机python编程软件 turtle,安卓手机python编程软件

    如何用手机编程Python? 1.QPython3:这是一个在安卓手机上运行python3的脚本引擎,整合了python3解释器.控制台.QEdit编辑器和SLA4库,可以在安卓手机上运行python ...

  6. python做logistic回归_用Python做Logistic回归

    为什么写这篇文章 本人初学python,碰巧做的东西需要用一下Logistic回归,自觉这个很基础的东西应该已经有很多比较好的实现了,于是我就很自觉地问了下度娘.结果大囧==..出来的相关结果少得可怜 ...

  7. python做股票分析_利用Python进行股票投资组合分析(调试)

    pythonsp500-robo-advisor-edition Python for Financial Analyses 需要的镜像文件和数据--Robo Advisor edition. 小结 ...

  8. python做淘宝_用python做个淘宝双十一满减攻略,再也不用算算算了

    双十一还有不到10天,购物车已经快加满了,但是钱包里就这么多钱,如何用现有的钱买到更多喜欢的东西,成为我比较头疼的事,因为我已经被各种组合加法搞晕了 于是我决定用python做个双十一购物攻略,把复杂 ...

  9. python春节集五福_集五福?用 Python 做点事情吧! Python集五福教程

    相信大家今天都知道了支付宝集五福的活动,对于二次使用这种运营模式的行为我暂不做评价,毕竟大家都是程序员. 我这次和大家聊聊这块的技术点,以及如何用 Python 来做点事情.所有技术点到为止不做深究. ...

  10. python做单元测试_如何使用python做单元测试?

    很多编程小白不太理解单元测试,为什么要进行单元测试呢?很简单,主要是提高代码的正确,同时确保重构不出错.接下来我们一起学习怎么用python做单元测试吧. python内置了一个unittest,但是 ...

最新文章

  1. Ruby 2.2.0发布,支持增量式垃圾收集和符号的垃圾收集
  2. [Android] Handler源码解析 (Java层)
  3. python之命令行解析工具argparse
  4. python获取当前文件夹下所有文件名
  5. JVM编译时和运行时状态
  6. netflix数据处理2(转)
  7. [Android]Activity启动过程
  8. 2LIS_13_VDITM中开票项目数量计算错误
  9. 【Android】Android--Dialog
  10. 【新提醒】超低成本手机全息3D投影制作教程_光学_极客迷
  11. 其于js的五笔输入法!
  12. 拆卸计算机主机的步骤是,拆卸主机的图解步骤
  13. android+os+1.5,Remix OS 1.5操作系统正式上线
  14. FortiGate FGCP HA 配置文档
  15. 纽约州推出“被遗忘权”提案 用户或能要求将个人隐私信息从搜索结果中移
  16. Kanzi自定义插件节点属性、自定义消息以及自定义响应
  17. 下载频道2013上半年超人气精华资源汇总---全都是免积分下载
  18. 零基础小白必看----2020年最新Java学习路线图(纯干货)
  19. 人生就是一场永不停歇的修行
  20. node.js学习day03 通过node.js连接数据库实现增删改查

热门文章

  1. mysql front连接_如何用MySQL-Front远程连接MySql?
  2. 概念讲解:大地水准面 | 地球椭球体 | 参考椭球体 | 大地基准面 | 地图投影
  3. LED字体下载,可视化大屏,数据可视化必备
  4. 基于bert的情感分类
  5. word文档中英文行间距不一样怎么解决
  6. php微信开发之微信卡券
  7. 【自学51单片机】1 -- 初步认识单片机及其学习方法 和 单片机基础知识介绍
  8. 浅谈 malloc 函数在单片机上的应用
  9. opencv图片保存0字节_Opencv中IplImage存储方式介绍
  10. pyqt+pyqtgraph+lka(界面制作)--优化版