QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
5天前
查看: 3991|回复: 3
收起左侧

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

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

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

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

x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑 8 m! Q! t1 N6 n0 _8 Y$ f
3 x* G* U# \" o+ ?) t  P7 d" s
版主及各位朋友:中午好!7 }3 H, S8 T6 ]* }
      
0 `+ |9 F( q1 _, x( b        CAD版本:AutoCAD Electrical 2010
3 d/ }; M- C' L. P- `: ^+ p4 m" e8 o. i5 S( H+ p& I, A
        我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!$ j( l. g  A5 Z* {! F8 u
        问题如下:3 F  r2 }# T1 i4 P4 R$ e/ ~
        我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3  打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。. M) M/ h, }) g. e6 j
2 o8 e' W6 d2 J$ n
        上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题
- e$ S! n9 k" G9 I6 G9 @/ r* j
7 V( H8 A+ N* E         后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
" j' }- m3 N# M- B/ ^" i         尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
2 J, H2 {2 I( _
: z7 Z4 s. v# d& g( I, d  X9 X        问题汇总:
8 _7 }; y1 b! O8 _        1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?) M. ~; W( |) w+ w  M: O
        2、 “Adobe PDF” 打印机如何设置字体?8 b) k( ~% o7 ]
        注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。
  1. '---------------------------------------------------------------------------------------
    ; u* c' b! C! g' o
  2. ' Procedure : CreatePDF  \* L9 `4 O( l+ y) Y
  3. ' DateTime  : 2013-11-20) `8 W8 [6 s/ _! @3 [  g
  4. ' Author    : xwang; p" {& X. t; K
  5. ' Purpose   : CAD中DWG图纸导出PDF文件
    % x) j# R7 M. \
  6. ' param     : acadDoc: AcadDocument
    ) `3 q) t9 i5 B* H
  7. '           : filename:  DWGFile( F1 \+ F: A/ S% w0 b/ ?
  8. '           : strPdfFile PdfFile
      y) t. P; a$ ~/ s( J- N- W
  9. '           : ConfigName: Acade - DWG To PDF.pc3, q, L3 Y0 \( e0 Q/ O# o
  10. '---------------------------------------------------------------------------------------
    ; J/ |1 x  A: m1 \. n+ v- x
  11. Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer6 Q1 x. e* |  P5 D; z

  12. 3 @/ o" t  \  _: I8 z# x/ s2 H
  13.     Dim PtConfigs As AcadPlotConfigurations
    , n3 m3 j; w. U: C' G/ a
  14.     Dim PlotConfig As AcadPlotConfiguration
    + Q- P: t( C, o1 [* l- L3 [
  15.     Dim PtObj As AcadPlot7 T; y, e4 H4 T$ j2 x# d
  16.     Dim BackPlot As Variant' y; G) z0 y( v; j
  17.     . e4 J+ C" `% s) ^. ?$ k( ~
  18.     Dim ent As AcadEntity 'Object
    4 j! S) o8 T! D+ q9 |* \
  19.     Dim blockRef As AcadBlockReference
    3 L# m  ^) a9 O/ z
  20.     5 [& y# o4 E3 p9 N2 J
  21. On Error GoTo ErrExit
    + Z* E  ~6 z3 M/ G

  22. 0 y0 q6 V) e- Z9 ~$ t  W2 H; d
  23.     Debug.Print "CreatePDF ------------------------------------------------->"9 k/ p2 k3 g6 Q. h8 r2 k
  24.     Debug.Print "打印机:" & ConfigName
      S. H9 C- m/ O1 y: k3 a" Y% M
  25.     For Each ent In acadDoc.ModelSpace6 e/ V; o; g$ [8 c) T
  26.         If TypeOf ent Is AcadBlockReference Then' P% |* R" _8 J, ]
  27.             DoEvents6 U( p& t5 K: @  {8 P1 H+ G6 Z' l
  28.             Set blockRef = ent
    ) j+ d) x8 f- t/ b
  29.             If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
    ! n) ~7 s$ {. _! A

  30. 2 t5 p( s  `# _  k& C" k
  31.                 Debug.Print "块名称:" & blockRef.Name
    1 w0 r! |# o6 }
  32.                 : ~5 |$ i1 C( T, G, |! J" f
  33.                 '块引用的插入点( e# G4 E& C6 k1 i- s$ R/ l
  34.                 Dim insertPoint As Variant
    8 j) |9 q. M- ?7 X
  35.                 insertPoint = blockRef.InsertionPoint
    2 w' j4 H9 w2 e/ b/ n% P$ ?1 U
  36.                 '放大比例
    . q8 B8 j  f2 L: [. S2 }/ ]( P
  37.                 Dim xScale, yScale As Integer9 g! z/ j4 i$ S- n, O8 \1 p1 m
  38.                 xScale = blockRef.XScaleFactor: u, ?2 K& L7 r- m7 V- |. R
  39.                 yScale = blockRef.YScaleFactor4 V, o, F) c7 @/ P
  40.                
    1 B7 g  k0 k, w+ O# E  ^
  41.                 acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"' r8 w0 ^+ p& b* _
  42.                 Set PtObj = acadDoc.Plot6 q' G2 |- A* L* i% _
  43.                 Set PtConfigs = acadDoc.PlotConfigurations  R$ A) G% H  s% S8 ~1 m  ^

  44. ( L% l6 Q5 s+ \- r
  45.                 PtConfigs.Add "PDF", False
    % R" ]% t+ k9 C+ h9 o
  46.                 Set PlotConfig = PtConfigs.Item("PDF")
    7 P% V' ?4 I$ g: v% }/ r% I
  47.                 PlotConfig.StandardScale = acScaleToFit
    ! h8 y8 N; P2 M. {; R
  48.                                 4 v# M% F! k0 P$ o
  49.                 PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3". q. S1 h6 u% C/ S8 R& M. p
  50.                 'ANSI_A_(8.50_x_11.00_Inches)
    & _; P' }& T+ }0 x5 T
  51.                 PlotConfig.RefreshPlotDeviceInfo
    4 E6 |/ _. e1 ?- v: l2 X2 k0 `
  52. ( ]$ A; j3 G; v0 o  F% ^
  53.                 Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet7 Y: O* P( j' }" p7 V7 ]
  54.                 Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName: g7 @1 W1 H8 `: `
  55.                 + Z* y# }2 e4 K
  56.                 acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式* H0 S9 f$ _' O. i; y

  57. ; b0 N9 S$ P3 e# _! U1 e
  58.                 '使用图形文件的线宽! r. `  a% `$ l" }7 l1 W
  59.                 PlotConfig.PlotWithLineweights = True4 R9 ^. P' G( d) l( B. r& k9 H) {
  60.                 '是否启用打印样式9 `8 E! d% O' W: S& u2 o
  61.                 PlotConfig.PlotWithPlotStyles = True* ^( z* [3 l. {5 e9 E+ g: Z
  62. ; ~# w9 g4 m3 E
  63.                  '宽高基数
    # F4 o: c1 }5 V2 B3 E( Y7 g
  64.                 Dim width, height As Double
    ! k1 U& J2 P: Z. W  d
  65.                 If blockRef.Name = "ACE A3块" Then
    7 A3 W1 c6 k: D% c# S! U
  66.                     width = 420, d. m5 L: j/ @! Y
  67.                     height = 297" o5 n6 U9 C" i& c# S
  68.                     acadDoc.ActiveLayout.PlotRotation = ac90degrees
    # V* \9 |1 P- [( X  o
  69.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"
    . E8 Z% B1 @6 ]1 Y4 B
  70.                 ElseIf blockRef.Name = "ACE A4块" Then
    + Y6 n$ K7 O3 ^# a1 h8 h$ V: o
  71.                     width = 210
    * n7 z3 J+ W) h$ j/ r
  72.                     height = 297
    6 f% S7 G0 w$ y
  73.                     acadDoc.ActiveLayout.PlotRotation = ac0degrees
    8 B# m% Y, h9 `5 s# S- m  o
  74.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"
    8 R0 X9 F2 ]4 ?* y) a
  75.                 End If
    5 |5 d5 d1 W" x
  76.                   
    ) `0 X# C, B2 G! j* j
  77.                 '打印区域- b, @+ i. w" d
  78.                 Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double0 O- Z* _- ?: e( G; c
  79.                 LowerLeft(0) = insertPoint(0)
      ^* a( W- h" B6 V; C7 C
  80.                 LowerLeft(1) = insertPoint(1)1 y; _8 r0 S- u* ^- g  {9 K
  81.                 UpperRight(0) = insertPoint(0) + width * xScale3 e; D$ O$ b1 n2 E) m. R: }
  82.                 UpperRight(1) = insertPoint(1) + height * yScale
    ) d% ?+ Q: t. }/ m# i. ~( N
  83.                
    9 i" Z! M2 {( H; [# a; x
  84.                 '设置定义要打印的布局范围的坐标
    ! s4 v# @" X" Y/ C5 F9 g$ _
  85.                 acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight
    5 P0 l- A. a$ C' x
  86.                 '指定布局或打印配置的类型
    ( V8 Y/ K& s! t9 R
  87.                 acadDoc.ActiveLayout.PlotType = acExtents
    7 t% e  h& `5 p
  88.                 / K. T0 e. w5 c3 ~- \
  89.                 BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")
    2 F; ]. r# R! y5 j
  90.                 acadDoc.SetVariable "BACKGROUNDPLOT", 0
    5 |" h; Z' l+ h6 q* Y* ^6 f
  91.                 PlotConfig.RefreshPlotDeviceInfo
    3 B- Q/ V- z* F( d+ X
  92.                 ( \( N$ k( \; M- p' W* E4 T
  93.                 Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet
    0 Z! N  z) d* x$ C  E
  94.                 Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName" k0 i2 c/ Y3 M' R8 k5 d" D
  95.                 Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
    9 |" u4 r$ E" m6 U- F  X$ Z
  96.                 Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName8 x7 v0 R5 O1 F3 w! J( V# G
  97.                 9 `0 W, i. V$ O& A$ c0 c( h* m: [0 g
  98.                 strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")
    ' Z) C5 l9 j$ O( J+ H! J
  99.                 Debug.Print "输出位置:" & strPdfFile  c8 u' `0 H' I' P  b" N- W3 h# c
  100. ) x) N4 T7 ]6 m  ?1 `2 v
  101.                 'Now you can use the PlotTofile method1 z6 k& }% a7 d" u' Z
  102.                 If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then: @% A, G# a1 U" s# A" U& _1 g/ `
  103.                      Debug.Print "PDF Was Created"5 S9 }! b0 O  ]$ X
  104.                      Debug.Print "PDF Was Created"5 ^+ V5 y3 J) H8 q8 p0 B5 I) a; ~
  105.                 Else9 ]/ ]# Y$ m: I) F5 Q% s3 h; C' t' Y
  106.                      Debug.Print "PDF Creation Unsuccessful!". t' F/ B4 k0 l9 b2 a
  107.                      Debug.Print "PDF Creation Unsuccessful!"
    ! Y0 Z2 A) o7 ~
  108.                 End If
      W. a! d) P/ G& r1 j
  109.                 PtConfigs.Item("PDF").Delete, U- X8 _1 H' W: p
  110.                 Set PlotConfig = Nothing
    : A; J( B( }: C5 P
  111.                 acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot: o  `4 b4 o: m5 W6 D
  112.                 2 z2 s9 h. j- x+ I
  113.                 Debug.Print "CreatePDF ok!"1 d) V" j2 q- d
  114.             End If
      P' A% B2 b" L: i! g3 r( y' {; p
  115.         End If
    ! O' }' u9 D7 P/ u" ]% N" x0 h
  116.         DoEvents
    0 \0 t' l6 Y: w% v- i
  117.     Next ent* ]. u! {2 Q5 C
  118.     Debug.Print "CreatePDF -------------------------------------------------<"
    2 t3 C. d+ ]8 }5 v: K% w
  119.     Exit Function; h  e' L+ M, ?6 T- k9 y- [: b( w9 X
  120.    
    ( i% U  i2 L) l3 D) J! S
  121. ErrExit:7 k6 T; D* G! V# e/ `
  122.     CreatePDF2 = -1
    4 @, ^( x4 y$ L  B6 ^
  123.     Debug.Print "CreatePDF Error:" & Err.Description
    4 Z3 e& c5 @/ G
  124.     MsgBox "CreatePDF error:" & Err.Description
    % R9 |9 q) R3 ?
  125. End Function
复制代码
仅依靠系统字体;不使用文档字体.png
发表于 2015-7-8 20:57:19 | 显示全部楼层 来自: 中国辽宁营口
本帖最后由 woaishuijia 于 2015-7-8 21:13 编辑
/ p( l& L" ]" P* l2 c+ a$ N) c' {& I
在"页面设置"对话框的"打印机/绘图仪"框架中的"名称"下拉列表中选择"DWG TO PDF.PC3"打印机% Q* i& {# i3 M! r+ c
Untitled-1.gif 9 e5 R' G& ?4 u
点击"名称"下拉列表框右侧的"特性"按钮,弹出"绘图仪配置编辑器"对话框.# t  x2 A6 H9 k, A5 q! e( @7 x3 N
在"设备和文档设置"选项卡的树形目录中点击"自定义特性",其下方显示"访问自定义对话框"框架.
+ P& c% U. L1 N- s Untitled-2.gif
0 J3 M+ `. G) `9 r' W; F' K0 a再点击"访问自定义对话框"框架中的"自定义特性"按钮,弹出"DWG TO PDF 特性"对话框
4 Z: C( X" Q; y Untitled-3.gif
! T0 G, D9 j" {. M* `: w0 H返回到"页面设置"对话框,在"打印机/绘图仪"框架的"名称"下拉列表中选择"ADOBE PDF"打印机) v$ \1 F$ d+ q: ]' O! s
Untitled-4.gif
% B4 o: T. A' ]7 n# t. U继续前面的步骤
- R% ~; X. F( t Untitled-5.gif
$ h0 C# T. s0 c7 r6 N Untitled-6.gif
 楼主| 发表于 2015-7-10 22:47:02 | 显示全部楼层 来自: 中国辽宁大连
@woaishuijia 版主
2 s) f" x$ k- N$ J* B. Y) C非常感谢您的帮助,过程中遇到的2个问题已经解决。1 A' ?5 \# N! H0 n# o
[问题1] 、PDM生成的PDF图纸中OLE引用(由Excel中copy过来的表格)图片、公司LOGO图片模糊。
) s0 g) U9 l( G+ g6 [4 u* s! S解决方案:在对PDF文件打印时,取消打印界面“作为图像打印”的复选框后再打印就不会存在模糊的问题。, n4 T$ `) v/ |! @
# f  Z5 F& D1 T: s! J! e
[问题2]、打印PDF文件时提示“无法找到或创建字体 TimesNewRomanPSMT,XXXXXX”。 . w" i5 w3 ]$ P
解决方案:原因是由于客户端安装的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 )

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