QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
下面代码中,如果使用PLOTTODEVICE方法,是可以打印成功的,但是需要手动输入文件名
. F" a1 M6 Y3 V% @! U$ y/ T4 x
7 a2 @1 ?! W3 H. b7 b5 L9 o我想让程序中自动输出文件名,所以使用了plottofile方法,结果却无法正确输出了,输出的PDF文件打不开0 U" ~1 x3 u; ]- R5 p' A

; F8 c; A: j* ]+ b代码如下,请大虾指点,谢谢
; K. E; X/ H6 x' X5 G
9 x# B, {0 z3 F
  1.    
    " a7 Q% A- p, h$ U) G1 O' t5 q. e
  2.     ThisDrawing.ModelSpace.Layout.RefreshPlotDeviceInfo   '刷新打印设备信息
    4 m5 R! u# u0 o6 |
  3.     ThisDrawing.ModelSpace.Layout.ConfigName = "Adobe PDF"    '设置打印机为虚拟打印机 Microsoft Office Document Image Writer
    # M+ A# @1 T: `0 i' f8 D. L
  4.     ThisDrawing.ModelSpace.Layout.CanonicalMediaName = "A3"    '设置纸型为A3
    % h& x, W; C1 G0 r7 B8 B
  5. '    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result- _( m0 P2 X9 U" d0 R# h
  6. '    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4
    4 P( `- e3 u" R8 o, N
  7. '    RegCloseKey Result+ I) E0 F0 y9 a2 D: `# |1 |
  8.     Dim point1(0 To 1) As Double, point2(0 To 1) As Double/ w% G! U) w2 @: p3 M' M6 l
  9.     Dim path11 As String
    , d, b/ k& f& f1 |0 [7 P' f5 u3 q
  10.     path11 = "D:\123.pdf"5 g9 |; z, \7 O( A% C0 y
  11.     Scal = 39: P; Q9 u/ B% j: p
  12.     point1(0) = 0                                        '安装图17 ?5 g& A4 u) P% L. T
  13.     point1(1) = 07 S) M" f( `  c) `  Q" }
  14.     point2(0) = 420 * Scal
    % b3 |; X* s: M
  15.     point2(1) = 297 * Scal. W* I; U7 |* `+ x) J; I% S0 {
  16.     ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()( P- ?( e# I$ m9 k  d6 T9 M; E0 n! M
  17.     ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()# m2 A$ Z# `; j3 F# O& b5 k1 u
  18.     ThisDrawing.ModelSpace.Layout.PlotRotation = ac90degrees
    + [. H4 f3 A1 V% K9 K
  19.     ThisDrawing.Regen acActiveViewport
    + Q" }4 h5 w7 B" |& I, i- `( Y$ j
  20.     ThisDrawing.Plot.NumberOfCopies = 1
    * N; T7 i- B* q+ A
  21.     ThisDrawing.ModelSpace.Layout.PlotType = acWindow
    # s# n# F) e/ c& w  b
  22.     ThisDrawing.ModelSpace.Layout.StandardScale = acVpScaleToFit- @$ q% }0 C, T7 l# d4 W, j2 j
  23.     ThisDrawing.ModelSpace.Layout.CenterPlot = True
    4 F6 T" K7 h/ `( t: Z
  24.     ThisDrawing.Plot.QuietErrorMode = True
    ! ]! m- V2 }3 u' }
  25.    
    ) j* x& r- e/ \( p0 X
  26.    
    ( \) S. Y2 ]" j2 @9 X& G1 I; \
  27. '    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result
    4 z0 V) f$ @# e! A1 [& l9 L/ Q
  28. '    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4
    ' u+ B( X, D, G) w* L: L
  29. '    RegCloseKey Result$ V/ [* |, y  y7 o* W9 Y
  30.     ThisDrawing.Plot.PlotToFile path119 g* ]# E; W) t* Q: R
  31.     + M; ~, h0 j2 e6 N2 z) j1 C
复制代码
发表于 2011-9-2 21:24:33 | 显示全部楼层 来自: 中国辽宁
1# 157787698
0 t6 u1 @( _0 y$ q: V
下面代码中,如果使用PLOTTODEVICE方法,是可以打印成功的,但是需要手动输入文件名

6 u5 k6 J$ _. L7 ~+ ?/ |5 @6 h4 ?原因在于PDF打印机的设置.+ Y- j' c( ~" l0 X5 c. R
打开它的"打印首选项"对话框,在"Adobe PDF 设置"选项卡下有四个下拉列表框,其中第三个是"Adobe PDF 输出文件夹",你的PDF打印机的该列表框中现在应该显示的是"提示 Adobe PDF 文件名",这就是你每次都要手动输入文件名的原因.
( D* n9 z" B7 J点击该列表框右面的"浏览"按钮,为它赋予一个默认路径,打印时它就会以布局名称为文件名自动保存在默认目录下.5 F! e! |0 P; H( C2 V- O* H
另外,在其下面还有几个复选框,第一个是"查看 Adobe PDF 结果",如果选中了该复选框,每次PDF打印机创建了新文件后都会自动打开.不选中该复选框则不会打开创建的PDF文件
" Q7 x* R8 `* }% i, v
我想让程序中自动输出文件名,所以使用了plottofile方法,结果却无法正确输出了,输出的PDF文件打不开
# Y5 ~' B) S4 D+ y2 I3 _
不是所有的打印机都能打印到文件.这其中就有 Adobe PDF 打印机.3 ^9 ~3 P; x0 o1 k7 o7 s* v
对该打印机使用plottofile方法,实际输出的是"*.plt"文件(尽管它老老实实地按你程序中的设置把文件的扩展名写成了pdf),用记事本打开生成的所谓PDF文件就可以看到.3 A/ j& a# p. A
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 )

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