设计院少不了的是不停的改图,发图,审图。其中转PDF文件确实是一个费力气的活。往往图纸有几十张甚至上百张,一张一张的打印着实费时费力。网上也有一些转PDF的软件,自己也尝试了一些,用起来都不是很满意。我想要的是一个点一下,其他都不操心的批量打印软件。于是决定自己动手,恰好自己工作了这几年,用VB和Office与AutoCAD打交道积累的经验也不少了。
先说说自己对于批量打印或者说批量转PDF的需求。
- 支持.xls/.doc/.dwg文件转PDF。
- 支持文件夹扫描文件批量打开多个文件并打印。
- 并能将生成的PDF文件整理到文件夹中。
- 支持对于文件的签署。也就是贴上签名的图片。
- 支持DWG文件中查找不到的大字体的替换。
- 支持匹配图纸尺寸、范围打印,自动旋转等设置。
于是目前最终的界面是这样子的:
实际上这个软件是自己不断补充,逐次把功能加上去的。回顾下自己做这个软件的历程。
之前自己也对转图的机械操作工作量有所体会。五十张图纸自己要转两个多小时。也想过能不能有批量转图的方法。当时还没想到从网上找现成的工具。实际上直到自己开始写代码,找资料才发现这类的工具已经有不少了。
有一天有个人问我有没有批量打印word的程序。我以为是想让我写个程序,于是和她说,没有写过,不过这个应该很简单。由于Office软件可以录制宏得到代码,于是加上个批量遍历打开文件,加上录制出来的发送到打印机的设置代码也就不用两个小时就可以搞定出来。于是发给他,得到一个回复“你真是一个神奇的人”。才明白,是问我有没有现成的工具。不过开了个头,就要有收尾。
再加上Excel文件的批量打印更不必说了,VBA与Excel是亲密搭档。
于是开始思考打印DWG文件。其实网上搜了一下,就找到了相关的VB代码。加上遍历打开文件就初步差不多了。不过还要解决打印设置的问题。和Office文档不一样的是,Excel文件、Word文件中已经把打印设置设置好了,只需要发送到打印机就可以。而DWG图纸里的打印设置极有可能是不正确的。所以还要考虑如何设置打印样式的问题。其实主要是设置打印范围的问题。
鉴于一般我院作图都极度不规范,判断图框确实是个大问题,既不能用块名称来判断,因为块很可能被更名,也不能用块或多段线的的尺寸是否匹配图框大小来打印,因为可能被缩放或者块直接被打碎了。不过有一个必须要遵守的规范就是:最终的文件,一张DWG里面只能有一张图。于是索性将打印范围设置为“范围”,这个问题就轻松解决了。
上面这些最开始是使用VBA编写的,由于VBA是寄生在主程序中的。也就是最初这版做的是在Word中批量打印DOC文件,在Excel中批量打印XLS文件,在AutoCAD中批量打印DWG文件。于是有了下一个计划:将这几个批量打印程序整合到一起。
将各个程序整合到一起,需要解决的问题是:1.VBA代码转写为VB代码,部分常量需要转换。2.VB调用本机需要考虑版本不兼容的问题,例如2003版不带转PDF功能,只能发送到虚拟打印机。AutoCAD低版本相比高版本有些环境变量直接没有,而我到现在也没找到如何在低版本设置这些变量的方法。只好放弃对低版本的支持。
这时发现,Office高版本(2007版之后)已经自带了转PDF个功能,效率比发送到虚拟打印机快多了。做这个程序的时候,自己找了几种转PDF的方式。首先是PDF虚拟打印机。例如Adobe和pdfFactory打印机。其二是软件自带的转PDF功能,例如上文说到的Office自带的SaveAsPDFandXPS功能。而AutoCAD自带转PDF功能其实也是有的例如DWG to PDF的打印机驱动,或者是发布功能,不过最终我没有考虑。不仅因为一些低版本没这功能,而且我也没找到如何通过VB调用AutoCAD的发布功能。
然后最棘手的问题来了,如何判断是否本机有缺失的字体,因为简单字体还好说,AutoCAD如果找不到的话有个默认字体,直接替换了。但是大字体需要自己选,如果使用VB程序打开根本不会提示用户替换字体,于是很可能打印出来的是缺字的。很多人画图根本不管图纸上设置的字体本机有没有,每次都不厌其烦的点替换字体,设置还有默认取消字体替换的。于是在做最初的一版的时候告知了打架如何设置字体,替换字体。如何使用acad.fmp设置默认替换字体。不过,我估计也没几个人能听懂。
不过字体替换这个问题最终还是解决了,在打开AutoCAD的时候查找字体路径,并将有的字体存入数组,在打开图纸的时候查看大字体,缺失的字体直接替换成hztxt.shx。
还需要解决的一个问题是,将生成的PDF文件按照源文件的路径格式整理好。使用SaveAsPDFandXPS功能很好实现。但是发送到打印机的就不好设置了。首选想到的是怎么让Adobe打印机如我所愿的更改保存路径,在查找了注册表之后还是让我找到了。于是Adobe打印机生成的路径可以控制了。然后发现pdfFactory打印机更简单,它的默认保存路径是固定的。只要把二者设置为不打印预览就可以让打印机默默为我工作了。
最后是自动签名功能。其实很简单,在模板中加入的代号文字,打开的时候查找替换成相应的图片就可以了。DWG图纸则是添加的image图片路径。
还有增加了停止按钮功能,只是加个时间判断就可以了。
后记,用了这个批量打印之后,转多少图都不怕了。速度快,而且一点也不累。但是却少了最后检查一遍图纸的动力了。哎。。。