QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑
1 Z9 z, i  X' r; O- N0 j( [% {# ^* V7 C4 T' Q8 i
版主及各位朋友:中午好!
3 V7 |& N( n7 K9 C) c       . N  i- f( m4 Y; i: W
        CAD版本:AutoCAD Electrical 20101 H1 |" K/ }) S

% G, m7 y- s$ ]/ w        我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!
+ F5 u/ R+ J) M& E5 V% S        问题如下:& P; |( [8 }# Q' N
        我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3  打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。( }# c/ {5 n* p' T9 u
/ o* V# @& E+ J4 t* i
        上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题
$ b5 L- L5 o: M0 O4 p% A/ |% |  H% v2 \( g$ m$ F
         后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
9 p; {3 w3 W( A5 [) o$ b         尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)3 }; c! G9 g/ z. P# D# F# p% K, k% f
4 I3 D/ U7 K6 ^
        问题汇总:
3 N0 ?  S- |/ w3 u8 \        1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?# o9 e- O4 n, X4 n4 S- h" g
        2、 “Adobe PDF” 打印机如何设置字体?
3 H7 ?: z1 X3 h4 A5 V$ t3 V        注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。
  1. '---------------------------------------------------------------------------------------
    7 g3 \$ y: N& [; ^/ i) S
  2. ' Procedure : CreatePDF) i& g( }  m; Q; L/ s+ _3 Z
  3. ' DateTime  : 2013-11-20- N" h; N- W5 l# d! w. J- o) b
  4. ' Author    : xwang4 |2 \. A$ U8 A# s7 y
  5. ' Purpose   : CAD中DWG图纸导出PDF文件
    - J$ r9 ~7 v  l
  6. ' param     : acadDoc: AcadDocument) T' I. r. C$ j- m; h+ F
  7. '           : filename:  DWGFile
    1 l4 p9 M3 q4 m9 Y0 n( t: p3 {
  8. '           : strPdfFile PdfFile" I" K" G+ c' {; M
  9. '           : ConfigName: Acade - DWG To PDF.pc35 c- ?& [5 s8 ]5 w; K% C
  10. '---------------------------------------------------------------------------------------/ G2 j$ Q6 v9 G! ?% u0 z  R! D
  11. Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer
    5 x) m; C3 L* n3 |; ~$ B1 r6 L

  12. ) o) C# X. X! I8 U1 D9 D
  13.     Dim PtConfigs As AcadPlotConfigurations
    ! C/ m$ i( B& {) ~
  14.     Dim PlotConfig As AcadPlotConfiguration
    - K; S; h3 `% n7 f3 [. f
  15.     Dim PtObj As AcadPlot# K/ V3 e: f( d5 }9 o& P8 O; b
  16.     Dim BackPlot As Variant& Z/ v/ i$ e3 P: T# l
  17.     ( f' c0 I0 p! d( }
  18.     Dim ent As AcadEntity 'Object
    " f/ D. e; f9 E! j1 w
  19.     Dim blockRef As AcadBlockReference
    4 K/ B; _9 ?" j' F( F* N! W
  20.     / @' J  Z1 G: N  ]. S
  21. On Error GoTo ErrExit
    & A: r7 T6 M3 j) X: ~2 ?

  22. ! f5 z0 i+ ~3 g6 T  l
  23.     Debug.Print "CreatePDF ------------------------------------------------->"9 B7 r( u: v& x2 f. [: o
  24.     Debug.Print "打印机:" & ConfigName
    . s1 k0 C1 Y7 i8 Z- h
  25.     For Each ent In acadDoc.ModelSpace. L+ V& g9 r" ]
  26.         If TypeOf ent Is AcadBlockReference Then
    ! ^& a8 T- y- B
  27.             DoEvents0 D* k1 E0 A0 {; D( x$ I. [
  28.             Set blockRef = ent
    - d- }* R* |7 ^6 Q8 {
  29.             If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
    / T  Z+ [) k# G1 V5 A5 W4 l
  30. $ ?7 v, _( g# x) v0 d5 _: U; E% T
  31.                 Debug.Print "块名称:" & blockRef.Name  X! `* X: l5 v. U) {6 n
  32.                
    6 i& a$ k9 K! P
  33.                 '块引用的插入点$ P& G* |9 ]$ j6 V+ z$ l: u0 s9 b
  34.                 Dim insertPoint As Variant
      ^6 t0 D- M" K
  35.                 insertPoint = blockRef.InsertionPoint  b9 h/ z& x& ^# R" a& {' Y8 f! z
  36.                 '放大比例
    4 A( ?/ A8 x" Y) M
  37.                 Dim xScale, yScale As Integer0 K+ ~, f* t! u
  38.                 xScale = blockRef.XScaleFactor; l( r9 }( V% @* x' D/ c
  39.                 yScale = blockRef.YScaleFactor
    ; |5 t' a) K! W/ {3 O1 y& w  c* ^( s
  40.                 0 n9 q9 y9 i/ {
  41.                 acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
    7 T& ~  m+ Z- h0 R
  42.                 Set PtObj = acadDoc.Plot7 ?/ R$ t& G. t/ i8 n
  43.                 Set PtConfigs = acadDoc.PlotConfigurations
    + x& I# H2 k1 L
  44. # w: J2 {$ W' \+ F
  45.                 PtConfigs.Add "PDF", False
    8 l/ m1 _/ c1 j0 }
  46.                 Set PlotConfig = PtConfigs.Item("PDF")! d% }8 C  j( ^0 q" |+ p" f
  47.                 PlotConfig.StandardScale = acScaleToFit
    * ]+ ^6 R8 m9 q* s: j) ]
  48.                                 
    - m7 s. _6 c# [
  49.                 PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"' g# @: E8 |; D3 k3 a* g
  50.                 'ANSI_A_(8.50_x_11.00_Inches)
    8 Q+ a+ B2 I& [; l
  51.                 PlotConfig.RefreshPlotDeviceInfo% @  k+ S( j" a9 E1 T

  52. # S. o; t5 ~9 w
  53.                 Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet
    ) U; x7 Y7 C. ?) V1 D- U$ u) j
  54.                 Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    ( F& ]" t6 |7 i2 W
  55.                 : O3 D) H5 R' }; X  _4 U
  56.                 acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式6 {4 I* S6 U3 ~4 {& G
  57. + s! |7 h' O( R: k0 z# n
  58.                 '使用图形文件的线宽
    % d2 {3 Y5 m9 T$ G8 Q3 a3 V  L
  59.                 PlotConfig.PlotWithLineweights = True' P. `  h* p1 R
  60.                 '是否启用打印样式. c9 ^3 I" k2 \- ~' H/ E  F
  61.                 PlotConfig.PlotWithPlotStyles = True
    ! @( a. l& w- Z, b& d0 x$ `
  62. . \# ^! T* A$ `' x' S
  63.                  '宽高基数
    1 J6 X' S; \: T6 Z
  64.                 Dim width, height As Double
    # x6 [2 \( e/ Z7 C5 b& R
  65.                 If blockRef.Name = "ACE A3块" Then+ i8 y  |5 o7 x7 l' r3 U
  66.                     width = 420
    ' H  w4 x# `) H% E2 c' l- l
  67.                     height = 297
    0 Y( f3 ?* v0 G) S2 u, l& l% s
  68.                     acadDoc.ActiveLayout.PlotRotation = ac90degrees' E3 X+ N  c+ U; Y4 V# s3 j3 v9 f
  69.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"0 N' F% B; X9 c6 p7 N
  70.                 ElseIf blockRef.Name = "ACE A4块" Then
    3 T+ `* {; T  E+ j5 ?5 b) `$ o
  71.                     width = 210
    . W' g) |& @# V! Y) ^0 h& Z
  72.                     height = 297) k6 s; U! O2 r
  73.                     acadDoc.ActiveLayout.PlotRotation = ac0degrees3 D3 K6 a6 `, s4 h; @$ p' k2 E( d% i
  74.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"
    * n9 ?: S# R, w; ]1 J$ P
  75.                 End If6 P& ]# _9 s7 x. X, c6 V) t
  76.                   
    ( U9 d' p, v$ r
  77.                 '打印区域
    3 F) E) O' f# [' x' |3 ^
  78.                 Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double: ?- G. f/ x; k3 D7 o# Z. u- F
  79.                 LowerLeft(0) = insertPoint(0)
    - T; r3 `8 Y3 i" P! X
  80.                 LowerLeft(1) = insertPoint(1)8 [. h6 n- x0 Q! _% u, v5 b9 k
  81.                 UpperRight(0) = insertPoint(0) + width * xScale
    ( Z: a9 B: P2 v% ]9 W# r& e( _0 A
  82.                 UpperRight(1) = insertPoint(1) + height * yScale5 V+ n0 o" [/ s: K& O; ~
  83.                 ) @; }0 l5 d8 Z$ k, U+ Q# g
  84.                 '设置定义要打印的布局范围的坐标% a! h5 t1 S8 Q+ h& Q# Z* [/ c5 v
  85.                 acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight
    . L$ \, m" |6 l$ Y4 C
  86.                 '指定布局或打印配置的类型
    - u9 U5 I' C: ^, g1 Y
  87.                 acadDoc.ActiveLayout.PlotType = acExtents
    * s% z2 x* ?, Q1 E; R3 u2 F
  88.                
    % K. U' s1 ]3 D. z( x
  89.                 BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")2 A5 y0 X$ e/ a; w
  90.                 acadDoc.SetVariable "BACKGROUNDPLOT", 0
    - X+ t0 l/ L/ }7 V
  91.                 PlotConfig.RefreshPlotDeviceInfo
    : X$ t6 l0 f! q& L' a3 G5 [
  92.                 , G9 M: x: Q+ C4 g5 w' S& K, J
  93.                 Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet! n: C, I9 T/ ~
  94.                 Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    9 C8 F- f1 ^1 A
  95.                 Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
    ( G7 K- L' Q9 T0 O
  96.                 Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName& a& p. u) c% o! n( V0 X7 }
  97.                 6 H5 j6 q1 `& M/ t  l
  98.                 strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")/ g( B; z( `# d3 z+ C4 j5 f1 t8 t  k
  99.                 Debug.Print "输出位置:" & strPdfFile8 Q( w4 Z- Z, e# {- S4 j3 `$ h

  100. 5 g+ s0 P1 J2 Z4 [6 ]' g
  101.                 'Now you can use the PlotTofile method
    , ?$ M1 G; h" M
  102.                 If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then
    ) k& h- V* [2 J+ J: D
  103.                      Debug.Print "PDF Was Created"- @7 n0 J2 h+ u, K$ f1 _9 o
  104.                      Debug.Print "PDF Was Created"
      M! E9 i* v  D/ C* r' e0 ~
  105.                 Else; E7 R. P4 {" z  p; N
  106.                      Debug.Print "PDF Creation Unsuccessful!"
    9 W! p& k5 ^# M2 p0 |2 H8 \; n, \
  107.                      Debug.Print "PDF Creation Unsuccessful!"" R: p) x- l7 c
  108.                 End If" `; Q  j' f. U5 ]& h* i( I3 x+ A
  109.                 PtConfigs.Item("PDF").Delete( n# P& {3 E7 [' x' M7 y1 b' L
  110.                 Set PlotConfig = Nothing6 D* M  o" i% V$ I  ?; V
  111.                 acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot, G' E, i; ~9 @8 @6 r
  112.                
    : m" l/ s) Q4 o; b5 c( R; ^
  113.                 Debug.Print "CreatePDF ok!"% G5 f5 j1 D4 ^* K$ T& F; F- |# B( o
  114.             End If
    * |9 }+ U; t1 W) S/ f5 r8 S8 h' b
  115.         End If
    $ Y3 v' M. T' a
  116.         DoEvents
    8 x+ `1 m, E* T" Z6 Y' G
  117.     Next ent
    $ T7 i! V6 g, r5 z+ W
  118.     Debug.Print "CreatePDF -------------------------------------------------<"3 {2 @/ y  }4 V/ y$ J: A
  119.     Exit Function
    # a6 T# ]/ K" ?" m3 Z5 O; @* x
  120.     + R) N. b$ m; c4 _& j
  121. ErrExit:
    5 {- q$ ^! A, S  T
  122.     CreatePDF2 = -1& E& D& N8 @2 d; `) \) p: m7 x
  123.     Debug.Print "CreatePDF Error:" & Err.Description9 O7 R, A$ ^6 ~
  124.     MsgBox "CreatePDF error:" & Err.Description+ y" O0 X3 B2 @3 F8 m
  125. End Function
复制代码
仅依靠系统字体;不使用文档字体.png
发表于 2015-7-8 20:57:19 | 显示全部楼层 来自: 中国辽宁营口
本帖最后由 woaishuijia 于 2015-7-8 21:13 编辑
' i$ ]! X& ^* u& N' c% f6 Z5 G+ h  G4 F1 n/ o
在"页面设置"对话框的"打印机/绘图仪"框架中的"名称"下拉列表中选择"DWG TO PDF.PC3"打印机
1 c, \8 O, l: l# e( U5 Q, \ Untitled-1.gif
; J3 \: K) D  ~. @: U1 B点击"名称"下拉列表框右侧的"特性"按钮,弹出"绘图仪配置编辑器"对话框./ B6 y1 l" Z& D8 y4 c9 F* q
在"设备和文档设置"选项卡的树形目录中点击"自定义特性",其下方显示"访问自定义对话框"框架.
. z1 s$ t9 i5 Z- r$ M# I$ e5 g( J Untitled-2.gif * o& Z# e6 F+ m- v+ p. w: S' g
再点击"访问自定义对话框"框架中的"自定义特性"按钮,弹出"DWG TO PDF 特性"对话框. z) d3 h" Q! J* w1 \' Y# m; B$ O9 J: ^+ [
Untitled-3.gif : a% _8 H( @* t5 M) x4 n
返回到"页面设置"对话框,在"打印机/绘图仪"框架的"名称"下拉列表中选择"ADOBE PDF"打印机
$ u2 Z' f7 H- [4 N) j. v Untitled-4.gif
2 O/ [5 _4 F  a0 Y& @/ g7 A继续前面的步骤' }/ k7 `  S6 J3 S
Untitled-5.gif
+ W# N) F3 w0 U+ F  o Untitled-6.gif
 楼主| 发表于 2015-7-10 22:47:02 | 显示全部楼层 来自: 中国辽宁大连
@woaishuijia 版主* x( Y, A: W- q( w
非常感谢您的帮助,过程中遇到的2个问题已经解决。% }5 ^# \% s; T' h
[问题1] 、PDM生成的PDF图纸中OLE引用(由Excel中copy过来的表格)图片、公司LOGO图片模糊。# N& V7 w8 [# O7 ], w" Q
解决方案:在对PDF文件打印时,取消打印界面“作为图像打印”的复选框后再打印就不会存在模糊的问题。/ J" Y- S6 j8 E
1 g2 F( n1 U! t
[问题2]、打印PDF文件时提示“无法找到或创建字体 TimesNewRomanPSMT,XXXXXX”。
1 Y/ ?+ w4 p' Z2 l) |2 d9 {" 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 )

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