QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 10347|回复: 2
收起左侧

[已答复] VBA:如何打印到Adobe PDF并自动输出?

[复制链接]
发表于 2011-9-2 13:48:41 | 显示全部楼层 |阅读模式 来自: 中国浙江杭州

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
下面代码中,如果使用PLOTTODEVICE方法,是可以打印成功的,但是需要手动输入文件名% ?) D" b6 V4 P/ F6 f7 p2 l
4 c8 d& b6 K; Z" P7 N: L) A3 x
我想让程序中自动输出文件名,所以使用了plottofile方法,结果却无法正确输出了,输出的PDF文件打不开
( k& ]* d" N9 }7 U; k( N8 y2 A4 g7 g" ?2 `2 M: p$ j
代码如下,请大虾指点,谢谢
4 I, M8 T% I! K- W+ T9 i& C# K3 Z3 }( r/ v5 @
  1.    
    9 d0 q' ^# [- p. X1 n' q* P# P7 [( b
  2.     ThisDrawing.ModelSpace.Layout.RefreshPlotDeviceInfo   '刷新打印设备信息9 }: N; Z% Y7 ?3 l) D
  3.     ThisDrawing.ModelSpace.Layout.ConfigName = "Adobe PDF"    '设置打印机为虚拟打印机 Microsoft Office Document Image Writer9 S6 I$ r- a/ G
  4.     ThisDrawing.ModelSpace.Layout.CanonicalMediaName = "A3"    '设置纸型为A36 O$ s' K4 h7 d' }
  5. '    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result' h  Y# \2 j) N# }9 N
  6. '    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4
    / g5 L, ?( ^# |& b: t/ G. c
  7. '    RegCloseKey Result, j7 _% A& [+ Z) O
  8.     Dim point1(0 To 1) As Double, point2(0 To 1) As Double
    # @. l: Q* y# e6 W' R( m- N& v. g
  9.     Dim path11 As String
    7 w8 O5 [8 b3 R7 x. j' B- v
  10.     path11 = "D:\123.pdf"
    : D) }9 {+ Z1 p
  11.     Scal = 390 N$ u# L& j  W) R2 Z
  12.     point1(0) = 0                                        '安装图1+ H5 |- m/ }+ S2 ?; V6 R
  13.     point1(1) = 0
    % U( B4 W( d! @) _2 [4 ~5 T
  14.     point2(0) = 420 * Scal0 M  S3 L0 X! Q. M2 H. `' n+ X: d1 L
  15.     point2(1) = 297 * Scal; I* J% F9 g, n$ J
  16.     ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()
    ) M0 ]2 l  @2 c: h$ g4 E
  17.     ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()
    - x  M- j4 ^0 x  {$ D
  18.     ThisDrawing.ModelSpace.Layout.PlotRotation = ac90degrees
    2 @' Z; _' q5 j; w: O, m/ y7 E8 n; G
  19.     ThisDrawing.Regen acActiveViewport
    , d* g5 I% C; k6 Z
  20.     ThisDrawing.Plot.NumberOfCopies = 1
    $ g0 V# Z. v: W& m4 ?+ k
  21.     ThisDrawing.ModelSpace.Layout.PlotType = acWindow
    # S  R* m$ g) n5 ]" ]
  22.     ThisDrawing.ModelSpace.Layout.StandardScale = acVpScaleToFit4 P' d! i5 n! x8 ]9 k7 ~
  23.     ThisDrawing.ModelSpace.Layout.CenterPlot = True
    7 G- b, c2 ]! |" Z% L/ P! V. L; y1 W
  24.     ThisDrawing.Plot.QuietErrorMode = True1 |( o( }$ D/ @$ w& C
  25.     7 k' C1 i4 d6 K2 m6 s! O
  26.     ' F( `5 b( {- H5 Q
  27. '    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result* e9 M* U7 H5 x+ S- B
  28. '    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4# w; Q4 t% \$ [2 S8 v
  29. '    RegCloseKey Result1 P) [, \- z( S6 L
  30.     ThisDrawing.Plot.PlotToFile path11( v+ W: m) A* [1 B8 P. {
  31.    
    / F+ p. g! M; r1 }
复制代码
发表于 2011-9-2 21:24:33 | 显示全部楼层 来自: 中国辽宁
1# 157787698
/ G" ]0 _2 R) [: C% C. G$ ~) ~$ o
下面代码中,如果使用PLOTTODEVICE方法,是可以打印成功的,但是需要手动输入文件名

+ {" i; E! C- e: J原因在于PDF打印机的设置.- s" X7 L. I7 D% O: r
打开它的"打印首选项"对话框,在"Adobe PDF 设置"选项卡下有四个下拉列表框,其中第三个是"Adobe PDF 输出文件夹",你的PDF打印机的该列表框中现在应该显示的是"提示 Adobe PDF 文件名",这就是你每次都要手动输入文件名的原因.
9 B+ g: [  ?9 {" u- c$ q点击该列表框右面的"浏览"按钮,为它赋予一个默认路径,打印时它就会以布局名称为文件名自动保存在默认目录下.
2 }4 d: ]  f" q* D0 J# B+ R0 h另外,在其下面还有几个复选框,第一个是"查看 Adobe PDF 结果",如果选中了该复选框,每次PDF打印机创建了新文件后都会自动打开.不选中该复选框则不会打开创建的PDF文件
1 e6 |' o0 W$ T; B# b9 f
我想让程序中自动输出文件名,所以使用了plottofile方法,结果却无法正确输出了,输出的PDF文件打不开

3 \1 T- G4 }4 l不是所有的打印机都能打印到文件.这其中就有 Adobe PDF 打印机.5 q0 X# N* i( n0 c! E7 g" k3 G
对该打印机使用plottofile方法,实际输出的是"*.plt"文件(尽管它老老实实地按你程序中的设置把文件的扩展名写成了pdf),用记事本打开生成的所谓PDF文件就可以看到.4 t$ w% S3 f& {% C
2007以上版本自带的"DWG To PDF.pc3"可以打印到文件.
 楼主| 发表于 2011-9-15 10:11:50 | 显示全部楼层 来自: 中国浙江杭州
为什么用"DWG To PDF.pc3"打印,边框那么大
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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