QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑
* ~5 z' E! f" v3 R3 @1 S
3 C) d! z/ u+ l, W版主及各位朋友:中午好!! D, M7 p5 B* v2 z; E; a
       / _# |. S8 R4 P
        CAD版本:AutoCAD Electrical 2010' J9 [* {$ @4 Q& v, G

2 W# e0 g) J" K3 ^2 z; W0 Y        我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!1 ^+ {/ v/ w2 D6 t; |
        问题如下:; x& K9 C$ {( m% k
        我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3  打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。$ V6 ~& B9 p" Z$ N. A: z  r
' m8 A* p7 A  P" M$ S% u
        上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题
% `# w  f( X5 w  o! ^4 I; l  ?, n
! T* |% w' h% c+ _' c7 }0 M# y         后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。% N  _0 h/ ]" K, A4 d" U2 X+ G
         尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
3 i; K) W# ^) o+ F) }: [. y6 e0 C/ C# ^/ q5 u  n
        问题汇总:+ g5 Y5 L9 X3 Z& \$ M9 g; e
        1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?
# v* L- t7 p$ A: [( }        2、 “Adobe PDF” 打印机如何设置字体?: L9 o6 ?( h. p6 ]4 T
        注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。
  1. '---------------------------------------------------------------------------------------9 \; Z3 }2 H" r( m- d
  2. ' Procedure : CreatePDF" |: s9 w- _% O5 }" V
  3. ' DateTime  : 2013-11-202 L. v1 ^. g  }9 M
  4. ' Author    : xwang: o3 q: P7 F# f
  5. ' Purpose   : CAD中DWG图纸导出PDF文件+ M. ~1 b3 O3 X. m- s
  6. ' param     : acadDoc: AcadDocument
    # T0 w; X- q6 V; W5 M4 U; Y# Y
  7. '           : filename:  DWGFile" S5 k$ r* @! d; o' M
  8. '           : strPdfFile PdfFile
    + ~$ s1 D4 p' K0 L! p& O: |4 N' {/ N
  9. '           : ConfigName: Acade - DWG To PDF.pc3
    $ n* t7 ~0 t- i" _' z1 w2 s4 u
  10. '---------------------------------------------------------------------------------------
    3 Z- _# A( S; {% R, N
  11. Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer
    ! e1 D( X" l8 @9 _4 c

  12. 9 j, E5 {# C/ y5 i/ a
  13.     Dim PtConfigs As AcadPlotConfigurations8 l0 r, ?- ~3 q# w9 i8 I6 h
  14.     Dim PlotConfig As AcadPlotConfiguration
    & Y3 t& T, _# D, S* o
  15.     Dim PtObj As AcadPlot/ Z/ r2 Z( [8 t! D. ~% W* j# B" N
  16.     Dim BackPlot As Variant) t  n5 ^3 I6 \& K" z
  17.    
    - h7 b* B( _2 @) h
  18.     Dim ent As AcadEntity 'Object
    , ]0 D# J0 O6 ?0 N, S
  19.     Dim blockRef As AcadBlockReference* _8 x8 b  r, p3 e% w
  20.    
    % ^7 d; `# }1 x7 G! t
  21. On Error GoTo ErrExit
    $ K% o3 C. [9 f+ `$ H0 q

  22. 3 ^8 h9 S& p5 i9 o" X, a
  23.     Debug.Print "CreatePDF ------------------------------------------------->"
    9 T; r6 I4 l! @
  24.     Debug.Print "打印机:" & ConfigName
    # b( a& P3 _- B! i$ ~' o8 C
  25.     For Each ent In acadDoc.ModelSpace1 `2 Q# g; y) _/ |1 h  p  y! M
  26.         If TypeOf ent Is AcadBlockReference Then( z$ P+ g5 J5 ^" T
  27.             DoEvents7 x6 P' h2 u3 Y: Z6 l2 U; M
  28.             Set blockRef = ent
    3 ]( y- S0 ^( f
  29.             If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then7 d# c8 B( H7 P7 S% o# }' Y7 C

  30. . _' O( M- ]/ h8 o* Y
  31.                 Debug.Print "块名称:" & blockRef.Name1 I/ _0 W$ a# D
  32.                 4 y6 I0 V2 r  _5 J5 Q- a; n
  33.                 '块引用的插入点) t0 W" D, J! Z9 L& l9 z- R3 ]2 F
  34.                 Dim insertPoint As Variant& i. a; @0 T2 G$ ]6 S
  35.                 insertPoint = blockRef.InsertionPoint
    # c2 @7 d5 P& S+ j
  36.                 '放大比例# x4 O+ `+ B: i5 g
  37.                 Dim xScale, yScale As Integer
    , E8 w3 X( k. f$ f9 o
  38.                 xScale = blockRef.XScaleFactor9 }1 @7 L, E2 C9 f/ X. ~4 K
  39.                 yScale = blockRef.YScaleFactor
    0 ?' m- h2 t5 ?) ^% `
  40.                
    ; P1 M/ p. ?4 f9 k- V5 |
  41.                 acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
    ( d& J1 W+ J) _- F/ E
  42.                 Set PtObj = acadDoc.Plot" R) Z; G7 U) f, a- ^, v
  43.                 Set PtConfigs = acadDoc.PlotConfigurations
    # L- F* }$ p' H9 h1 H& _0 \" u# V

  44. . a% _! U! O$ @! r* r& _
  45.                 PtConfigs.Add "PDF", False; b/ P! A' v: G, N
  46.                 Set PlotConfig = PtConfigs.Item("PDF")
    3 v; S* M; m( }6 I% }. a' h" Y0 s/ b
  47.                 PlotConfig.StandardScale = acScaleToFit+ f% W' ~3 _6 F% O% ]8 q5 T3 E
  48.                                 
    ! V. _7 _) y0 y5 V- ?: E
  49.                 PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
    9 t, z; l: b2 I7 U. d4 u
  50.                 'ANSI_A_(8.50_x_11.00_Inches): [" S- C, X" G% \4 Z. T
  51.                 PlotConfig.RefreshPlotDeviceInfo
    % S2 J) C" H' X6 G# S% t5 [: T
  52.   _" b; j8 R  _1 a
  53.                 Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet
    ) Q8 u1 }2 K0 G: N6 M
  54.                 Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    ( V8 J" s7 u( k1 ~2 ~1 ]
  55.                
    1 G. @4 z$ @! ]) l
  56.                 acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式
    : J: y3 r2 I* N" W1 b& M
  57. . ~: j5 t1 |' @; ~
  58.                 '使用图形文件的线宽+ x+ H; A( ~2 F' V
  59.                 PlotConfig.PlotWithLineweights = True
    : K: v) b- I+ v, v" ]& J
  60.                 '是否启用打印样式
    , v# G% b, X; J8 K
  61.                 PlotConfig.PlotWithPlotStyles = True/ p4 i5 C' y+ j# q8 O
  62. 1 \: D5 n8 E; ~+ W$ x1 I8 a
  63.                  '宽高基数
    2 Q* U1 Z8 U1 Z5 }& s; o
  64.                 Dim width, height As Double1 r! w! y1 e  G+ k
  65.                 If blockRef.Name = "ACE A3块" Then
    ' {' j: p, d# Q" x: H; L
  66.                     width = 4204 \* j( q: U% O/ R/ U2 A3 W" m
  67.                     height = 297
    / f; `9 o. l. r# t% M
  68.                     acadDoc.ActiveLayout.PlotRotation = ac90degrees
    ) M" ~) y6 L8 d% R! y
  69.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)": }8 Z/ [1 d4 E5 X. H2 N; c
  70.                 ElseIf blockRef.Name = "ACE A4块" Then
    , F7 f7 t! ~( q4 H
  71.                     width = 210
    & m; W* I" V) z
  72.                     height = 297
    & D. F4 f+ F$ M, A
  73.                     acadDoc.ActiveLayout.PlotRotation = ac0degrees! ^* Z0 o% l+ _
  74.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"6 ^6 L1 a1 @+ D6 ]6 A) Y% z, r
  75.                 End If# Z: |2 y$ {- B  t; Y! N3 O. g
  76.                   
    1 d( y. H' L+ L1 L" f
  77.                 '打印区域6 _$ [7 [' C1 J1 s9 d% W9 g
  78.                 Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double1 _+ G" x$ r% C: q$ G) B
  79.                 LowerLeft(0) = insertPoint(0)
    & Z. ^3 w/ Q: R6 m
  80.                 LowerLeft(1) = insertPoint(1)
    ! V  g8 n# Q8 j8 _* K  d+ W2 ~; j
  81.                 UpperRight(0) = insertPoint(0) + width * xScale! v' o0 i! @+ t
  82.                 UpperRight(1) = insertPoint(1) + height * yScale
    # {; e, q$ p( a+ I6 L
  83.                 * S1 \' d- |! D% s$ m! s
  84.                 '设置定义要打印的布局范围的坐标# B( `  [5 x7 R5 a( C5 M% j
  85.                 acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight
    8 t: l0 J; N9 x4 I9 k% ^4 C8 k
  86.                 '指定布局或打印配置的类型. ~* P0 v1 m/ O( ]* p; g& k
  87.                 acadDoc.ActiveLayout.PlotType = acExtents
    3 n. H" b, ]6 ?+ \/ @4 ^3 \
  88.                
    % B( ?. Y" l6 V- x( d* j
  89.                 BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT"); r) e1 e# e" K: R$ M& N- {
  90.                 acadDoc.SetVariable "BACKGROUNDPLOT", 0
    6 O7 `% j7 ]. U
  91.                 PlotConfig.RefreshPlotDeviceInfo
    " ~& I$ Z* e$ b6 _9 Z2 q
  92.                
    ! m$ z- m! f- b
  93.                 Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet% r2 b( a* D5 s8 n  F9 P% v1 ^
  94.                 Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName0 q3 X- L' z9 r$ Y! R$ f( H" O: }
  95.                 Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
    4 Z1 w  n5 F0 l- h9 o
  96.                 Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName$ c4 e% ^! [( {& t
  97.                 : G7 x9 l" K6 W1 \0 p# z9 M5 P
  98.                 strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")
    0 {! P% j# w/ b7 S; C
  99.                 Debug.Print "输出位置:" & strPdfFile
      v/ y0 Q+ ~# g  G. O+ R( M4 ~

  100. : b% M1 P4 V3 J1 a1 k- j- O4 |
  101.                 'Now you can use the PlotTofile method
    2 Z5 g% d  X% ]7 K0 T) U
  102.                 If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then7 M! X  O9 e. n. X
  103.                      Debug.Print "PDF Was Created"
    , o+ x5 m& `3 b; w/ B' b
  104.                      Debug.Print "PDF Was Created"
    5 K+ p( F6 x7 N/ I: w: ]
  105.                 Else; g7 `  A& v' X  U: b
  106.                      Debug.Print "PDF Creation Unsuccessful!"
    , ~; q% r2 S( ~( M+ l" {( F
  107.                      Debug.Print "PDF Creation Unsuccessful!"! U' B; o; s9 m
  108.                 End If
    8 @+ W9 X! o* G& [0 F+ D
  109.                 PtConfigs.Item("PDF").Delete
    ) W% N7 x( @9 P  q/ z
  110.                 Set PlotConfig = Nothing2 p8 h5 y& c7 b2 B( X
  111.                 acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot7 N7 ?5 \; p2 X" }
  112.                 ) `% Y1 }( O+ c. q
  113.                 Debug.Print "CreatePDF ok!"
    , Z1 z) z7 a/ V9 s3 \  k9 r" Y* r
  114.             End If' a/ y/ c  y5 B7 O5 ~7 G* @# T
  115.         End If  O/ k( H# K4 H7 `1 b, a# T
  116.         DoEvents
    0 @; t& G5 J5 f; Y& ?) C6 t* s
  117.     Next ent% [, D1 H3 t+ `/ X+ g
  118.     Debug.Print "CreatePDF -------------------------------------------------<"
    ; d9 Z# \: k5 F5 F6 U
  119.     Exit Function0 H$ c  P! u7 e. D8 S+ S0 O& z
  120.     % g, x0 K; H# S
  121. ErrExit:
    2 V/ ~/ G7 h* b/ g* A
  122.     CreatePDF2 = -1
    . s# ~  \/ c3 Y0 e, X  x
  123.     Debug.Print "CreatePDF Error:" & Err.Description, g3 |5 _2 ?3 ?/ i
  124.     MsgBox "CreatePDF error:" & Err.Description
    ; F% E" g1 O! X& b0 i& `- Z: X' ^
  125. End Function
复制代码
仅依靠系统字体;不使用文档字体.png
发表于 2015-7-8 20:57:19 | 显示全部楼层 来自: 中国辽宁营口
本帖最后由 woaishuijia 于 2015-7-8 21:13 编辑 ' I4 q0 ^, x6 R% G

+ B1 [$ h  }- V3 B- T/ I2 C) ~) `在"页面设置"对话框的"打印机/绘图仪"框架中的"名称"下拉列表中选择"DWG TO PDF.PC3"打印机6 b, [5 e) j% ?5 ~/ x; B! |
Untitled-1.gif
% C: \  f; O, S. `* K点击"名称"下拉列表框右侧的"特性"按钮,弹出"绘图仪配置编辑器"对话框.
: T# P- ^1 q; H4 h* h' [* {' s# P在"设备和文档设置"选项卡的树形目录中点击"自定义特性",其下方显示"访问自定义对话框"框架.2 G) y7 w% h' k5 N1 V' W
Untitled-2.gif " n2 g! z' }  Q/ l5 I0 u/ p* y. d# m4 Z
再点击"访问自定义对话框"框架中的"自定义特性"按钮,弹出"DWG TO PDF 特性"对话框* \$ F! [: x2 y& [# O
Untitled-3.gif
, p+ @2 a3 R' C3 B, U返回到"页面设置"对话框,在"打印机/绘图仪"框架的"名称"下拉列表中选择"ADOBE PDF"打印机
' Y3 d/ f* S+ n- \! U4 N Untitled-4.gif " ~9 a" a1 [- i+ [
继续前面的步骤/ W& _4 x$ D' |7 o
Untitled-5.gif ' t" E# D; f7 B  _: }
Untitled-6.gif
 楼主| 发表于 2015-7-10 22:47:02 | 显示全部楼层 来自: 中国辽宁大连
@woaishuijia 版主
1 A0 W  z1 Y! H5 A. W! Q2 z- L. d非常感谢您的帮助,过程中遇到的2个问题已经解决。
  [3 c& c- ~3 k* x! H[问题1] 、PDM生成的PDF图纸中OLE引用(由Excel中copy过来的表格)图片、公司LOGO图片模糊。0 p+ S# n0 L: @1 V  _1 q2 V
解决方案:在对PDF文件打印时,取消打印界面“作为图像打印”的复选框后再打印就不会存在模糊的问题。" u8 L! k1 p, P

/ s0 E5 a% S3 i$ C9 J+ |[问题2]、打印PDF文件时提示“无法找到或创建字体 TimesNewRomanPSMT,XXXXXX”。
0 e  B6 d1 [$ j# V4 M解决方案:原因是由于客户端安装的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 )

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