QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 4027|回复: 3
收起左侧

[求助] VB PlotToFile 生成的PDF文件打印纸质文件时图片模糊问题

[复制链接]
发表于 2015-7-8 11:56:09 | 显示全部楼层 |阅读模式 来自: 中国北京

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

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

x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑
. U; b' h4 W  C$ e6 j8 i, P9 U  Z% h- \
版主及各位朋友:中午好!* K( ]5 H( L: x3 \* \
       8 ^, A2 m5 I4 s6 f
        CAD版本:AutoCAD Electrical 2010
, ]) J# T; K2 U2 H/ S9 z  I* N
+ j8 }8 x2 f9 O, p        我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!* n$ `: T. X2 r( \; X! B! X
        问题如下:, `( d+ Q* z; w/ p6 G
        我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3  打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。5 m1 Q5 e. {# s
' m+ B/ N. c+ ]5 ^( H: p) b7 s
        上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题
5 b6 t6 Z$ K- H6 W5 O; s$ T6 D- p: k0 l" d% k, m2 e
         后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
& ?& R5 D# @" v4 K2 z9 ~6 s         尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)9 f- @6 j2 z% m6 `& z' i
' G8 {" I( ]4 ]1 T/ E: ?
        问题汇总:
1 }& r! D" u  @1 \" W! g        1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?! K4 w6 S7 \" N1 o% V
        2、 “Adobe PDF” 打印机如何设置字体?
2 P! U2 E3 b( f/ D0 Q4 \        注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。
  1. '---------------------------------------------------------------------------------------, [/ h  F9 i& e0 @9 Q
  2. ' Procedure : CreatePDF
    5 C1 D. \7 s; y4 s2 \$ ?  K+ R4 z
  3. ' DateTime  : 2013-11-20
    % W$ n- N- m* o" e: U& Z
  4. ' Author    : xwang! ]$ |8 g% ]% ?! _
  5. ' Purpose   : CAD中DWG图纸导出PDF文件  Q0 U- _4 @2 r0 m# n  T6 z3 `8 J
  6. ' param     : acadDoc: AcadDocument
    % ^7 U/ T. E7 T* I* K3 w$ W
  7. '           : filename:  DWGFile$ e4 c; y6 D6 g" e) l
  8. '           : strPdfFile PdfFile2 B0 D/ M) A" S  g
  9. '           : ConfigName: Acade - DWG To PDF.pc3
    6 y# S: I/ f. _& P/ m+ z
  10. '---------------------------------------------------------------------------------------
    ) Z2 w3 z, F( u
  11. Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer
    " z" T7 S# c& N( J& v

  12. / Z) B$ P$ S5 j: m$ H* Y. n
  13.     Dim PtConfigs As AcadPlotConfigurations
    3 N) A9 l/ `! `! N. A
  14.     Dim PlotConfig As AcadPlotConfiguration! S+ ^5 g+ X- i0 X8 }
  15.     Dim PtObj As AcadPlot, j9 k+ D3 J' U
  16.     Dim BackPlot As Variant
    - O' ^' B4 n) G( Y
  17.    
    % \' T* ?7 Y5 }3 [
  18.     Dim ent As AcadEntity 'Object
    3 |7 N+ x1 c: B! w; g. y. V
  19.     Dim blockRef As AcadBlockReference
    8 N4 F- Y7 Z: l. F
  20.    
    % H" \% l' }7 b: y' B% ?; E  Y
  21. On Error GoTo ErrExit
    ; y+ l- _) r. w% v+ l  k$ ?$ x
  22. 6 A* Y) b; Z$ v: z8 a- m
  23.     Debug.Print "CreatePDF ------------------------------------------------->"- i" i- ?. M/ T, ~# a: l: n! E
  24.     Debug.Print "打印机:" & ConfigName6 r7 A! B% z, p( P; J+ _5 S
  25.     For Each ent In acadDoc.ModelSpace1 ?) N" a% b( s7 r$ p
  26.         If TypeOf ent Is AcadBlockReference Then
    ; Q+ J4 q2 K- e% B
  27.             DoEvents
    " W9 d; v$ Z# c
  28.             Set blockRef = ent5 s" l) m( S$ s, H9 |. ~" h' @
  29.             If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
    : z' }6 o4 I* H/ i0 G' [: O

  30. # |& N' O- y4 _% l) [5 R
  31.                 Debug.Print "块名称:" & blockRef.Name% n  b" a' X% X& e1 W5 [
  32.                 5 M' X2 ]2 s1 u( s
  33.                 '块引用的插入点
    ' k  |4 t. o' b, `0 o$ N
  34.                 Dim insertPoint As Variant+ p2 u9 s) l4 ]2 o$ P: q9 ^
  35.                 insertPoint = blockRef.InsertionPoint
    : v! b( t$ N4 U7 O
  36.                 '放大比例
    6 v0 n3 S8 M0 N+ @
  37.                 Dim xScale, yScale As Integer
    + U; F) ]6 Q4 L* J. S
  38.                 xScale = blockRef.XScaleFactor
    ! V- I' [) l% o6 j+ \
  39.                 yScale = blockRef.YScaleFactor
    % a' Y; \: s; o0 h# W
  40.                 8 {& I" _" Y2 i
  41.                 acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
    1 e! D6 b8 O5 _+ C  L6 c" G
  42.                 Set PtObj = acadDoc.Plot0 C9 L/ I. I1 Q7 I. d" P" _
  43.                 Set PtConfigs = acadDoc.PlotConfigurations2 h" Z/ ?# S# l
  44. * h9 n6 \: O- k" u9 C) ~
  45.                 PtConfigs.Add "PDF", False) m. [4 D& Z) i
  46.                 Set PlotConfig = PtConfigs.Item("PDF")
    - R8 F3 r) |' U( ?" R
  47.                 PlotConfig.StandardScale = acScaleToFit
    8 Y+ {! M/ [# r# g9 P
  48.                                 / H1 [, e8 Q$ |7 I3 C, ^: P
  49.                 PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"! A9 x9 N: k' n) J& @  O# }
  50.                 'ANSI_A_(8.50_x_11.00_Inches), S& t4 g3 V& ~$ V' b
  51.                 PlotConfig.RefreshPlotDeviceInfo
    7 K5 M+ q. N' s  {# g' U" v6 n1 m
  52. ' Y/ Q) e: B. `8 u. i- y
  53.                 Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet
    * P5 H- n) x1 c: E
  54.                 Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    " ^6 h& N0 |3 o% j6 u
  55.                 # P8 ]2 w( w3 ^/ m+ n& |% t' s& {
  56.                 acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式
    ( M# l; D* ~+ a* y) L& t6 q

  57.   T9 D  l2 x/ C' a$ {
  58.                 '使用图形文件的线宽3 S' t3 Q! B  R) n
  59.                 PlotConfig.PlotWithLineweights = True" O5 W$ k. }4 F/ `' R- i" G5 P
  60.                 '是否启用打印样式
    - V5 u0 W6 X1 m! t8 H8 r9 F
  61.                 PlotConfig.PlotWithPlotStyles = True, C# u% d, q+ S1 |! F7 s
  62. ) ?  G+ R) J; Q/ Q( H
  63.                  '宽高基数
    ' _1 t% c4 Q5 @- |
  64.                 Dim width, height As Double$ @2 m1 \4 R- k- M) V
  65.                 If blockRef.Name = "ACE A3块" Then
    0 O# ~5 W" p4 {8 v) c0 O
  66.                     width = 4206 l* R" X- j# m+ G" f* f$ l
  67.                     height = 297
    ( |" C& x  a5 k% O0 E0 b" e) W
  68.                     acadDoc.ActiveLayout.PlotRotation = ac90degrees9 C- C/ [6 V8 e! K3 X
  69.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"9 r/ D# R, ~5 `3 o: S
  70.                 ElseIf blockRef.Name = "ACE A4块" Then% X+ L, A; V  X; P! R- r
  71.                     width = 210" ]% Q# o4 n6 a+ d
  72.                     height = 297
    5 t5 [6 v4 l! ^& X6 |7 p# |
  73.                     acadDoc.ActiveLayout.PlotRotation = ac0degrees
    8 e$ n3 X0 V6 t# w- M$ G. v. ]
  74.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)": @! e9 ~  ?% k; K) o( m' R7 |  h
  75.                 End If# s  D4 T; k; x3 u) E4 F. _! A
  76.                   
    4 U5 g# {+ K+ A* J8 D
  77.                 '打印区域* S# x1 e2 r* A5 S$ Q4 f
  78.                 Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double0 D" G& \0 ^5 l" ]* |
  79.                 LowerLeft(0) = insertPoint(0)
    5 p2 O4 L0 n, Z0 }5 |, c9 g
  80.                 LowerLeft(1) = insertPoint(1)
    1 T9 m/ p5 x; |& m6 O& i. L
  81.                 UpperRight(0) = insertPoint(0) + width * xScale3 K# q+ e! a. |6 m) D3 @
  82.                 UpperRight(1) = insertPoint(1) + height * yScale
    ; V1 J6 W" M1 i0 T
  83.                 ) c! H+ q8 V0 D$ H  A& {) h5 D* v
  84.                 '设置定义要打印的布局范围的坐标0 B  ~6 H) k9 n& W; z
  85.                 acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight
    $ y; B5 e* U1 A& `3 i
  86.                 '指定布局或打印配置的类型
    8 P6 i; N4 r$ X& y3 [" j$ l2 `8 N
  87.                 acadDoc.ActiveLayout.PlotType = acExtents
    ) x( Y2 [: `8 K: k2 ~
  88.                
    3 I8 d- Q+ w1 B5 o) ^! |3 r# j
  89.                 BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")
    " m2 w& S+ O- P6 o: T6 f
  90.                 acadDoc.SetVariable "BACKGROUNDPLOT", 08 B- `, P% z8 {# K  \" w
  91.                 PlotConfig.RefreshPlotDeviceInfo
    6 ^( \* P' C* u, Y# ?
  92.                 ; o/ A: W! {: \  @& D4 _
  93.                 Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet$ P; ]' M& a2 N! n9 ^8 O+ O
  94.                 Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    ' h! \9 A6 @6 o; s
  95.                 Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
    - f* [; c7 f4 a/ }" H
  96.                 Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName
    4 R1 f8 m, l7 Z/ H6 o. ?+ d; a8 V+ n
  97.                
    : G7 ]! y: F/ t9 c5 l
  98.                 strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")
    ; g  D5 S0 b1 n9 ?7 i0 a4 k5 X
  99.                 Debug.Print "输出位置:" & strPdfFile% q4 Z, x% Y: X+ s2 M# ~4 l
  100. 5 N6 @; j& X1 S& T! x6 B# w9 b. u; p; q
  101.                 'Now you can use the PlotTofile method
    " ?: u  W" K) W3 I8 ~/ \
  102.                 If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then
    $ D! z5 K+ }8 u/ u! `+ m2 D
  103.                      Debug.Print "PDF Was Created"1 E  C4 J2 O. N2 D0 U7 ^; u
  104.                      Debug.Print "PDF Was Created"
    4 }& n9 J5 [4 a' X
  105.                 Else
      @3 G. K  D/ l7 S& |, j
  106.                      Debug.Print "PDF Creation Unsuccessful!"$ Q# C  a. i; s9 V* \" ^- Q
  107.                      Debug.Print "PDF Creation Unsuccessful!"( S& P9 d5 `, d  j6 J8 x/ E' E' r
  108.                 End If1 k9 c$ X8 ]5 X* m7 u# k, S
  109.                 PtConfigs.Item("PDF").Delete
    - f3 T( ~& C, t( \' |5 v6 i7 D
  110.                 Set PlotConfig = Nothing
    # G# F' c4 m- c4 R1 v
  111.                 acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot
    6 _( u0 H8 w7 R) M
  112.                 + P4 v! I+ C# j% A! H; x! p- q
  113.                 Debug.Print "CreatePDF ok!"
    " ^& I0 {) h1 ~+ y1 N# z3 T
  114.             End If& g  a0 V( |' n3 t
  115.         End If
    - v. l% _/ g( @- E
  116.         DoEvents5 A, M1 _2 U( v& L' h3 Q
  117.     Next ent
    + b* r2 s& o. A7 G! ~# k
  118.     Debug.Print "CreatePDF -------------------------------------------------<"
    # z. q2 x2 r$ X4 H  o6 T7 O. w
  119.     Exit Function$ c9 [+ \# i" Q- C8 e8 Z
  120.    
    0 k  d- U( t- u* G- y- O$ q
  121. ErrExit:* B$ V5 p6 ?8 [4 B9 U; ~
  122.     CreatePDF2 = -1
    2 U5 @# S9 g) w) a2 X4 p$ @% C
  123.     Debug.Print "CreatePDF Error:" & Err.Description
    * G$ w  B& s4 f( L
  124.     MsgBox "CreatePDF error:" & Err.Description) |2 m& h/ N' p/ j6 x
  125. End Function
复制代码
仅依靠系统字体;不使用文档字体.png
发表于 2015-7-8 20:57:19 | 显示全部楼层 来自: 中国辽宁营口
本帖最后由 woaishuijia 于 2015-7-8 21:13 编辑 1 h; N4 H" m1 F$ n5 n  i& C6 Z
( ]/ j7 [# E! }% s/ B' O9 {4 y; y
在"页面设置"对话框的"打印机/绘图仪"框架中的"名称"下拉列表中选择"DWG TO PDF.PC3"打印机
: j2 `7 s9 R( i+ A- D Untitled-1.gif % a/ w: v* y7 N
点击"名称"下拉列表框右侧的"特性"按钮,弹出"绘图仪配置编辑器"对话框.3 ~6 |' h+ @3 I& W
在"设备和文档设置"选项卡的树形目录中点击"自定义特性",其下方显示"访问自定义对话框"框架.
6 Z6 N/ D% D, f* ~9 [/ ~* b$ g; n Untitled-2.gif
0 a- J- Z$ ?. r* G* @, d再点击"访问自定义对话框"框架中的"自定义特性"按钮,弹出"DWG TO PDF 特性"对话框
& `! F, j; o( }: y( M" | Untitled-3.gif
  S  t- Q7 j2 E  `! S* ]8 i* i8 d+ N. ~返回到"页面设置"对话框,在"打印机/绘图仪"框架的"名称"下拉列表中选择"ADOBE PDF"打印机7 l  U$ H: T& m
Untitled-4.gif
" E. ]/ [; l4 x$ j6 Q9 `) x继续前面的步骤# {2 f) [+ p0 H$ s! e
Untitled-5.gif
2 M! ?6 h+ n. }1 h! Y# q Untitled-6.gif
 楼主| 发表于 2015-7-10 22:47:02 | 显示全部楼层 来自: 中国辽宁大连
@woaishuijia 版主/ B5 p- U  n! d( R8 p& @
非常感谢您的帮助,过程中遇到的2个问题已经解决。
" ^+ m4 u( T& p- c3 X: T/ f[问题1] 、PDM生成的PDF图纸中OLE引用(由Excel中copy过来的表格)图片、公司LOGO图片模糊。
' k/ L+ m! }5 L+ Y解决方案:在对PDF文件打印时,取消打印界面“作为图像打印”的复选框后再打印就不会存在模糊的问题。$ M7 V5 s, W0 F5 `

, O1 Y2 p, z7 Z3 K! p[问题2]、打印PDF文件时提示“无法找到或创建字体 TimesNewRomanPSMT,XXXXXX”。 . r4 l' y( F7 c' M8 L
解决方案:原因是由于客户端安装的pdf查看工具版本影响,经过测试安装AdbeRdr11000_zh_CN.exe版本在打印时就没有问题。

评分

参与人数 1三维币 +10 收起 理由
woaishuijia + 10 技术讨论

查看全部评分

发表于 2016-8-3 09:03:24 | 显示全部楼层 来自: 中国广东佛山
谢谢分享,我的问题也解决了。哈哈
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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