风言无际 发表于 2019-7-5 06:53:02

为什么CAD打印预览是正确的,打印出来的文字却会少一部分

本帖最后由 风言无际 于 2019-7-6 10:08 编辑

问题是这样的,打印范围选择范围,预览时候是正确的,但是打印出来就出错了,看最后一张图,最底下的文字缺了一半(无论是打印到PDF,还是打印到实体打印机都是这)。我在CAD 2005 2012版本上都试过,WIN7 WIN10系统下也都试过,包括打印对话框中的各种设置都调过始终是这样,不知怎么回事。
--------打印范围如果选择窗口,自己画框选是不会有这问题的-----------
我就是想知道为什么选择范围就会出现这种问题?有没有知道的大侠给解答一下,谢谢。

--------------------我解释一下,为什么我一直强调打印区域要选择范围,而不选择窗口----------------------------------
因为我可能同时要一次性打几十张或者上百张这样的图纸,图纸的框大小都是一样的,如果一张张手工打开,然后窗口选择打印区域,会是一个比较浩大的工程,可能光打印就要一天两天时间的。所以我用VBA编了一个CAD批量打印程序,过程是这样的:选择包含所有图纸的目录,然后打开第一张图,设置好打印区域为范围,设置打印比例,然后所有图纸就按照这个设置一张张的进行打印输出了,省下了很多时间。这些功能都已经实现了,就是发现最后打印输出的图纸出现了文字缺一半的问题(无论是用虚拟打印机还是实体打印机),这样的图纸是无法作为最终资料提交出去的。
VBA代码设置打印区域为范围比较容易实现,Object.PlotType = acExtents,只需这一句就行了。如果要用窗口打印输出,需要object.SetWindowToPlot(LowerLeft, UpperRight),Object.PlotType = acWindow,两句代码,第一句要指定打印窗口的左下角和右上角坐标(LowerLeft, UpperRight),这个左下角和右上角坐标是能包含图纸内所有可见对象的,问题是一直没找到VBA代码中有能直接获取一张图纸中左下角和右上角坐标的代码,只想到对图纸中的所有对象一个个进行遍历,获取每个对象的坐标,然后比较大小。我测试过,当图纸中内容很多的时候,光这个过程就会卡死好长时间,很是影响使用。而且每张图纸的左下角和右上角坐标都是不一样的,每张图纸在打印前都获取一遍左下角和右上角坐标,虽说不用人工去干预了,但是真是很费时间,而且程序还像是卡死了一样。我在二次开发的分区里问过这个问题,有个大佬说,要获取一张图纸的左下角和右上角坐标只能进行遍历,所以选择窗口打印这条路应该是走不通的,只有按范围打印这个比较好实现。现在就是功能实现了,但是文字会缺一半,很是让人头疼。。。。。。。。。。
不知道各位有没有别的办法能解决这个问题的,在此谢过了。

现在我找到获取当前图纸的左下角和右上角坐标的参数了,Object.GetVariable("EXTMAX"),Object.GetVariable("EXTMIN"),这样我就不用按范围打印了,直接窗口打印就行了,可以避免这个问题了。谢谢各位了。
http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTA0OTEyfGZjMzhlMzE4fDE1NjIyODA2ODJ8NDIwOTI2fDE3OTgzMQ%3D%3D&noupdate=yes






http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTA0OTEzfDhkN2I3YjdhfDE1NjIyODA2ODJ8NDIwOTI2fDE3OTgzMQ%3D%3D&noupdate=yes




http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTA0OTE0fDA5ODVhNTE1fDE1NjIyODA2ODJ8NDIwOTI2fDE3OTgzMQ%3D%3D&noupdate=yes

这是一个文件





e2002 发表于 2019-7-6 15:10:50

本帖最后由 e2002 于 2019-7-6 15:43 编辑

mikewolf2k 发表于 2019-7-6 13:04
前面说的不可打印边界是针对物理打印机而言,前面也说了对于软件PDF打印是否可以为0不确定。从你的测试结 ...
我以前就是你这种做法,后来才改的。

自己用倒是没问题,但通用性有问题,文件设置好的 pagesetup/layout, 到了别人那里打开就比较麻烦(企业内部能统一就不错了)。

这些年已经不直接打印到物理设备,都是要求PDF,然后PDF发出到打印店打印到纸张。
这样也避免了dwg到外面打印出现缺失字体的状况发生。

至于自动裁剪,对于物理输出设备没有问题。
我说的是PDF输出,这时候页面还是需要有个纸张大小的。

最后你提到的线宽100的,这个在改为标准图幅尺寸时就测试过了,显然结果如你所想,50。

关于这个"图框"的"外边框线",仔细看规范规定,这线不是图框的一部分,其打印打印出来的作用是用来确定刀子切割纸张的线路的。
这个我以前也是理解错误,现在改正了。

也就是我们的图框块定义,可以不需要这个"外框细线",只需要标定两个角点位置即可(国外的很多图框块就是两个对角处有个标记短线)

e2002 发表于 2019-7-5 21:24:59

本帖最后由 e2002 于 2019-7-5 21:34 编辑

mikewolf2k 发表于 2019-7-5 16:44
不是定义稍大的纸,是按实际设置。绘图仪卷轴的纸就是880或者860的。要按这个实际值设置,才能精确打印出 ...
Dwg To PDF.pc3 是可以设置纸边距四边均为0的,这时候可以完全按指定比例出图(就是生成pdf)。

纸张厂家的工程用卷筒纸规格一般就是 880宽的,已经考虑了这些边界因素。

对于设计人来说,不需要去考虑这些了,直接按国标规定的图幅,设置纸边距四边均为0即可,这样不需要去创建新的一些列自定义纸张幅面(例如880x620...),只需要检查默认提供的那些与国标幅面一致的图幅项目的四个纸边距是不是都为0即可。

为了简化和统一企业的内部标准,我已经定义好了所有 GB50001-2017内确定的图幅尺寸(包括所有加长版本)。此pmp文件可以附着到各个pc3文件上(会提示不匹配驱动,不管他,没事的,实际上是可以使用的),大家用就可以了。

制作这个也花了些时间:





mikewolf2k 发表于 2019-7-5 16:44:45

e2002 发表于 2019-7-5 15:32
以前为了准确按比例完整打出(包括图框外框线的)大幅面的图纸,我也用了自定义的比标准幅面略大一些的纸张 ...

不是定义稍大的纸,是按实际设置。绘图仪卷轴的纸就是880或者860的。要按这个实际值设置,才能精确打印出A0/A1的841. 841加上少许的边界(假设5)小于纸张宽度。
以上是对于绘图仪来说,对于打印机来说,纸张就是标准的841,这时候是不可能全部按比例打印出841的,必须打印小于841的图,图框部分不打。对于多数用户来说,其实是缩放打印的(99.X%)。
另外边距是不允许设置为0的(对于真实打印机来说,PDF软件未知。)打印机出于保护自己硬件的目的,是不会允许贴边线打印的。要知道喷头是有面积的,如果喷头能对着纸边界,也就是说这一喷会有一半碰到纸外,污染打印机滚轴了。以前一个打印机厂家的技术人员告诉我,他们产品的这个极限边界是1.5mm。

dunkel 发表于 2019-7-5 09:02:11

好像没用过“范围”,往往都是“窗口”,可能是习惯于图形里有多个图或图形外有辅助件的缘故吧。
cad 出这样的问题,不奇怪的,算法上的 bug 有不少,简单的就是避免;或换用 cad 的 shx 试试,或图形缩放到尽可能大 Zoom.E 命令,然后“显示”打印。
可以的话,去除了敏感内容,上传个出现这样问题的 dwg 来看看?

mikewolf2k 发表于 2019-7-5 10:16:57

不同的打印纸/打印机有不同的打印边界,即便是同样的纸张名字,也可能可打印区域不一样。预览的时候用的是一个可打印区域大的纸,所以显示了,打印时候用的是可打印区域小的,于是边界被裁了。绝大多数人不会精确打印,试图同样纸张上打印同样大小的框,是不可能1:1完全打印出来的。打印范围要小于等于纸张的可打印区域。

风言无际 发表于 2019-7-5 12:54:37

mikewolf2k 发表于 2019-7-5 10:16
不同的打印纸/打印机有不同的打印边界,即便是同样的纸张名字,也可能可打印区域不一样。预览的时候用的是 ...

边界我全都修改为0后,显示的预览图是错的了,很晕。
本来不修改边界的时候,打印区域选择范围,打印比例选择布满图纸,然后选中居中打印,预览时是完全正确的。但是如果在特性里把纸张的边界修改为0后(其他任何设置都不改了),显示的预览图,图形很小。不知道怎么回事

风言无际 发表于 2019-7-5 12:58:17

dunkel 发表于 2019-7-5 09:02
好像没用过“范围”,往往都是“窗口”,可能是习惯于图形里有多个图或图形外有辅助件的缘故吧。
cad 出这 ...

已经把文件上传到一楼了,麻烦看看,谢谢。
打印区域选择范围,打印比例选择布满图纸,然后选中居中打印,这几个保持不变的。

dunkel 发表于 2019-7-5 13:22:15

怪了,xp/2010 没异常啊,无论是打印到 cad 的 .png 或 dwg2pdf 或系统的 PDF Factory Pro 都是完整的。我是用“宋体”替换了你那个细等线体字体的,因为我机子上没这字体;这个替换湮灭了问题的可能性应该不大吧。

mikewolf2k 发表于 2019-7-5 13:26:10

dunkel 发表于 2019-7-5 13:22
怪了,xp/2010 没异常啊,无论是打印到 cad 的 .png 或 dwg2pdf 或系统的 PDF Factory Pro 都是完整的。我 ...

这个取决于机器的打印机和纸张设置,在其它机器上测试无效。
简单点,自己看看自己当前的纸张上显示的可打印区域是多少,然后根据下面的比例和坐标算下,能否打印完全。

dunkel 发表于 2019-7-5 13:54:30

这跟打印区域没关系吧,毕竟用的是“布满图纸”而非固定的比例,cad 的预览就会剔除边界的,如果这都做不好,也不会放出来的。

mikewolf2k 发表于 2019-7-5 14:25:50

dunkel 发表于 2019-7-5 13:54
这跟打印区域没关系吧,毕竟用的是“布满图纸”而非固定的比例,cad 的预览就会剔除边界的,如果这都做不好 ...

布满图纸布满的是当前的纸张设置,如果打印时候的纸张可打印区域小了,不能按原比例打印,那不就得去掉一块?

e2002 发表于 2019-7-5 15:25:57

本帖最后由 e2002 于 2019-7-5 15:34 编辑

对于特定的真实打印设备,也是有默认的可打印范围(存在打印不出的边界区域),这时候即使是图幅自定义了纸边界都为0,也是无能为力的(此时打印预览正常)。

一般的,还是用 Dwg To PDF 这类虚拟打印机,创建好pdf等电子文档。
再输出到真实打印设备,此时由于真实打印设备存在打不出的边界区域,只能选择缩放到充满纸张,比例就比电子档的相应缩小了点。

对于真实的大幅面绘图仪,这个情况一般就不会发生,因为大部分都默认使用HP的驱动,设置四边均为0后,会正常按设定的比例打印出来。
页: [1] 2 3
查看完整版本: 为什么CAD打印预览是正确的,打印出来的文字却会少一部分