明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 232|回复: 32

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

[复制链接]
发表于 2019-7-5 06:53 | 显示全部楼层 |阅读模式
本帖最后由 风言无际 于 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"),这样我就不用按范围打印了,直接窗口打印就行了,可以避免这个问题了。谢谢各位了














这是一个文件





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2019-7-5 09:02 | 显示全部楼层
好像没用过“范围”,往往都是“窗口”,可能是习惯于图形里有多个图或图形外有辅助件的缘故吧。
cad 出这样的问题,不奇怪的,算法上的 bug 有不少,简单的就是避免;或换用 cad 的 shx 试试,或图形缩放到尽可能大 Zoom.E 命令,然后“显示”打印。
可以的话,去除了敏感内容,上传个出现这样问题的 dwg 来看看?
发表于 2019-7-5 10:16 | 显示全部楼层
不同的打印纸/打印机有不同的打印边界,即便是同样的纸张名字,也可能可打印区域不一样。预览的时候用的是一个可打印区域大的纸,所以显示了,打印时候用的是可打印区域小的,于是边界被裁了。绝大多数人不会精确打印,试图同样纸张上打印同样大小的框,是不可能1:1完全打印出来的。打印范围要小于等于纸张的可打印区域。

点评

回答准确。 默认的图幅列表中的每个图幅都是存在边界(margin)的,你可以修改为四边的边界都是0再试试。  发表于 2019-7-5 12:49
 楼主| 发表于 2019-7-5 12:54 | 显示全部楼层
mikewolf2k 发表于 2019-7-5 10:16
不同的打印纸/打印机有不同的打印边界,即便是同样的纸张名字,也可能可打印区域不一样。预览的时候用的是 ...

边界我全都修改为0后,显示的预览图是错的了,很晕。
本来不修改边界的时候,打印区域选择范围,打印比例选择布满图纸,然后选中居中打印,预览时是完全正确的。但是如果在特性里把纸张的边界修改为0后(其他任何设置都不改了),显示的预览图,图形很小。不知道怎么回事
 楼主| 发表于 2019-7-5 12:58 | 显示全部楼层
dunkel 发表于 2019-7-5 09:02
好像没用过“范围”,往往都是“窗口”,可能是习惯于图形里有多个图或图形外有辅助件的缘故吧。
cad 出这 ...

已经把文件上传到一楼了,麻烦看看,谢谢。
打印区域选择范围,打印比例选择布满图纸,然后选中居中打印,这几个保持不变的。
发表于 2019-7-5 13:22 | 显示全部楼层
怪了,xp/2010 没异常啊,无论是打印到 cad 的 .png 或 dwg2pdf 或系统的 PDF Factory Pro 都是完整的。我是用“宋体”替换了你那个细等线体字体的,因为我机子上没这字体;这个替换湮灭了问题的可能性应该不大吧。
发表于 2019-7-5 13:26 | 显示全部楼层
dunkel 发表于 2019-7-5 13:22
怪了,xp/2010 没异常啊,无论是打印到 cad 的 .png 或 dwg2pdf 或系统的 PDF Factory Pro 都是完整的。我 ...

这个取决于机器的打印机和纸张设置,在其它机器上测试无效。
简单点,自己看看自己当前的纸张上显示的可打印区域是多少,然后根据下面的比例和坐标算下,能否打印完全。
发表于 2019-7-5 13:54 | 显示全部楼层
这跟打印区域没关系吧,毕竟用的是“布满图纸”而非固定的比例,cad 的预览就会剔除边界的,如果这都做不好,也不会放出来的。
发表于 2019-7-5 14:25 | 显示全部楼层
dunkel 发表于 2019-7-5 13:54
这跟打印区域没关系吧,毕竟用的是“布满图纸”而非固定的比例,cad 的预览就会剔除边界的,如果这都做不好 ...

布满图纸布满的是当前的纸张设置,如果打印时候的纸张可打印区域小了,不能按原比例打印,那不就得去掉一块?
发表于 2019-7-5 15:25 | 显示全部楼层
本帖最后由 e2002 于 2019-7-5 15:34 编辑

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

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

对于真实的大幅面绘图仪,这个情况一般就不会发生,因为大部分都默认使用HP的驱动,设置四边均为0后,会正常按设定的比例打印出来。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2019-7-22 14:16 , Processed in 0.213011 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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