QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
6天前
查看: 3993|回复: 3
收起左侧

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

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

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

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

x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑 - @4 {# |3 c; j) c
0 z! p7 P' x& u& Z- \  I! _1 G. I* U
版主及各位朋友:中午好!, N1 K  W: T& G. S* C3 c; S* D7 H: w
       " o6 i) L. v0 U- p
        CAD版本:AutoCAD Electrical 2010, c" K' W7 B- M% u! S) b: r

6 G  d. F5 m/ h5 Q5 _        我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!
) P+ j- B/ k3 X8 U        问题如下:
2 d2 g) F) I& c) k; k        我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3  打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。
0 I& V1 R3 r. ?, p& j* v0 z# O* e; [. Y5 w2 B
        上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题
: M. i8 A8 D" p0 k) f" ]: M  S: ^: p% z. j! }: r/ J+ ~1 Z) j
         后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。7 [' d$ P9 ?$ \% F: K+ V6 q! o
         尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)6 E. \1 m' H$ K% V! p+ i
" k) z* q+ C- H! U+ I% Y% g) a
        问题汇总:4 ?: |$ E0 V$ M! T0 D
        1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?
0 j7 _  [' o  I1 X# `5 v: m1 x        2、 “Adobe PDF” 打印机如何设置字体?
# K( v+ `5 \& I        注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。
  1. '---------------------------------------------------------------------------------------  D8 V( S) @- S& E6 [  I; b" p
  2. ' Procedure : CreatePDF
    2 p! l' y, ]  c. `5 o- a: o% t4 [
  3. ' DateTime  : 2013-11-20+ i1 x" o4 P& Y; O# u
  4. ' Author    : xwang% H* |+ P0 w. _% e* k
  5. ' Purpose   : CAD中DWG图纸导出PDF文件- i# ~5 Y4 q& v, t5 v
  6. ' param     : acadDoc: AcadDocument
      N* F- ?# R' d8 ]. S2 B
  7. '           : filename:  DWGFile
    # E! d3 k# |  \; D+ \' l6 w
  8. '           : strPdfFile PdfFile
    ( I# `7 U. c! I
  9. '           : ConfigName: Acade - DWG To PDF.pc3
    ' t/ W& |8 _" _- k; e- ]
  10. '---------------------------------------------------------------------------------------
    - {+ a1 y5 o+ ^5 z
  11. Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer! J0 q. n, L& I' L$ E

  12. & r- J  |$ ~6 G& @; Y
  13.     Dim PtConfigs As AcadPlotConfigurations3 V$ _; Z4 U# q5 B5 {' ~
  14.     Dim PlotConfig As AcadPlotConfiguration! X, j% x! [7 M5 x5 Q7 c: n% h9 ^
  15.     Dim PtObj As AcadPlot: Z0 @  e. D) [9 P- f
  16.     Dim BackPlot As Variant
    $ I% a& D: A# c
  17.    
    ) l% B  E: Q0 z9 B! e4 M' D
  18.     Dim ent As AcadEntity 'Object/ V8 c$ e7 m  n' q
  19.     Dim blockRef As AcadBlockReference
    5 e4 |' ?+ U1 m% I  c, q
  20.     + E$ X6 L& W- @  j' z" X6 R4 @+ u
  21. On Error GoTo ErrExit
    8 l, z. D* G: S, b# x( s

  22. * c6 s2 G5 H0 O4 e3 l$ T- x
  23.     Debug.Print "CreatePDF ------------------------------------------------->"
    * y$ h0 w3 v+ a: R" m) P& M
  24.     Debug.Print "打印机:" & ConfigName/ r* v% P1 R' N3 K" q" @
  25.     For Each ent In acadDoc.ModelSpace! S8 S- _3 d; F
  26.         If TypeOf ent Is AcadBlockReference Then9 N; Y5 `! @# E
  27.             DoEvents
    ' w. V/ Z3 V4 ~; f$ C
  28.             Set blockRef = ent/ X! x8 W% ~2 r8 w  ~
  29.             If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
    ( J0 y9 ]( b, C& C- F6 k: {1 i

  30. & h6 a+ X( z; K% x$ d- T1 M
  31.                 Debug.Print "块名称:" & blockRef.Name
    & [; F, @0 z; b  J1 W
  32.                
    : E1 J% u" F, {, F3 H2 z
  33.                 '块引用的插入点
    ! Y% I$ `7 I. m3 A' M( f
  34.                 Dim insertPoint As Variant
    2 k! C% Q: w( _" Z1 {7 P3 P
  35.                 insertPoint = blockRef.InsertionPoint
    8 j9 N" T  }/ l0 _. ^$ I# a, y
  36.                 '放大比例. r3 Z  H" g" k# s8 h
  37.                 Dim xScale, yScale As Integer
    0 F/ J7 t% S! g6 |5 O' [) L
  38.                 xScale = blockRef.XScaleFactor% Y& r3 V8 m7 }. _6 |3 U
  39.                 yScale = blockRef.YScaleFactor
    1 C" r! w  ?  d- i
  40.                 & I; S# @/ P, r
  41.                 acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"% d& Z3 j1 M* u& Z. @, h9 z! F7 j
  42.                 Set PtObj = acadDoc.Plot9 h4 p4 m" T( M+ m. Z
  43.                 Set PtConfigs = acadDoc.PlotConfigurations
    ( |0 S4 B" d7 |
  44. 9 M/ \) S/ V+ @  G0 t7 q# _
  45.                 PtConfigs.Add "PDF", False
    9 w, F9 K8 j$ J3 @" r- l1 e7 j! ^
  46.                 Set PlotConfig = PtConfigs.Item("PDF")! {& u: M2 I; S( |6 y3 [1 U7 i/ V, Q
  47.                 PlotConfig.StandardScale = acScaleToFit3 J$ ]( N) J2 s8 b) B' r
  48.                                 4 Y! u  ?% @) e* Q$ s& W1 J
  49.                 PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"6 }* ?% W8 W5 l4 S/ d8 a; m0 S
  50.                 'ANSI_A_(8.50_x_11.00_Inches)
    ! B. ]& B' H, y0 z
  51.                 PlotConfig.RefreshPlotDeviceInfo
    1 ^6 V, v; \5 C, g6 ~. P

  52. 1 p9 ?" F; c7 U/ e$ z. a$ N
  53.                 Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet, x4 s  g7 K9 \: a
  54.                 Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName1 b/ j2 v0 N" c: P! F! k/ ~& E
  55.                 , |3 p2 [) o) Q$ O1 l) y
  56.                 acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式) B3 }+ s1 Q9 V, S
  57. , t  ]! Q& L- i! h8 }
  58.                 '使用图形文件的线宽
    " {! l$ r4 C( s0 B& U
  59.                 PlotConfig.PlotWithLineweights = True
    & \0 m6 i: g1 b. C4 k
  60.                 '是否启用打印样式
    6 Q0 [  {# e7 z/ }$ N; `9 q' h* c
  61.                 PlotConfig.PlotWithPlotStyles = True% y2 g! d" k, _# o% H! ^3 X  g
  62. % a7 ^+ \/ ^3 L2 Z
  63.                  '宽高基数/ I8 N- S/ y  w& m; a
  64.                 Dim width, height As Double
    . m% p4 b0 z9 _9 b
  65.                 If blockRef.Name = "ACE A3块" Then
    7 g. t1 f# H2 i/ x; J0 v5 o: ~; S
  66.                     width = 4206 c& u2 J: C, x4 _+ i* Q
  67.                     height = 297
    # {% H9 |3 C7 r5 Q4 R8 Q) V  i) i: w
  68.                     acadDoc.ActiveLayout.PlotRotation = ac90degrees
    : X% p6 L4 |" C2 q+ s
  69.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"  k6 y/ z; d& a. a& g3 w- M) u
  70.                 ElseIf blockRef.Name = "ACE A4块" Then
    ! O/ F2 x7 O9 N6 \1 z
  71.                     width = 210
    & ]. t) d: N+ _9 ~1 Y7 k: y
  72.                     height = 297/ m8 T( K+ s5 M6 e
  73.                     acadDoc.ActiveLayout.PlotRotation = ac0degrees0 b( u, f1 |5 R+ w
  74.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"
    3 K4 f& N  j* \
  75.                 End If
    ! ?& {" g  }& Q
  76.                    3 C. n* h5 \: O4 n2 h$ C9 ?. l
  77.                 '打印区域
    3 A3 i' |1 s. J0 v- f$ o' g+ d
  78.                 Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double0 r, g9 |0 Q+ V1 g' B
  79.                 LowerLeft(0) = insertPoint(0)) a* o3 @: p7 K: v! M* `+ |/ l
  80.                 LowerLeft(1) = insertPoint(1)0 C/ [/ g+ U* @8 W) W# h( ~
  81.                 UpperRight(0) = insertPoint(0) + width * xScale
    " y: m2 }8 i8 g8 T9 _
  82.                 UpperRight(1) = insertPoint(1) + height * yScale+ S4 q% r9 J4 b# q/ \  N6 A( x
  83.                
    9 s1 x9 o; g& _
  84.                 '设置定义要打印的布局范围的坐标9 }& n2 I/ ~" G4 ?/ k; ~/ J( b, @
  85.                 acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight- ~" y# O' h5 Z
  86.                 '指定布局或打印配置的类型
    : _) O- C- P" I1 `7 P
  87.                 acadDoc.ActiveLayout.PlotType = acExtents& h# [- T( w& d- ]" s
  88.                 , _4 W& V$ L0 `9 t: s, X# N
  89.                 BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")7 Y/ [, M7 B3 R- l& f
  90.                 acadDoc.SetVariable "BACKGROUNDPLOT", 0
    - g. l  i  |) D; I8 R7 v
  91.                 PlotConfig.RefreshPlotDeviceInfo9 F* |# {8 G+ l; y
  92.                 " q: r8 x' \. v7 x& S: h4 L2 I% N) P
  93.                 Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet
    * r$ {9 l$ `; j" o
  94.                 Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    , u5 X8 }4 g7 X( L  I
  95.                 Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
    + ?+ F% w8 ]+ I! I
  96.                 Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName3 x& m$ i7 l$ P. u, S
  97.                 " L7 d! s8 @8 \$ ]5 J$ n/ O$ Z
  98.                 strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf"), T2 J( e0 r) g8 D# H8 j0 e( `
  99.                 Debug.Print "输出位置:" & strPdfFile2 T3 c6 |0 X; k7 |5 M& e; @6 T
  100. & c2 V) O+ i  z0 U5 b% n% h
  101.                 'Now you can use the PlotTofile method- H2 i5 J" i7 _5 E$ ^% H
  102.                 If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then1 u: X" ?; g0 S  A
  103.                      Debug.Print "PDF Was Created"
    ( \$ L' e6 X0 T+ z- R( J& X
  104.                      Debug.Print "PDF Was Created"
    ! E2 R& _+ E- i, H8 m4 L
  105.                 Else8 e& w( {% v4 G/ e4 I! i5 A
  106.                      Debug.Print "PDF Creation Unsuccessful!"
    8 s. M# i' E. l7 X$ |1 w
  107.                      Debug.Print "PDF Creation Unsuccessful!"" q. r- v' }& I3 `3 {2 Y6 q+ b* r; y
  108.                 End If0 r  D. U4 s* f
  109.                 PtConfigs.Item("PDF").Delete0 L7 D1 X0 U4 }% o. X% _( |
  110.                 Set PlotConfig = Nothing; l0 @7 b% W, ?9 E$ F2 c
  111.                 acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot" t8 n- @( V2 Z& _$ B6 K6 l
  112.                
    . V/ v6 L4 |# \, s6 i6 y  R. Y
  113.                 Debug.Print "CreatePDF ok!": v' _" O( m6 n/ G9 j: v$ p
  114.             End If6 h3 `+ `: y' f4 H  C8 B+ u
  115.         End If4 I8 v1 b4 R% F, A5 |8 E/ o& {6 O$ n
  116.         DoEvents
    * [) g; Y+ ?8 O+ H
  117.     Next ent
    7 D2 h" \4 O  W/ ^& ^( j* L
  118.     Debug.Print "CreatePDF -------------------------------------------------<"6 o" e/ \" P+ ~3 n- c* g
  119.     Exit Function
    , X: g0 `1 ~& W2 t
  120.     # ]5 r6 o+ `% Q! i
  121. ErrExit:
    * w/ f- w) S5 Y4 X8 X
  122.     CreatePDF2 = -1. ]5 G% r: x% ^: l& k* i8 S# p
  123.     Debug.Print "CreatePDF Error:" & Err.Description
    9 n5 r' M8 g# h- ?) U% r8 u6 U/ E
  124.     MsgBox "CreatePDF error:" & Err.Description% x# n# S# G' a3 b; ]6 g
  125. End Function
复制代码
仅依靠系统字体;不使用文档字体.png
发表于 2015-7-8 20:57:19 | 显示全部楼层 来自: 中国辽宁营口
本帖最后由 woaishuijia 于 2015-7-8 21:13 编辑
: B, k! r3 D* }' _; |
- F* U! j+ r0 x% P2 }) p1 A& b3 @在"页面设置"对话框的"打印机/绘图仪"框架中的"名称"下拉列表中选择"DWG TO PDF.PC3"打印机
! C4 @$ P) O# A, T9 Z Untitled-1.gif
; I8 `3 @- }) M) y& n3 D  g点击"名称"下拉列表框右侧的"特性"按钮,弹出"绘图仪配置编辑器"对话框.% K( G0 y" M4 y7 Q3 q
在"设备和文档设置"选项卡的树形目录中点击"自定义特性",其下方显示"访问自定义对话框"框架.8 E' x; V% n, q9 C% X
Untitled-2.gif
' a3 x' {$ J' g) j$ u* u再点击"访问自定义对话框"框架中的"自定义特性"按钮,弹出"DWG TO PDF 特性"对话框
) E# E3 Z# G" l1 E8 D9 o Untitled-3.gif
% W" m; v( N5 H+ ?; V0 z返回到"页面设置"对话框,在"打印机/绘图仪"框架的"名称"下拉列表中选择"ADOBE PDF"打印机
% _! i' e/ W- X+ c Untitled-4.gif 3 F* e, L  I- R& Q
继续前面的步骤: [8 o" ^- n7 l5 b1 \9 I
Untitled-5.gif
% U# P+ Y! n1 A Untitled-6.gif
 楼主| 发表于 2015-7-10 22:47:02 | 显示全部楼层 来自: 中国辽宁大连
@woaishuijia 版主
7 H: G- r/ S0 x3 |# O$ r% f1 W8 Y非常感谢您的帮助,过程中遇到的2个问题已经解决。
6 V  h5 C, X9 E[问题1] 、PDM生成的PDF图纸中OLE引用(由Excel中copy过来的表格)图片、公司LOGO图片模糊。" E: a/ ~/ b4 X5 c
解决方案:在对PDF文件打印时,取消打印界面“作为图像打印”的复选框后再打印就不会存在模糊的问题。. Y, [, I3 Y- N0 h
8 p6 V* T8 I* x  f0 A' e( I, A3 a. O
[问题2]、打印PDF文件时提示“无法找到或创建字体 TimesNewRomanPSMT,XXXXXX”。 3 B# I3 m$ T% u& b5 ~
解决方案:原因是由于客户端安装的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 )

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