QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑
: G* D3 Z9 [% Q) Q0 O) W( R; J; h) h' ]0 \9 W7 W' @4 f) p- e
版主及各位朋友:中午好!
3 q  v2 p: j( H7 d5 R5 N" o" Q! l      
" C" r9 u% \6 n# N3 D, T) G0 _7 Q        CAD版本:AutoCAD Electrical 20107 v* {0 I7 G3 @6 l' n

- }5 F- j& M! ?9 L2 N& P; K        我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!
. ^% _* N5 M+ z3 d        问题如下:
6 x/ b# q$ p! ]8 ]) D7 j        我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3  打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。# X8 q5 u' v" z$ o+ A& T: n
4 Q9 Y* {/ E% f$ X
        上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题4 B0 Y( r$ k) i, s
, Q5 v3 @- {" s& b* @
         后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
  g- L1 A$ h% u8 o+ x9 h2 j         尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
) p$ @& ]7 h& _. `( l# i  k9 f! I+ q2 \+ [+ {% E6 G+ e3 l
        问题汇总:
$ R- Q$ f6 t/ r7 b7 b        1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?
" D4 {, _  B: E. ]9 Z. ?1 p* g        2、 “Adobe PDF” 打印机如何设置字体?& n2 e) E- U( Y6 S: C
        注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。
  1. '---------------------------------------------------------------------------------------5 y% Z4 ?/ F7 G
  2. ' Procedure : CreatePDF
    / D8 i& x$ \- D" C/ C
  3. ' DateTime  : 2013-11-20! b% c9 ~: m* e* P8 B0 i! N: s
  4. ' Author    : xwang. i1 v! D7 B% P4 `
  5. ' Purpose   : CAD中DWG图纸导出PDF文件
    0 O9 c7 S2 R6 }; Q0 R' d1 B3 ?
  6. ' param     : acadDoc: AcadDocument
    + c' |3 a! G+ Q+ D4 u2 y
  7. '           : filename:  DWGFile! @  x& a4 R* [/ Z$ h
  8. '           : strPdfFile PdfFile
    4 {+ ?3 u' ]5 c* C" Z3 X2 \
  9. '           : ConfigName: Acade - DWG To PDF.pc33 q* K' T. n# G6 s* j9 G
  10. '---------------------------------------------------------------------------------------
    2 E5 v4 n8 @+ H$ b6 q1 i( I' w
  11. Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer; R* Z4 R8 i0 ]% `  s

  12. # h. v  k1 A  f: T4 Z  ^- w0 l8 T
  13.     Dim PtConfigs As AcadPlotConfigurations
    , Z6 g0 j) D: G
  14.     Dim PlotConfig As AcadPlotConfiguration
    $ f$ m/ j# h) R' X0 b
  15.     Dim PtObj As AcadPlot
    + ^. K) E, x9 J/ X/ u3 L. \& S$ X
  16.     Dim BackPlot As Variant
    6 u' L  j4 Z( l( V' n9 ~. }1 N
  17.    
    3 [+ y; @+ a; N! `, E. U, t6 f
  18.     Dim ent As AcadEntity 'Object
    9 {* u" {4 p7 e7 X
  19.     Dim blockRef As AcadBlockReference! P' N6 S& _' _+ S' Y# O
  20.     ( e' \' R8 w* {$ D
  21. On Error GoTo ErrExit- |. P4 x2 L$ H6 z+ p* {
  22.   u4 w, b" t( @1 C
  23.     Debug.Print "CreatePDF ------------------------------------------------->"
    & [# k; s. I& Y) v: ^
  24.     Debug.Print "打印机:" & ConfigName
    " S/ M6 Q$ ~; o2 w0 _- t
  25.     For Each ent In acadDoc.ModelSpace
    , F0 ^9 {( ~8 p, q$ Z7 L. O
  26.         If TypeOf ent Is AcadBlockReference Then; K1 g: L" n; J9 t1 f& ~
  27.             DoEvents
    - E- l+ d0 W/ y% y3 O- Q# O( S
  28.             Set blockRef = ent' H, `# Y6 X0 z+ C) l) J
  29.             If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
    # c2 X3 f8 ?' C; p
  30. : r' B; F8 W9 w8 Y$ S
  31.                 Debug.Print "块名称:" & blockRef.Name
    2 a) ?' H" C3 [9 L4 e  a% r. G
  32.                 3 `2 ^+ \: z$ m" K
  33.                 '块引用的插入点
    ; ]- L+ V; _9 r9 s
  34.                 Dim insertPoint As Variant
    & w* d7 \6 D6 v
  35.                 insertPoint = blockRef.InsertionPoint
    # c" Y" O4 v* C% Q* r! Y3 c* }
  36.                 '放大比例
    & r$ K8 d/ l3 j  n
  37.                 Dim xScale, yScale As Integer
    * \4 {5 P5 u; n- e8 O2 G% q# l2 H! D
  38.                 xScale = blockRef.XScaleFactor
    ! {7 q0 ]8 G! N" B
  39.                 yScale = blockRef.YScaleFactor  W. o: q) O' D
  40.                
    ' T' |- v) p; B) G/ ~. @' z
  41.                 acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"# ^( U0 t  v% ]/ G6 V8 A' v
  42.                 Set PtObj = acadDoc.Plot
    : J. v- ?4 E0 \# Y
  43.                 Set PtConfigs = acadDoc.PlotConfigurations/ {" }, j* o2 |  }- z  r# \
  44. 6 w* Q8 W5 N  u6 G, K& y+ B
  45.                 PtConfigs.Add "PDF", False8 H) ^6 Y7 W, a2 e' q7 `
  46.                 Set PlotConfig = PtConfigs.Item("PDF")
      e; J8 |7 L/ z+ L1 O
  47.                 PlotConfig.StandardScale = acScaleToFit* q# M7 D2 \5 `! M
  48.                                 
    * S2 ^& n4 ^) ^( Y3 n8 J2 V5 y
  49.                 PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
    6 e) s' P) E" v3 Q" k
  50.                 'ANSI_A_(8.50_x_11.00_Inches)* \3 j1 e+ z# y5 T. [* V
  51.                 PlotConfig.RefreshPlotDeviceInfo8 C' h! R$ C  s% W7 B2 X+ m1 \1 h, Q

  52. / s! ?4 s" e, ?. N! g
  53.                 Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet8 [: |& s# |. F
  54.                 Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    9 u/ B3 s' O- s! ?
  55.                
    8 @. u1 y3 |" d; {+ Q8 V
  56.                 acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式
    * e0 T; K; j" B; [8 B$ I# S
  57. : @' o. k: y' G9 V
  58.                 '使用图形文件的线宽
    ' z% u7 v) `, ?  U. l3 ~& n" j
  59.                 PlotConfig.PlotWithLineweights = True
    9 C3 Y' p9 q/ y% d2 B+ S1 J! R
  60.                 '是否启用打印样式
    ( O$ u9 u6 ^1 }7 l0 g0 S
  61.                 PlotConfig.PlotWithPlotStyles = True0 v1 g/ }" v$ [1 F; o

  62. 3 g( G( E) `9 d6 J& G- R- Z
  63.                  '宽高基数
    6 n8 Q$ T) k  t3 X9 a* ?: h: _
  64.                 Dim width, height As Double) [9 r9 u1 w2 Z5 q( E
  65.                 If blockRef.Name = "ACE A3块" Then/ u5 H7 z5 a3 ]
  66.                     width = 420) W) J; Z% w/ ?0 a* D
  67.                     height = 297
    : S6 |# {6 a; F( N" O
  68.                     acadDoc.ActiveLayout.PlotRotation = ac90degrees" Q9 W: g6 H" }$ }% |
  69.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"
    5 I3 B) L3 N- ?3 a& P
  70.                 ElseIf blockRef.Name = "ACE A4块" Then/ _" G% y2 D& j0 K3 n+ L
  71.                     width = 210
    & y& ?; @0 U7 g
  72.                     height = 297( S# `5 b- m" T* c
  73.                     acadDoc.ActiveLayout.PlotRotation = ac0degrees
    6 i; O# o7 ^1 c, r, z' S; N* z
  74.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"2 y9 l/ f2 w) }. u, r% @" W
  75.                 End If0 T: Y6 w6 u+ v1 j" f, H1 Z
  76.                    4 J: d: l: |* S' N- I
  77.                 '打印区域6 _- }* z: j7 ?$ E) S) g
  78.                 Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double: j- O. h+ T. ?' z/ ^  R+ y
  79.                 LowerLeft(0) = insertPoint(0)7 j' Y9 c/ n3 w6 O! X
  80.                 LowerLeft(1) = insertPoint(1)+ N" @* J& H% h
  81.                 UpperRight(0) = insertPoint(0) + width * xScale: E4 X8 O  M8 X# s3 Y
  82.                 UpperRight(1) = insertPoint(1) + height * yScale
    - i+ V/ D6 M+ m$ _
  83.                
    4 N. o1 E* w! V8 ^0 z6 X
  84.                 '设置定义要打印的布局范围的坐标& Q6 X! k1 c* E+ D! `5 R1 V
  85.                 acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight) r2 [9 X0 B- X) ^7 l
  86.                 '指定布局或打印配置的类型
    . P% D4 i0 |4 {+ ?; r( J5 s4 Z+ o0 I
  87.                 acadDoc.ActiveLayout.PlotType = acExtents0 @7 \0 N8 a3 Q2 u7 j: H( c; h) U
  88.                 ( t- m% n( B1 X2 V. Q$ }+ T, j
  89.                 BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")
    % P8 }, X/ G0 o7 m' @# C
  90.                 acadDoc.SetVariable "BACKGROUNDPLOT", 0
    4 u, \8 f: f5 O2 U, M5 t% C
  91.                 PlotConfig.RefreshPlotDeviceInfo
    5 p4 D7 l# m) \1 }& p4 Z1 k& @
  92.                 1 w6 X, w* M# e) f6 I5 B
  93.                 Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet
    ! w2 {- T; {& i7 O0 F/ k/ D
  94.                 Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    / L8 \6 ~3 j* {1 p
  95.                 Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation$ x0 G  d( q9 E: o2 o
  96.                 Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName  N* @2 \( m) }" }# g3 q2 u
  97.                 , Y* A; y( H; M# d" @6 K- O
  98.                 strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")
    6 m( ?6 m2 y& g* v5 d4 Z
  99.                 Debug.Print "输出位置:" & strPdfFile
    8 o2 I' T1 q5 `* o* j& I4 P! ^

  100. 5 N; h4 V/ x9 `3 [
  101.                 'Now you can use the PlotTofile method/ P$ l0 G) w7 J  R2 ?2 a3 ~
  102.                 If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then
      I2 l% x  `( w$ l1 H% U
  103.                      Debug.Print "PDF Was Created"
    ) V6 B# ~( S2 v  w1 m# X
  104.                      Debug.Print "PDF Was Created"
    ) H2 `* D" C, D2 b! e( E# z& u
  105.                 Else
    % Y" l9 Q& c' Y9 _8 T1 c9 i  z
  106.                      Debug.Print "PDF Creation Unsuccessful!"
    3 U) [' V7 T9 m7 B0 X- {
  107.                      Debug.Print "PDF Creation Unsuccessful!"! u  {. y" n- f- c# D; D. X
  108.                 End If% I0 Q& [" f6 O: X5 @# \
  109.                 PtConfigs.Item("PDF").Delete% N* g/ q( n# f- o  x  t& D9 I7 _( A
  110.                 Set PlotConfig = Nothing6 A' _' z$ @' E" J8 ~) @
  111.                 acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot
    . v; c* v: x) f- q; P  c
  112.                
    ( S; y3 Y' {7 J1 U% v: e8 N
  113.                 Debug.Print "CreatePDF ok!"& Z/ ~* s) x# b% [' P2 t
  114.             End If. ^/ R& _1 O; b1 B1 T
  115.         End If( {6 h* c/ m4 @
  116.         DoEvents
    & S  K' M! T' u( Y
  117.     Next ent/ D0 m* z, v( a3 K8 E
  118.     Debug.Print "CreatePDF -------------------------------------------------<"
    # n2 h1 H: I/ u7 G; H8 j( r
  119.     Exit Function
    + ^( N/ w3 A0 {6 _# G3 Q( W, d
  120.    
    " C$ m/ O1 x: b* l3 q4 M5 U
  121. ErrExit:% M" V' t: @! m8 k0 s4 n. c% R
  122.     CreatePDF2 = -1
    " v1 _# }; X7 _! V
  123.     Debug.Print "CreatePDF Error:" & Err.Description
    6 R& j" s: u: O# P. Q2 w+ w8 e, Z$ ^
  124.     MsgBox "CreatePDF error:" & Err.Description
    * R. X: E/ o+ b' V1 ~
  125. End Function
复制代码
仅依靠系统字体;不使用文档字体.png
发表于 2015-7-8 20:57:19 | 显示全部楼层 来自: 中国辽宁营口
本帖最后由 woaishuijia 于 2015-7-8 21:13 编辑
+ W% w- P$ Q8 i4 G9 u6 k
0 B, o; Q5 i' ?) f+ t在"页面设置"对话框的"打印机/绘图仪"框架中的"名称"下拉列表中选择"DWG TO PDF.PC3"打印机
  w7 l; \: o/ u- C' i Untitled-1.gif 9 _0 l! b  u  {# r) x: q+ ]8 f
点击"名称"下拉列表框右侧的"特性"按钮,弹出"绘图仪配置编辑器"对话框.
) G( z, b+ ], q1 O在"设备和文档设置"选项卡的树形目录中点击"自定义特性",其下方显示"访问自定义对话框"框架.6 ?- n( ~+ Z7 N
Untitled-2.gif
! m0 a9 L7 S( D; V( }" x6 F再点击"访问自定义对话框"框架中的"自定义特性"按钮,弹出"DWG TO PDF 特性"对话框, ^  d6 w5 S, |2 O5 I
Untitled-3.gif
; N$ |. l. }( V9 {返回到"页面设置"对话框,在"打印机/绘图仪"框架的"名称"下拉列表中选择"ADOBE PDF"打印机
2 x) {2 s% C0 v/ h Untitled-4.gif 5 V+ z7 T7 w, ^' e( L! |
继续前面的步骤! f% `, S8 h" A9 K2 J
Untitled-5.gif 4 [  _& W& x5 O0 ?) y: M! h$ t7 A
Untitled-6.gif
 楼主| 发表于 2015-7-10 22:47:02 | 显示全部楼层 来自: 中国辽宁大连
@woaishuijia 版主
5 S: M1 w* `. z# @7 j7 n非常感谢您的帮助,过程中遇到的2个问题已经解决。
+ [$ Q: U. G* s' t6 O% f, L[问题1] 、PDM生成的PDF图纸中OLE引用(由Excel中copy过来的表格)图片、公司LOGO图片模糊。* ?6 _, q( _6 V: z9 T3 \- A
解决方案:在对PDF文件打印时,取消打印界面“作为图像打印”的复选框后再打印就不会存在模糊的问题。
9 O; F  \' a! o6 j  H3 G5 W- h7 x* s9 i
[问题2]、打印PDF文件时提示“无法找到或创建字体 TimesNewRomanPSMT,XXXXXX”。
7 ^, S5 m# l  w- {解决方案:原因是由于客户端安装的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 )

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