QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑
7 W' K- R) U/ g% U/ R0 O  L9 y5 v+ N; z9 h' p2 _
版主及各位朋友:中午好!
% L7 E# j8 \8 }' @      
( \& c' @0 U+ K% Q  J" g$ p# f3 d        CAD版本:AutoCAD Electrical 2010
+ X2 y1 r6 L5 E" f4 m' F8 m5 v
1 I' a) A; T: s& ~        我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!" a! Q/ k0 E9 \
        问题如下:
+ A) W1 e2 E6 R" {        我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3  打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。" f# _; z6 y9 I5 g. l3 I. }

4 T9 |' u" W6 j! w( a9 u        上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题
% H% o; R  e8 U1 R5 `. ^" N6 z: B
, g% ~. ]/ q; T$ d( v/ ]3 f; W         后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
$ }8 ]. {# y+ g( r3 A         尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)( u" b+ r, t( k- C/ x7 y. ^8 y/ ^

( d* d  i$ O5 F3 X0 o& S7 Z        问题汇总:7 h5 W: H  _  {
        1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?
9 u( x# _2 S& w3 r        2、 “Adobe PDF” 打印机如何设置字体?' P- A1 g. d- H- b: z3 k
        注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。
  1. '---------------------------------------------------------------------------------------
    # ~& I4 \4 B9 J3 L; K) y
  2. ' Procedure : CreatePDF
    ' \2 B* W1 ]4 [+ Z! ]$ r7 ~
  3. ' DateTime  : 2013-11-20
    7 z7 J0 E& u  k" B0 \" t) J
  4. ' Author    : xwang
    , }( v' }. [% k# y. w4 e
  5. ' Purpose   : CAD中DWG图纸导出PDF文件( n4 u8 i$ C$ o& F; f/ M: k
  6. ' param     : acadDoc: AcadDocument
    $ |8 w  n! }* @& E, C4 E$ H3 \. @
  7. '           : filename:  DWGFile2 n2 j. y/ K/ v# O5 S
  8. '           : strPdfFile PdfFile
    # e4 ]; V3 D) g! S$ _+ B
  9. '           : ConfigName: Acade - DWG To PDF.pc3
    0 B1 q# _+ E4 n! W7 o
  10. '---------------------------------------------------------------------------------------
    , H+ n) q' N* o4 u6 _
  11. Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer
    $ R) t: K4 s5 k2 w. X

  12. / a. f( t7 ?( u) i% ~( b
  13.     Dim PtConfigs As AcadPlotConfigurations
    ) l% |; ]# x0 y4 v2 _+ b2 W, S
  14.     Dim PlotConfig As AcadPlotConfiguration
    + a& Z4 o) g0 N, f9 F' }8 @$ V
  15.     Dim PtObj As AcadPlot+ M$ i" `' K8 u6 p
  16.     Dim BackPlot As Variant: f9 X* K0 F1 ?# y  g& h6 A& y) c+ M
  17.     & h5 r" k" S3 \  F+ N. B% z
  18.     Dim ent As AcadEntity 'Object
    5 J7 Y; `" E! X8 [: Y
  19.     Dim blockRef As AcadBlockReference7 `) |/ d8 b. w. i. j
  20.    
    : |; [5 e  g1 [1 ^, u
  21. On Error GoTo ErrExit
    + V. I0 f! u7 f* J

  22. 4 {! _( @  M5 @% b8 g% T8 S) u9 C7 S
  23.     Debug.Print "CreatePDF ------------------------------------------------->"4 ~/ O5 U- B- G, H$ N) |
  24.     Debug.Print "打印机:" & ConfigName
    2 M! q0 H7 Z/ [2 D5 ~( W7 B
  25.     For Each ent In acadDoc.ModelSpace
    9 _2 g+ z5 j% \" n- V& K
  26.         If TypeOf ent Is AcadBlockReference Then
    + _  N, k2 `- A8 c! q' Q
  27.             DoEvents/ a( N& x7 [' }8 ~7 ]; I2 K- z
  28.             Set blockRef = ent6 ~; _$ T, x% T$ o4 C+ e# e& c
  29.             If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then4 _7 T# d2 k( ]+ V

  30. ) B- f+ A+ _. a$ M" y; w8 h! B9 z
  31.                 Debug.Print "块名称:" & blockRef.Name. u8 W7 l+ b" J/ [6 |3 K; ^
  32.                
    0 n. {" @' J/ ]/ e( ]3 e' A+ t
  33.                 '块引用的插入点) a( j6 ?7 ]; Q/ |# h0 P
  34.                 Dim insertPoint As Variant- H  `" q: E, S5 W
  35.                 insertPoint = blockRef.InsertionPoint
    . {  E+ {+ n3 \8 Y" l) r& P, F
  36.                 '放大比例
    4 y$ I+ S  ]  W
  37.                 Dim xScale, yScale As Integer& ]3 M, @1 d' f- A9 h- R/ b4 Q/ Q: ~
  38.                 xScale = blockRef.XScaleFactor( X& j) G0 U5 \$ h  v# u% m& U" `
  39.                 yScale = blockRef.YScaleFactor$ l2 G2 |# M9 D5 H7 X5 h2 s
  40.                
    ! z; Q' Y  r' p: r9 _/ F
  41.                 acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
    9 f9 q4 n; d: K% `) e* n- c) ~2 Z# Y. }
  42.                 Set PtObj = acadDoc.Plot
    # `, e' {* K% i$ [& [  p1 z
  43.                 Set PtConfigs = acadDoc.PlotConfigurations( ]2 e7 ?- `% f5 x0 B

  44. , d' `* P4 O4 e" o$ V  s
  45.                 PtConfigs.Add "PDF", False
    % B- `4 g7 s( S5 D. k  s  m
  46.                 Set PlotConfig = PtConfigs.Item("PDF")' }* d4 }% r5 H/ N7 Z3 v# x/ k
  47.                 PlotConfig.StandardScale = acScaleToFit# Z: P. {3 w: w7 r0 ^. l5 D! s, o& p9 g
  48.                                 # O9 ^( y* g& H. z2 G9 m
  49.                 PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"& l. U' y- U/ F: [' Y
  50.                 'ANSI_A_(8.50_x_11.00_Inches)) ~* i# K) `8 O8 ?) ]+ |
  51.                 PlotConfig.RefreshPlotDeviceInfo+ y6 Z, g5 j6 \8 O

  52. ' U1 O, w. R" u4 f' _8 b
  53.                 Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet3 s' a; x0 R1 p* n( d
  54.                 Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
      |8 p- p& z; F0 f1 M2 Q3 U
  55.                
    ; _- W; W2 q8 P1 K* l2 G' k
  56.                 acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式  p2 P8 E9 Z3 g7 h- s8 y4 C
  57. 5 i& A9 _7 \8 @" s/ }$ Z
  58.                 '使用图形文件的线宽2 J$ M' @  N5 ~$ U4 d# _. j- \3 B+ S
  59.                 PlotConfig.PlotWithLineweights = True
    : x+ T( I* P/ w. a4 [9 u
  60.                 '是否启用打印样式
    - ?6 o) D' e4 @$ x' E8 U( C/ S
  61.                 PlotConfig.PlotWithPlotStyles = True
    ' q8 X$ V* g5 F8 ?/ B2 }! g$ @

  62. # ^6 k" a* j0 b7 [. p: u8 r' g
  63.                  '宽高基数
    / w8 s5 G; X* U
  64.                 Dim width, height As Double
    + s/ g- u8 ?& T
  65.                 If blockRef.Name = "ACE A3块" Then
    * V3 a( A" x: h. W: ]  {, u
  66.                     width = 420
    ) q, R, k' u) d1 J* S1 j3 ]; `
  67.                     height = 297
    - x/ M9 b' r& y9 ~1 o
  68.                     acadDoc.ActiveLayout.PlotRotation = ac90degrees
    / C! F+ S; {; I5 E! E9 b
  69.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"
    1 ]- g1 `5 X0 h8 M) x8 m8 ^. x
  70.                 ElseIf blockRef.Name = "ACE A4块" Then
    , a, w( }# z3 s) \/ d4 U
  71.                     width = 2100 v5 f6 X" A7 }+ @7 O0 t; }+ n4 p+ G  e
  72.                     height = 297
    : o# i3 f, `, |; U6 ~( k# z- a
  73.                     acadDoc.ActiveLayout.PlotRotation = ac0degrees
    , O/ ~, @- `' v2 M+ U
  74.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"$ b$ p% I, U1 U7 e# s: k: z% ~
  75.                 End If0 `! o) D8 r/ Z3 r2 l. T
  76.                    3 n* n! M- e3 t! f* s* y7 @4 i
  77.                 '打印区域/ ~- b- j# m0 f; ?7 x& N: P
  78.                 Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double4 Q/ c4 M7 f/ o1 P# I# f
  79.                 LowerLeft(0) = insertPoint(0)1 P* ^: @; c  P% [
  80.                 LowerLeft(1) = insertPoint(1)
    $ T9 i1 D4 r5 E' q' U( g2 M" N
  81.                 UpperRight(0) = insertPoint(0) + width * xScale
    , Q, n  f  ]7 D, B8 {/ i+ b; z0 [: h8 _
  82.                 UpperRight(1) = insertPoint(1) + height * yScale
    8 b# o/ F; \/ B8 j  x! f8 k7 K
  83.                
    - z5 v2 b( q5 W6 R) F4 B' m
  84.                 '设置定义要打印的布局范围的坐标
    + N7 d% O  J1 l% Z1 J1 y" _
  85.                 acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight7 G* z7 }  d( Q
  86.                 '指定布局或打印配置的类型
    1 Y- ?6 O- M7 Y: l) A# i# d
  87.                 acadDoc.ActiveLayout.PlotType = acExtents
    % e  x8 z' y; `
  88.                 % m0 w- @7 j. N% h9 J! z2 P. K
  89.                 BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")- R0 H: i4 v2 F! H8 _' w/ o' j
  90.                 acadDoc.SetVariable "BACKGROUNDPLOT", 0
    7 f' y# \, Y$ x. e9 Z/ _
  91.                 PlotConfig.RefreshPlotDeviceInfo
    + T$ O; C. Q3 s1 k5 z$ m
  92.                 9 x# O+ G4 L0 b4 x: l. _
  93.                 Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet  v) `. e) J* g. I7 v
  94.                 Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName- m$ t9 x% z! N, [4 {$ w+ A
  95.                 Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
    0 _. d3 o) b1 h9 M) |- I: O) p& H
  96.                 Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName4 l9 Z, U4 t( O( N2 M( S
  97.                 . L* s: a1 V& c6 b' L
  98.                 strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")
    . n3 i1 [0 p0 v8 X% P: U( c( M
  99.                 Debug.Print "输出位置:" & strPdfFile
    9 c+ H/ [- S5 P) a7 e6 I3 i5 g

  100. . w# r/ q3 R$ N+ e5 ~+ L4 z
  101.                 'Now you can use the PlotTofile method
    * {) k' s! M2 t
  102.                 If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then% u) P0 h2 g4 t; w
  103.                      Debug.Print "PDF Was Created"
      S6 d- ?3 c* T. T+ j+ B. Z
  104.                      Debug.Print "PDF Was Created"8 L- P% k" }" H' {0 V
  105.                 Else
    7 f3 t% t. `$ l
  106.                      Debug.Print "PDF Creation Unsuccessful!"! ^# F4 |0 z3 _2 z
  107.                      Debug.Print "PDF Creation Unsuccessful!"
    2 l# ~9 e0 M7 W
  108.                 End If, X6 C2 u, x: p- b" ?* w3 J
  109.                 PtConfigs.Item("PDF").Delete; s' c: O- E) o5 X- N9 \- m/ `
  110.                 Set PlotConfig = Nothing" j2 \: o; s6 F3 U. T1 y8 k$ L
  111.                 acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot6 z6 I& ^4 D8 J1 H% i* L6 b
  112.                 % c1 O- m" z. u' T* V6 A! n
  113.                 Debug.Print "CreatePDF ok!"/ t. s" x. W  m8 O, B( ]! j
  114.             End If
    2 ?/ g' g: b  o3 }
  115.         End If1 Z. A- s3 x( f& ^! J+ y
  116.         DoEvents2 T0 J& u" f# g: V3 ~
  117.     Next ent* M$ S- N0 i' a( O
  118.     Debug.Print "CreatePDF -------------------------------------------------<"+ V1 r: U* g8 X. {; u0 X+ |
  119.     Exit Function4 V/ d/ N4 K$ l5 @
  120.     , e* F$ ?, L; Y! ?% A7 |7 p' W
  121. ErrExit:! l; |- W  I9 Y) O
  122.     CreatePDF2 = -1; g, [- p- P# {& \
  123.     Debug.Print "CreatePDF Error:" & Err.Description3 u+ m. B* {& y) X0 q( g
  124.     MsgBox "CreatePDF error:" & Err.Description
    . p, d" J( J8 [8 w
  125. End Function
复制代码
仅依靠系统字体;不使用文档字体.png
发表于 2015-7-8 20:57:19 | 显示全部楼层 来自: 中国辽宁营口
本帖最后由 woaishuijia 于 2015-7-8 21:13 编辑
! J) ~* A7 y" S" k! L; [
4 g1 g0 |% t$ f; w0 g# h# A; X在"页面设置"对话框的"打印机/绘图仪"框架中的"名称"下拉列表中选择"DWG TO PDF.PC3"打印机( [" s; {0 N: w0 F
Untitled-1.gif
( l% r2 r$ c$ `7 [9 ~* v点击"名称"下拉列表框右侧的"特性"按钮,弹出"绘图仪配置编辑器"对话框.% L2 t) w( B) ?/ {8 z2 y
在"设备和文档设置"选项卡的树形目录中点击"自定义特性",其下方显示"访问自定义对话框"框架.# O7 I, ^; i3 S
Untitled-2.gif
" c' D" P: D1 [2 k0 C* f6 o再点击"访问自定义对话框"框架中的"自定义特性"按钮,弹出"DWG TO PDF 特性"对话框
1 V7 n# j0 @2 z5 _4 ?  p' r: d Untitled-3.gif
( H; }. }/ P2 u/ }( x返回到"页面设置"对话框,在"打印机/绘图仪"框架的"名称"下拉列表中选择"ADOBE PDF"打印机
  m/ T! P. X; P* Q6 G Untitled-4.gif
; t8 Q& B" l4 `. g继续前面的步骤
# k0 i, j8 t2 u- F Untitled-5.gif 6 C$ O+ v2 w) b+ l0 P2 L
Untitled-6.gif
 楼主| 发表于 2015-7-10 22:47:02 | 显示全部楼层 来自: 中国辽宁大连
@woaishuijia 版主5 I( A( M  H  ]
非常感谢您的帮助,过程中遇到的2个问题已经解决。: u1 B0 U, K& k0 L. ?; y( H
[问题1] 、PDM生成的PDF图纸中OLE引用(由Excel中copy过来的表格)图片、公司LOGO图片模糊。- Q5 g  J* Y6 n7 x! w+ s2 x
解决方案:在对PDF文件打印时,取消打印界面“作为图像打印”的复选框后再打印就不会存在模糊的问题。* n# X, k9 [9 u2 F, r* E

5 q& f( b1 v) C. q* \6 a$ U3 ?[问题2]、打印PDF文件时提示“无法找到或创建字体 TimesNewRomanPSMT,XXXXXX”。 . s7 O' C& n* c% @
解决方案:原因是由于客户端安装的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 )

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