QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
6天前
查看: 10420|回复: 2
收起左侧

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

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

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

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

x
下面代码中,如果使用PLOTTODEVICE方法,是可以打印成功的,但是需要手动输入文件名
8 x- G: V4 s1 k/ [7 G! d: ?8 e- m: D* d" w6 T; T; a
我想让程序中自动输出文件名,所以使用了plottofile方法,结果却无法正确输出了,输出的PDF文件打不开
  H6 M7 S8 \6 {/ }4 ?# m2 ]6 c2 y! y4 O
代码如下,请大虾指点,谢谢5 J/ B8 v0 M: R, d: n& ~: Z

- H! K5 A+ {  g+ J6 t  z; R) p+ _
  1.    
    % D1 T. t+ `+ }1 ~; u
  2.     ThisDrawing.ModelSpace.Layout.RefreshPlotDeviceInfo   '刷新打印设备信息
    2 r2 h9 ]& R% G& B
  3.     ThisDrawing.ModelSpace.Layout.ConfigName = "Adobe PDF"    '设置打印机为虚拟打印机 Microsoft Office Document Image Writer3 \3 \! s; E: x6 N
  4.     ThisDrawing.ModelSpace.Layout.CanonicalMediaName = "A3"    '设置纸型为A3
    8 ^+ }2 b% v9 ^4 D2 v0 s6 I; P" Y3 L
  5. '    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result
    5 P% X% o+ I' s) Z; a
  6. '    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4) Z  x, H/ c: h$ z2 B% g
  7. '    RegCloseKey Result
    5 n& e7 B4 w* F+ |& |! F6 F
  8.     Dim point1(0 To 1) As Double, point2(0 To 1) As Double* M' t5 L: T2 v5 K! i: c% `  r$ H
  9.     Dim path11 As String
    7 W+ E* R: K3 Z# h6 i4 M% ~  d  {
  10.     path11 = "D:\123.pdf"
    $ f7 T2 }7 r+ ?
  11.     Scal = 39- F5 d* i5 T: y5 ?
  12.     point1(0) = 0                                        '安装图1$ B, z( {$ M( B! _# J% a
  13.     point1(1) = 0
      @7 P9 s  A+ L" _: Z; M5 W
  14.     point2(0) = 420 * Scal( O" k8 V! N) r5 K) G
  15.     point2(1) = 297 * Scal8 \3 H9 M8 l- v/ f5 h1 v" ^9 d
  16.     ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()
    / m) B0 O' z6 J1 ?& ^5 [5 k
  17.     ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()
    $ S9 y7 x- Q2 @# e  q5 D" _6 Z; F
  18.     ThisDrawing.ModelSpace.Layout.PlotRotation = ac90degrees$ m' k/ C, M# V2 W
  19.     ThisDrawing.Regen acActiveViewport. b, P; h7 `; n9 |4 k: `$ v  N
  20.     ThisDrawing.Plot.NumberOfCopies = 1
    , `: V; A3 T2 r7 k- N$ P
  21.     ThisDrawing.ModelSpace.Layout.PlotType = acWindow3 L, f1 R( D: G' k% k
  22.     ThisDrawing.ModelSpace.Layout.StandardScale = acVpScaleToFit" P' u. Y7 c/ }5 Q* T' V2 U! z
  23.     ThisDrawing.ModelSpace.Layout.CenterPlot = True
    8 @9 P3 e9 V$ l0 _4 k
  24.     ThisDrawing.Plot.QuietErrorMode = True
    " ?; x8 y+ b0 u1 o2 R7 C0 r: K
  25.     # o# n! X" l' G- H: Y
  26.    
    9 b4 y% e& h( c
  27. '    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result
    $ j, V! y+ n6 Y
  28. '    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4% x+ b& L6 A: f6 g' o4 L$ d
  29. '    RegCloseKey Result
    : @4 ^& Y" k+ I
  30.     ThisDrawing.Plot.PlotToFile path111 h5 n$ o  S, y
  31.    
    * d5 ]' F# r- x6 |/ J# Z; y9 y
复制代码
发表于 2011-9-2 21:24:33 | 显示全部楼层 来自: 中国辽宁
1# 157787698 $ P: s+ Q7 @5 M# J
下面代码中,如果使用PLOTTODEVICE方法,是可以打印成功的,但是需要手动输入文件名

" A; J8 `! \) J原因在于PDF打印机的设置.# d; ~6 U6 ?) P, ^
打开它的"打印首选项"对话框,在"Adobe PDF 设置"选项卡下有四个下拉列表框,其中第三个是"Adobe PDF 输出文件夹",你的PDF打印机的该列表框中现在应该显示的是"提示 Adobe PDF 文件名",这就是你每次都要手动输入文件名的原因.6 g1 m' K( [  h: a+ y; K
点击该列表框右面的"浏览"按钮,为它赋予一个默认路径,打印时它就会以布局名称为文件名自动保存在默认目录下.
# |% j! m$ f0 j% r; i另外,在其下面还有几个复选框,第一个是"查看 Adobe PDF 结果",如果选中了该复选框,每次PDF打印机创建了新文件后都会自动打开.不选中该复选框则不会打开创建的PDF文件; P2 A3 r5 M. Q
我想让程序中自动输出文件名,所以使用了plottofile方法,结果却无法正确输出了,输出的PDF文件打不开
7 l; G6 D9 S+ h3 \4 X- V! O  [5 x
不是所有的打印机都能打印到文件.这其中就有 Adobe PDF 打印机.
' Z( T. Y  m, y% S对该打印机使用plottofile方法,实际输出的是"*.plt"文件(尽管它老老实实地按你程序中的设置把文件的扩展名写成了pdf),用记事本打开生成的所谓PDF文件就可以看到.& c& H% N. B6 n% |' p' 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 )

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