QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
下面代码中,如果使用PLOTTODEVICE方法,是可以打印成功的,但是需要手动输入文件名
& ^4 A/ m. F: \* _. O5 j5 J' _8 b' j. M3 }9 Q0 N+ A) m
我想让程序中自动输出文件名,所以使用了plottofile方法,结果却无法正确输出了,输出的PDF文件打不开# p% X, C. W, ?) P

6 y6 r& f1 i& V! [( g3 `代码如下,请大虾指点,谢谢
* s9 U% P. D6 f! W) ?! W: N$ z
' M; D/ P2 w3 J4 P2 ?
  1.    
    ( K7 @" U0 h5 H8 k
  2.     ThisDrawing.ModelSpace.Layout.RefreshPlotDeviceInfo   '刷新打印设备信息1 u4 |% F- R+ }! ]9 N; D: B
  3.     ThisDrawing.ModelSpace.Layout.ConfigName = "Adobe PDF"    '设置打印机为虚拟打印机 Microsoft Office Document Image Writer
    0 u: ]" W% q2 H0 C9 u, ^2 f/ |
  4.     ThisDrawing.ModelSpace.Layout.CanonicalMediaName = "A3"    '设置纸型为A3
    " `: q8 [" a) \9 ?
  5. '    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result$ y- w1 X: A% R& [6 M2 ~
  6. '    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 42 u1 j8 \% \' d2 K2 B/ V% E3 K
  7. '    RegCloseKey Result0 q  D+ y0 D$ W% Q/ I' L
  8.     Dim point1(0 To 1) As Double, point2(0 To 1) As Double
    7 u3 o, e7 w7 i( t4 {0 B; |
  9.     Dim path11 As String9 r! {$ g! t& L2 I$ p
  10.     path11 = "D:\123.pdf"
    1 V: n0 Z9 K  q
  11.     Scal = 39  u  y6 e1 o4 P( q0 ]2 m6 ?* Y3 B
  12.     point1(0) = 0                                        '安装图18 |( s7 p; a/ Q% l' H0 P  b
  13.     point1(1) = 04 B) h$ R+ J2 }/ J" s  L8 e6 x
  14.     point2(0) = 420 * Scal, h5 e& N: Q; Q. ?- u$ N
  15.     point2(1) = 297 * Scal
    $ N' s+ i9 C/ }2 c
  16.     ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()
    6 O! e' V& i2 M9 i& V
  17.     ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()
    0 w$ r1 H" i2 C* O* R0 M' _2 \( Y/ X
  18.     ThisDrawing.ModelSpace.Layout.PlotRotation = ac90degrees
    * e2 b" c2 t0 a% \7 d5 D5 N
  19.     ThisDrawing.Regen acActiveViewport
    8 l0 y  t- v3 y9 ?. G
  20.     ThisDrawing.Plot.NumberOfCopies = 1
    ; U/ Y7 W# d4 C' O
  21.     ThisDrawing.ModelSpace.Layout.PlotType = acWindow
    . ?6 w/ a: y( d
  22.     ThisDrawing.ModelSpace.Layout.StandardScale = acVpScaleToFit
    . Z+ J& _, w' |8 a
  23.     ThisDrawing.ModelSpace.Layout.CenterPlot = True
    9 _$ B) |$ l( T( w8 k; J
  24.     ThisDrawing.Plot.QuietErrorMode = True1 d# o2 T4 R& i: P! F
  25.    
      N' L2 u* {$ l( ^3 P9 L
  26.     1 {% g! \! {9 r& \4 w
  27. '    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result2 j5 v: z; g5 Z" ^
  28. '    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4- ~1 e  P) G; ], h
  29. '    RegCloseKey Result/ S$ r2 W9 h* W# [& C+ i# L1 p
  30.     ThisDrawing.Plot.PlotToFile path11
    : S: M" g$ S- U5 h9 J" j$ ]6 L
  31.    
    " T7 R. F' N  ?5 Q/ x
复制代码
发表于 2011-9-2 21:24:33 | 显示全部楼层 来自: 中国辽宁
1# 157787698 8 A+ @- }3 e0 O* S' V& _
下面代码中,如果使用PLOTTODEVICE方法,是可以打印成功的,但是需要手动输入文件名
; [2 U7 h  C& J& w$ t! h/ m
原因在于PDF打印机的设置.' R% o7 j5 |' y/ {; e
打开它的"打印首选项"对话框,在"Adobe PDF 设置"选项卡下有四个下拉列表框,其中第三个是"Adobe PDF 输出文件夹",你的PDF打印机的该列表框中现在应该显示的是"提示 Adobe PDF 文件名",这就是你每次都要手动输入文件名的原因.. H2 Z/ P3 p4 [, N8 r: d
点击该列表框右面的"浏览"按钮,为它赋予一个默认路径,打印时它就会以布局名称为文件名自动保存在默认目录下.4 T7 e9 u4 L; m# P1 y
另外,在其下面还有几个复选框,第一个是"查看 Adobe PDF 结果",如果选中了该复选框,每次PDF打印机创建了新文件后都会自动打开.不选中该复选框则不会打开创建的PDF文件# l: r* _: N( a( K4 h) C
我想让程序中自动输出文件名,所以使用了plottofile方法,结果却无法正确输出了,输出的PDF文件打不开
3 t7 `8 W4 C2 T4 {
不是所有的打印机都能打印到文件.这其中就有 Adobe PDF 打印机.
) p* ]4 |1 O* h! R对该打印机使用plottofile方法,实际输出的是"*.plt"文件(尽管它老老实实地按你程序中的设置把文件的扩展名写成了pdf),用记事本打开生成的所谓PDF文件就可以看到.& Q6 J5 U/ ~) q. \- j
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 )

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