QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 3921|回复: 3
收起左侧

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

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

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

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

x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑
- M& _1 ?: p9 F" ^# E  z7 o- f4 r9 N8 W: w
版主及各位朋友:中午好!$ ^$ k7 W, H& ]- a5 N, [4 {1 K! \
      
/ n+ P% P* x* \1 o+ q2 F: B        CAD版本:AutoCAD Electrical 2010) P& I, a5 X# l% Y, ^' ]
0 Y% H) ^* {/ s1 g
        我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!
1 }9 ^7 G; J& p        问题如下:* E+ ~/ k! A% x+ G
        我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3  打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。+ i6 o$ g, b) M- |2 G4 X
( \9 }/ m4 t& {& z7 p. J
        上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题
2 D5 E1 o  x) ?) J: M5 k
+ W  D; {6 p4 W( ?8 l5 e: U" m         后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
' z% z! x( G2 m- n8 \% }         尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
5 S) R: w$ M$ Z& f: E+ g9 Z) V- U" k7 p
        问题汇总:- Q" G4 K# O, z5 R, f
        1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?1 ~5 H1 S( w2 ?/ |: x# H
        2、 “Adobe PDF” 打印机如何设置字体?  L7 n. U( e8 ^0 _4 X' h# P0 g
        注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。
  1. '---------------------------------------------------------------------------------------
    ' f% |5 Y5 s+ W4 Y
  2. ' Procedure : CreatePDF& `: @6 y1 T& I! w$ s- q( Y; ?( ^
  3. ' DateTime  : 2013-11-20
    0 Q) m) f& |( o: `6 q# Z, Q' z
  4. ' Author    : xwang
    8 Q8 d5 E! b: O
  5. ' Purpose   : CAD中DWG图纸导出PDF文件
    0 E: W" X$ i! w' ?1 N( @- E
  6. ' param     : acadDoc: AcadDocument
    7 i& m; L- g( W0 X6 F9 A* R) W
  7. '           : filename:  DWGFile
    - K) d" R' `+ t# ?7 Q0 B
  8. '           : strPdfFile PdfFile8 d. H4 S5 J1 \0 t6 _
  9. '           : ConfigName: Acade - DWG To PDF.pc3# j& k* F$ D9 _! o
  10. '---------------------------------------------------------------------------------------- |! Q# Z: [% Z: ^* h# G9 v$ y6 q
  11. Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer
    . ^7 Y1 X- k- O! \2 ~
  12. 6 ]+ p) e& f" E0 N- p, q. H$ R: S/ q
  13.     Dim PtConfigs As AcadPlotConfigurations
    + l( p6 c5 e+ R. L7 K* M
  14.     Dim PlotConfig As AcadPlotConfiguration
    - u; u- U* {+ i; W  s+ B
  15.     Dim PtObj As AcadPlot8 a; W( z2 Y( K2 i4 x
  16.     Dim BackPlot As Variant: x+ a1 B) c  c; x
  17.     # g, l6 d2 n3 m3 S
  18.     Dim ent As AcadEntity 'Object
    8 y5 \( f" C2 e& p% e$ ~9 A1 L
  19.     Dim blockRef As AcadBlockReference+ r  v' T2 j  o0 m$ ~
  20.    
      w- e: d7 o9 q+ F
  21. On Error GoTo ErrExit
    0 d( @, A- r' `+ `
  22. . h5 X5 f' `( |9 l" q' U
  23.     Debug.Print "CreatePDF ------------------------------------------------->"
    # W4 n; f7 y& L: Y% V
  24.     Debug.Print "打印机:" & ConfigName
      |+ P7 n; W! H2 b" w- t; [7 g; O
  25.     For Each ent In acadDoc.ModelSpace
    % ^" T: e$ |& m
  26.         If TypeOf ent Is AcadBlockReference Then, Z8 S: T1 @! I4 G. a
  27.             DoEvents
    ( T' Q. D. I/ j# c
  28.             Set blockRef = ent
    5 ?% T! N9 r' u6 ]. p
  29.             If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
      L) q- ]! A, `/ O2 M, o1 ]
  30. - |, D2 e1 D! |
  31.                 Debug.Print "块名称:" & blockRef.Name
    # B9 c+ ?; c3 I& C
  32.                 2 O4 o$ W, G* d+ \$ Q5 M$ Z
  33.                 '块引用的插入点
    : {; q9 u9 S9 C: ^0 A, Q. b& Y
  34.                 Dim insertPoint As Variant
    " |6 C& y7 v% p
  35.                 insertPoint = blockRef.InsertionPoint
    / f0 x6 F3 l" G: W$ y
  36.                 '放大比例
    * [. ?# |2 o' I2 y% N$ K+ q
  37.                 Dim xScale, yScale As Integer
    9 A& G3 ~- W) j& H, k3 \
  38.                 xScale = blockRef.XScaleFactor  r9 J; N- J1 Q% ?* k; y; w
  39.                 yScale = blockRef.YScaleFactor
    8 d) Z# q* _2 U, `
  40.                 % S" B9 E6 A6 c, Y! C8 F1 @0 r
  41.                 acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"( i1 Z3 Y9 {3 ^  ^: q1 R
  42.                 Set PtObj = acadDoc.Plot
    * ?+ j% N+ r9 p" v4 T
  43.                 Set PtConfigs = acadDoc.PlotConfigurations
    , M5 }+ H0 S! d1 w/ n: M) H
  44. * N0 J: l. K/ ?4 L2 h
  45.                 PtConfigs.Add "PDF", False7 G( C: _5 ~+ z+ C/ f/ D  L0 V
  46.                 Set PlotConfig = PtConfigs.Item("PDF")
    9 s& w( Q- F* c& f( b
  47.                 PlotConfig.StandardScale = acScaleToFit4 X% z! o& [. i  \
  48.                                 
    , B, H, @% k" o! b( G
  49.                 PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"& P4 h8 P! a" C! `+ S. P
  50.                 'ANSI_A_(8.50_x_11.00_Inches); ~- k& ~& F" N; B3 A# _
  51.                 PlotConfig.RefreshPlotDeviceInfo
    2 }% `8 E1 K5 l

  52. 0 i  J, |0 k; p& p- [: L. r+ C
  53.                 Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet$ k9 t" i- L, r/ j& f. H. n  z
  54.                 Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    / f7 @* m! z1 j5 e- {) N0 W
  55.                 2 G" z7 M; B( R% [* d) L
  56.                 acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式
      ^# x% i' v7 ?/ r

  57. 9 i: m# e/ [( _/ X& |
  58.                 '使用图形文件的线宽; B$ X0 S% L% @0 a& ^
  59.                 PlotConfig.PlotWithLineweights = True! p5 _: E4 F+ ~7 W+ t5 a
  60.                 '是否启用打印样式
    " ^0 f5 r1 V! T8 ~& V9 j
  61.                 PlotConfig.PlotWithPlotStyles = True
    + H  m7 d& N# g7 h/ z1 Z3 T

  62. 5 _9 u! ^1 @9 X  }. B6 o- Y
  63.                  '宽高基数
    : _5 P) ^' Z+ Q# n; M0 s3 O
  64.                 Dim width, height As Double
    ! l9 `6 b+ f/ Y3 N( A) W/ i% E! F
  65.                 If blockRef.Name = "ACE A3块" Then/ p6 a# [7 a# [
  66.                     width = 4200 o7 B" u2 S7 N: g+ s$ X5 [6 `- c4 m
  67.                     height = 297
    9 X1 W6 j+ @$ d7 E( W# E. h
  68.                     acadDoc.ActiveLayout.PlotRotation = ac90degrees: g$ y& ~9 p' L3 R  q' N
  69.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"
    % I4 o9 h' {! @" m7 B5 |7 X- N
  70.                 ElseIf blockRef.Name = "ACE A4块" Then
    $ D: z, j. K  J8 u: b
  71.                     width = 210
    . S+ q" H. K4 C5 _2 ~8 `; T3 [( V& i
  72.                     height = 297- X, x2 x4 Z- A5 m* L# d3 o
  73.                     acadDoc.ActiveLayout.PlotRotation = ac0degrees
    . z' T7 U5 L. f) U/ E! j$ X
  74.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"
    ( Z$ l# p% }! S
  75.                 End If' S3 Z( ]' g* w% p
  76.                    8 g3 G* c) t8 T( F( F* E
  77.                 '打印区域
    - t: [8 ]3 B) g
  78.                 Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double
    2 \% ?! V! \1 c. M8 F
  79.                 LowerLeft(0) = insertPoint(0)
    # ^" ^. g2 T$ H! a9 t
  80.                 LowerLeft(1) = insertPoint(1)4 {8 q6 X, ^5 ]  t3 r4 C
  81.                 UpperRight(0) = insertPoint(0) + width * xScale4 n( E0 C" s, M& h# x! _% t. C
  82.                 UpperRight(1) = insertPoint(1) + height * yScale
    3 G3 \2 [6 k4 j+ X& g
  83.                 ( r0 m, Q7 u8 B8 x4 x: n
  84.                 '设置定义要打印的布局范围的坐标
    ! u% Q: Y8 [6 O1 `3 h
  85.                 acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight
    : v/ G& W6 m2 J$ x
  86.                 '指定布局或打印配置的类型
    1 C& [2 b1 Y: k* a7 `
  87.                 acadDoc.ActiveLayout.PlotType = acExtents; i" [) O  h" i/ }& g8 d
  88.                
    $ o: _0 t( w4 J/ e: E
  89.                 BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")7 Y% J$ d+ Z2 e
  90.                 acadDoc.SetVariable "BACKGROUNDPLOT", 0
    , {& V( B$ h7 \: }
  91.                 PlotConfig.RefreshPlotDeviceInfo
    / z+ r: B# U: u
  92.                
    # P2 F+ b# i9 ^. p* @( a2 J
  93.                 Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet
    ( }* H8 V3 Y& }4 Y6 K( L
  94.                 Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName) Z: z4 j* c* u4 A+ k
  95.                 Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
    7 u) j* \7 y( F. j2 w- ^, d
  96.                 Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName
    & G# g) R% F  i- D$ e& _
  97.                
    2 J' S$ Q. N  y* ]
  98.                 strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")
    & n" V5 F% K8 u) |5 c+ N
  99.                 Debug.Print "输出位置:" & strPdfFile
    7 N- d! V2 W# T& @$ @( R8 F
  100. : W2 E6 k) r' F# d  P; O' q
  101.                 'Now you can use the PlotTofile method
    ) K/ l3 x4 Z9 ^: {
  102.                 If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then
    / z/ U2 E) ~% M; b! O, {  M) |& _
  103.                      Debug.Print "PDF Was Created"+ \! N8 N  \+ M& g
  104.                      Debug.Print "PDF Was Created"# O1 U0 I; {7 x
  105.                 Else: b% f9 _  s( l5 T+ b7 _
  106.                      Debug.Print "PDF Creation Unsuccessful!"
    0 ~+ Q& v) ?7 u0 K7 G3 T7 M( G
  107.                      Debug.Print "PDF Creation Unsuccessful!"9 @2 ^1 g0 B" ~- V) q+ o  h
  108.                 End If+ y" ?5 Q8 ?; z' q
  109.                 PtConfigs.Item("PDF").Delete
    9 {; J6 J2 z0 x, U; y
  110.                 Set PlotConfig = Nothing
    2 O- t: N0 Q0 Z5 z
  111.                 acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot
    9 `7 ^. i. s; X' {# c
  112.                 ( V  l2 V* G! Q- x, }3 V# b8 L5 K! Q
  113.                 Debug.Print "CreatePDF ok!"
    ( `0 d9 @5 i9 t1 {0 `
  114.             End If  A! S$ d! j6 V7 I0 N9 M1 ?$ |6 z
  115.         End If
      }1 a. H/ |- z
  116.         DoEvents! P) A! q! @9 k1 J  y/ ]5 R3 p
  117.     Next ent' k8 h! s5 c- b
  118.     Debug.Print "CreatePDF -------------------------------------------------<"8 u: j$ ^9 X1 B5 E! V" @# @
  119.     Exit Function
    4 Z4 |5 C! [& [) g8 `3 v
  120.    
    . K& w: w7 x& Y" z# h0 K* m
  121. ErrExit:
    1 v) d8 o7 h; q7 a, s$ X
  122.     CreatePDF2 = -1
    * g1 W0 E$ _, J$ c7 z
  123.     Debug.Print "CreatePDF Error:" & Err.Description3 Q/ G. V! u% _. h( a: B
  124.     MsgBox "CreatePDF error:" & Err.Description# C6 t& `& S  v# J9 m; ^
  125. End Function
复制代码
仅依靠系统字体;不使用文档字体.png
发表于 2015-7-8 20:57:19 | 显示全部楼层 来自: 中国辽宁营口
本帖最后由 woaishuijia 于 2015-7-8 21:13 编辑 $ a8 A6 A% W2 v# u* Z! L  T6 A6 [+ Q$ O
1 o0 S/ p% N% ~2 r3 k4 ^: z* {2 y% L
在"页面设置"对话框的"打印机/绘图仪"框架中的"名称"下拉列表中选择"DWG TO PDF.PC3"打印机" a8 i# H/ Q# u. d6 C1 m# L
Untitled-1.gif
2 W/ Z0 {- @" s" {6 D6 ^4 |4 P点击"名称"下拉列表框右侧的"特性"按钮,弹出"绘图仪配置编辑器"对话框.( N/ \6 L4 t. Z! [% a, H
在"设备和文档设置"选项卡的树形目录中点击"自定义特性",其下方显示"访问自定义对话框"框架.4 R# w* l0 C2 z0 R2 q
Untitled-2.gif
& _. N6 n8 k' ~# U1 A6 V. E再点击"访问自定义对话框"框架中的"自定义特性"按钮,弹出"DWG TO PDF 特性"对话框, M: ^4 _  j4 W) x3 z* n
Untitled-3.gif ( E" Y$ c8 }6 h0 g
返回到"页面设置"对话框,在"打印机/绘图仪"框架的"名称"下拉列表中选择"ADOBE PDF"打印机
" h% z: n$ z! E Untitled-4.gif % y5 [& s# {7 K$ D0 `$ C2 }4 o
继续前面的步骤. N8 F4 `. q8 c3 T4 k
Untitled-5.gif & L8 P/ b5 [/ l( y; {0 X6 o
Untitled-6.gif
 楼主| 发表于 2015-7-10 22:47:02 | 显示全部楼层 来自: 中国辽宁大连
@woaishuijia 版主' X  I* ~; d/ i/ U8 k
非常感谢您的帮助,过程中遇到的2个问题已经解决。7 B! w. Q3 x. B+ P
[问题1] 、PDM生成的PDF图纸中OLE引用(由Excel中copy过来的表格)图片、公司LOGO图片模糊。
# ]; i/ a( p/ G# N+ a. }解决方案:在对PDF文件打印时,取消打印界面“作为图像打印”的复选框后再打印就不会存在模糊的问题。, ]. M4 d% k/ i
% ^% P- `. M  ?; t
[问题2]、打印PDF文件时提示“无法找到或创建字体 TimesNewRomanPSMT,XXXXXX”。
3 P( f& L3 x1 ^( H& P3 U4 m4 `解决方案:原因是由于客户端安装的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 )

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