QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
下面代码中,如果使用PLOTTODEVICE方法,是可以打印成功的,但是需要手动输入文件名9 q, U) n4 z+ f1 z) S5 _+ y

3 v7 O* f! q9 i3 q2 |9 ?% q我想让程序中自动输出文件名,所以使用了plottofile方法,结果却无法正确输出了,输出的PDF文件打不开* u9 E2 E. i9 q2 A" J5 l
: S& ^  D& |/ c& u* e" t
代码如下,请大虾指点,谢谢
; u6 g! d& p: X# x3 I/ F( j) v$ t5 d* J* C; L! j
  1.    
    3 z4 v! z: g- e. \- b; B
  2.     ThisDrawing.ModelSpace.Layout.RefreshPlotDeviceInfo   '刷新打印设备信息
    5 L+ K0 ^  n4 J' I* j% P
  3.     ThisDrawing.ModelSpace.Layout.ConfigName = "Adobe PDF"    '设置打印机为虚拟打印机 Microsoft Office Document Image Writer
    4 D, }+ \9 b6 j% P0 i6 l" F
  4.     ThisDrawing.ModelSpace.Layout.CanonicalMediaName = "A3"    '设置纸型为A38 ]6 {, l1 Q) n
  5. '    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result+ c. @* O$ e" f: K
  6. '    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4
    " [! C* v. N# A7 f6 V* v, j
  7. '    RegCloseKey Result
    # L  t9 d& i. ~) ~
  8.     Dim point1(0 To 1) As Double, point2(0 To 1) As Double/ O: G) ]& b% X: G/ s
  9.     Dim path11 As String& J5 U  a9 F0 l0 M
  10.     path11 = "D:\123.pdf"
    8 f2 A* D9 P, w4 g, @0 _& D0 c
  11.     Scal = 39
    $ s: u9 Q' F9 y: R! G9 w+ u# D2 b
  12.     point1(0) = 0                                        '安装图1% P, m2 s7 P0 K. |- k5 Z; l
  13.     point1(1) = 09 }: s$ E, p- h4 A1 x7 u0 T
  14.     point2(0) = 420 * Scal
    ' X1 K* p3 U( a6 T% N6 f
  15.     point2(1) = 297 * Scal
    5 h& g* u5 o2 _: ]4 y
  16.     ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()
    # ]; F' k* Z. J8 u, l4 |
  17.     ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()
    5 @. U; x  Z) J& |5 I& J  L/ j; T
  18.     ThisDrawing.ModelSpace.Layout.PlotRotation = ac90degrees
    0 S- K, M4 {1 m# l6 {
  19.     ThisDrawing.Regen acActiveViewport, {1 h) e, T! ]& ^7 L/ q
  20.     ThisDrawing.Plot.NumberOfCopies = 16 b& P2 E5 D5 C# L" n
  21.     ThisDrawing.ModelSpace.Layout.PlotType = acWindow! G6 t0 M7 h9 W' j) ?
  22.     ThisDrawing.ModelSpace.Layout.StandardScale = acVpScaleToFit
    + [6 i7 x! H# l# G% O5 U
  23.     ThisDrawing.ModelSpace.Layout.CenterPlot = True) o! Q- `1 J8 P$ t% D) A
  24.     ThisDrawing.Plot.QuietErrorMode = True
    " }7 I' ^2 T1 p
  25.     7 C- n! S$ k, J, H
  26.    
      M, f9 C! V+ Y3 c0 d* E
  27. '    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result9 I: c7 ]" X5 D: v& w
  28. '    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4& I: n- X+ ^3 g$ \1 F5 t
  29. '    RegCloseKey Result4 _; y/ K- Y2 M3 \( M2 P
  30.     ThisDrawing.Plot.PlotToFile path11+ \, Q0 D7 Y( m- _
  31.    
      F- A. ^7 U' u. G0 s- V; s
复制代码
发表于 2011-9-2 21:24:33 | 显示全部楼层 来自: 中国辽宁
1# 157787698 - t/ b1 d8 ^- O: H+ `: o
下面代码中,如果使用PLOTTODEVICE方法,是可以打印成功的,但是需要手动输入文件名
" }) u' a( n9 i8 m! `/ ]  _9 d6 L
原因在于PDF打印机的设置.
) a: w* {# ?' l- e打开它的"打印首选项"对话框,在"Adobe PDF 设置"选项卡下有四个下拉列表框,其中第三个是"Adobe PDF 输出文件夹",你的PDF打印机的该列表框中现在应该显示的是"提示 Adobe PDF 文件名",这就是你每次都要手动输入文件名的原因.
2 D- U$ }7 [8 Q1 Z点击该列表框右面的"浏览"按钮,为它赋予一个默认路径,打印时它就会以布局名称为文件名自动保存在默认目录下.
7 O4 ~$ V8 k; H另外,在其下面还有几个复选框,第一个是"查看 Adobe PDF 结果",如果选中了该复选框,每次PDF打印机创建了新文件后都会自动打开.不选中该复选框则不会打开创建的PDF文件
. G; n$ w+ L; ^$ V& h3 f. g2 i0 A4 y
我想让程序中自动输出文件名,所以使用了plottofile方法,结果却无法正确输出了,输出的PDF文件打不开

7 v/ H& `4 R. V) q& V不是所有的打印机都能打印到文件.这其中就有 Adobe PDF 打印机.3 Q( |8 k) @& O' b1 R4 _! Z* ?9 C
对该打印机使用plottofile方法,实际输出的是"*.plt"文件(尽管它老老实实地按你程序中的设置把文件的扩展名写成了pdf),用记事本打开生成的所谓PDF文件就可以看到.3 \4 M1 I( d7 ?' R3 q
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 )

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