QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑 ' N& w# Z5 v% W; n- v& V. F
# v! l. h! h( g: N
版主及各位朋友:中午好!. x7 z* i) T9 V! j& Q. w- t
       $ {! u9 v% ~2 D' N5 u1 |
        CAD版本:AutoCAD Electrical 2010+ b# L1 d5 B% V8 y- ~. R

4 U0 m+ I% D4 F6 f$ w        我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!
. E3 M! l0 E2 f5 J% B' d% w        问题如下:
& N6 l5 u. @+ {: {        我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3  打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。
) H% a+ l- e& C: R0 I, e, G
9 |8 |! g! I6 o* n        上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题
; H9 o; E0 U7 L" j5 s
5 q0 |5 a' ]5 g1 H         后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
  K7 r, T1 C5 s9 V         尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
; _+ ]8 s& Q  J4 W: g+ H
$ V2 v5 j* s9 z0 _+ w! b% ^4 n        问题汇总:) ?8 V! l9 k! {! K
        1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?: d$ v: L/ V- y6 [4 c
        2、 “Adobe PDF” 打印机如何设置字体?
. J3 B: L1 N3 C* W2 V        注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。
  1. '---------------------------------------------------------------------------------------3 w" s( T/ o9 @5 D7 Z" N1 e, T
  2. ' Procedure : CreatePDF
    2 f; `8 R5 ]5 v+ K8 G, r
  3. ' DateTime  : 2013-11-202 W4 @' E, s& z
  4. ' Author    : xwang
    7 J( n! H7 a0 S* H# c) x% u
  5. ' Purpose   : CAD中DWG图纸导出PDF文件
    . t2 v+ |, b8 w! L6 Z
  6. ' param     : acadDoc: AcadDocument8 V% r. D3 D4 l# V9 |3 p) W5 k
  7. '           : filename:  DWGFile
    : P+ T9 f+ g9 a  S+ C) }* F% ^# ?
  8. '           : strPdfFile PdfFile
    . Q4 b( z! x2 c5 G$ I' N7 w
  9. '           : ConfigName: Acade - DWG To PDF.pc32 w8 Q1 ~8 s0 v3 b+ b
  10. '---------------------------------------------------------------------------------------+ t3 B5 L5 ]: t" |2 R
  11. Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer
    8 v( R7 Y4 A/ b+ x
  12. + ?- e2 L. a9 r3 z. H
  13.     Dim PtConfigs As AcadPlotConfigurations4 E7 B$ J7 m* v7 K
  14.     Dim PlotConfig As AcadPlotConfiguration
      t* ]4 _' @7 I; X) K5 }; n
  15.     Dim PtObj As AcadPlot
    " Z5 }. J4 P) z% b4 n
  16.     Dim BackPlot As Variant4 T6 y+ A( V, V) U
  17.    
    - P) E7 O- N  |3 L- I' a* E: m8 L
  18.     Dim ent As AcadEntity 'Object
    ! a4 k. S8 V8 Z, `$ F% y% L8 r
  19.     Dim blockRef As AcadBlockReference
    + B$ e" d" ]  b4 ?; u/ Q
  20.    
    1 [/ \  [: _! v( S" k- w6 B) ]2 X
  21. On Error GoTo ErrExit
    , U: Z  c0 p- D5 Y: X2 |5 n

  22. / }" j( o5 i- v: R- X
  23.     Debug.Print "CreatePDF ------------------------------------------------->"( M0 Q1 ?  p" w# a, p; @
  24.     Debug.Print "打印机:" & ConfigName
    $ H, S) M& i- \: z
  25.     For Each ent In acadDoc.ModelSpace
    5 k, ~( N9 T5 {  k6 O9 ?/ e
  26.         If TypeOf ent Is AcadBlockReference Then
    , V1 U/ X" V) n8 y9 N* |
  27.             DoEvents
    # ^; V& N! T6 I2 q' b+ l' V
  28.             Set blockRef = ent5 ?1 \4 @6 c( D
  29.             If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
    ) t5 D7 Z5 p0 s9 z. i8 X* u7 C
  30. 7 b# c* H2 [$ M: O: K) i
  31.                 Debug.Print "块名称:" & blockRef.Name
    , r4 k& N* O- ]+ D3 X( T1 q
  32.                
    & A) Z% m( E- r
  33.                 '块引用的插入点6 n3 h* G. z  Q$ a( x
  34.                 Dim insertPoint As Variant
    2 e5 \4 e- w( g
  35.                 insertPoint = blockRef.InsertionPoint% e) G1 D  `. S) r+ v9 d
  36.                 '放大比例
    . F- N6 ~3 `- ]5 Z, H* d2 \
  37.                 Dim xScale, yScale As Integer0 Y. `8 n* B, l" u
  38.                 xScale = blockRef.XScaleFactor3 c6 c+ J9 b# d3 ?
  39.                 yScale = blockRef.YScaleFactor0 K" [% d; C0 C& c
  40.                 4 \8 Z0 P- j5 l" |6 f
  41.                 acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"$ Y( x2 w1 p7 M, G$ a
  42.                 Set PtObj = acadDoc.Plot
    9 B# a2 K# M  \2 H, B. \
  43.                 Set PtConfigs = acadDoc.PlotConfigurations
    9 [7 y; I! y8 v* N4 W+ m
  44. 0 L( I6 W  z) j6 Z, E
  45.                 PtConfigs.Add "PDF", False
    : R6 a5 m6 S: t4 T+ \0 Q
  46.                 Set PlotConfig = PtConfigs.Item("PDF"). s9 E" \* D' g6 w, ]
  47.                 PlotConfig.StandardScale = acScaleToFit
    $ j  [. s+ c/ {7 g
  48.                                 2 V' |0 p, _3 H8 h
  49.                 PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"' _3 u0 l( i+ I8 a5 ?: E4 L
  50.                 'ANSI_A_(8.50_x_11.00_Inches)% S% H9 P* t* O5 r! X
  51.                 PlotConfig.RefreshPlotDeviceInfo3 m$ j2 d, s! Y. W1 |
  52. 0 ?2 Z  J/ I9 u! i
  53.                 Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet& c5 C5 J- y5 b" _" p
  54.                 Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName# ~9 i% C7 P/ `# k6 A0 [. n
  55.                
    6 u8 q7 J* _& b2 v6 k2 x
  56.                 acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式1 c+ ~4 H$ H3 B+ Z0 Q/ ]( t. T

  57. # |; p4 {6 i5 j4 |9 U: l
  58.                 '使用图形文件的线宽
    5 y# w& i: k% d& Q
  59.                 PlotConfig.PlotWithLineweights = True
    - l. \  a4 V/ X+ |
  60.                 '是否启用打印样式3 w. O4 k* O+ E2 ~) k+ ]) l6 [
  61.                 PlotConfig.PlotWithPlotStyles = True8 a& t8 K7 Y8 n

  62.   n% c5 K6 U" @# _5 j% i+ V7 t$ d
  63.                  '宽高基数9 `, M  q$ x  C' [
  64.                 Dim width, height As Double
    - w3 ~/ k3 a3 F7 `
  65.                 If blockRef.Name = "ACE A3块" Then% X4 A% h! b6 b7 i7 Y, x2 u, n! [
  66.                     width = 420# V# ?0 E1 L9 ?9 B/ [
  67.                     height = 297$ B8 I8 r( T( K3 {" t( m" d: }
  68.                     acadDoc.ActiveLayout.PlotRotation = ac90degrees
    0 _) q3 s7 p) y6 W
  69.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"0 ?( v% u$ v- B2 ]
  70.                 ElseIf blockRef.Name = "ACE A4块" Then3 M8 Z) P$ G" P  U3 X4 ~
  71.                     width = 210- v0 g& o: F5 f" Z; C  b4 j( P
  72.                     height = 297
    % l( `( K- f9 V+ B) n- m  @  X" M! n
  73.                     acadDoc.ActiveLayout.PlotRotation = ac0degrees
    / Y+ |2 t" m5 a/ Z
  74.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"" C- }& @( M0 k2 X& e) x  B( `
  75.                 End If
    / ^) K! R0 k' r6 e# Q
  76.                   
    1 B7 G% y5 V. B6 f) \# w
  77.                 '打印区域
    % }' M* @  W8 `
  78.                 Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double
    5 {+ u% i0 z; f* Q' g
  79.                 LowerLeft(0) = insertPoint(0)% C( D2 o' D1 R" D7 E2 p9 {9 g% t+ J
  80.                 LowerLeft(1) = insertPoint(1)  N% t0 }0 q9 N; _/ a
  81.                 UpperRight(0) = insertPoint(0) + width * xScale
    $ K( F( N* K, u1 D( {% s& p. w
  82.                 UpperRight(1) = insertPoint(1) + height * yScale
    " M+ X/ r9 E* i
  83.                
    * l- _6 Q" z4 F6 {" ]: }/ Z  k
  84.                 '设置定义要打印的布局范围的坐标
    : }, |2 h3 M9 f7 Y
  85.                 acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight* D( B. h8 `8 o3 b
  86.                 '指定布局或打印配置的类型
    / F0 V8 U" g& F( K- @3 M
  87.                 acadDoc.ActiveLayout.PlotType = acExtents
    5 e7 N! f- J* X! _& Q) ?  F
  88.                 5 l' F, L& l0 S" L& Y2 X
  89.                 BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")
    : \- C+ x  Y7 H: v
  90.                 acadDoc.SetVariable "BACKGROUNDPLOT", 0
    $ V& ~& r" w4 P( M
  91.                 PlotConfig.RefreshPlotDeviceInfo
    6 v  S* a! `. i3 `; [
  92.                 3 K$ w* a! _* x7 L2 `7 G
  93.                 Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet: n6 B4 J# T$ W
  94.                 Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    , Q) w; o3 |5 n0 |
  95.                 Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation$ @$ Q* }4 ^: f* H* y  f( m; q( `
  96.                 Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName' o, I* R+ K; ]6 h( E( `
  97.                 , s: ?; N, q  Y) Y. ~' B" w$ X" ^
  98.                 strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")
    9 T  s2 K. n$ |  d0 ^7 L% A. w! k
  99.                 Debug.Print "输出位置:" & strPdfFile3 a1 y3 D' p& u2 M% c

  100. 3 f# @, J" u5 i5 d" i: r# V$ m
  101.                 'Now you can use the PlotTofile method
    ; [, u/ C" c2 f5 q
  102.                 If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then
    , V+ [/ w- P8 ]+ s- M9 M2 P
  103.                      Debug.Print "PDF Was Created"
    3 G6 \4 R% g) X' z. S
  104.                      Debug.Print "PDF Was Created"- W4 }5 @* Q, H0 E: ^
  105.                 Else2 @3 U" s  v1 T7 M
  106.                      Debug.Print "PDF Creation Unsuccessful!"
    : |. G- R3 k( U& U
  107.                      Debug.Print "PDF Creation Unsuccessful!"
    / U8 ?4 w% ]2 }, b4 E
  108.                 End If% r% \/ ^8 X+ H+ z8 |9 I' `9 u1 G
  109.                 PtConfigs.Item("PDF").Delete
    ) M7 f+ O+ y$ a$ P2 m( H
  110.                 Set PlotConfig = Nothing) }. ^  z. s) J
  111.                 acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot+ S! ^: l, P* t1 p# e* s# |& c3 S9 \
  112.                 : m# F$ @7 j# q2 g% W
  113.                 Debug.Print "CreatePDF ok!"
    # r  Y7 u  X3 i1 X7 Z
  114.             End If2 ]% z$ `$ e' U; S0 A
  115.         End If; c$ t; r' Y* \$ q6 v
  116.         DoEvents
    ; _: g" N6 q- s
  117.     Next ent4 G# J9 `; h! ~; N1 p5 p
  118.     Debug.Print "CreatePDF -------------------------------------------------<"7 c5 E0 V6 F5 A( V! R: k  A1 Y5 @7 `
  119.     Exit Function3 [9 \* J* H) w4 e$ l4 Q- L
  120.    
    * D0 H3 }" ^4 W) L- ^. @) z- \9 H
  121. ErrExit:4 ?: C' W) z" T8 Z4 H
  122.     CreatePDF2 = -1
    ) t2 w$ ?6 h+ L* e4 g# P+ b
  123.     Debug.Print "CreatePDF Error:" & Err.Description0 C  J; ?1 d- b2 ~7 v% g
  124.     MsgBox "CreatePDF error:" & Err.Description
    ' A% S/ E. t- S& f
  125. End Function
复制代码
仅依靠系统字体;不使用文档字体.png
发表于 2015-7-8 20:57:19 | 显示全部楼层 来自: 中国辽宁营口
本帖最后由 woaishuijia 于 2015-7-8 21:13 编辑
" E; y: w; A/ ^& r2 ^2 \! n* ?
& D0 y% ~. N8 m4 `1 ~0 i在"页面设置"对话框的"打印机/绘图仪"框架中的"名称"下拉列表中选择"DWG TO PDF.PC3"打印机
$ u% c" c. O$ u/ L: K2 g1 F Untitled-1.gif 7 \5 l. M! y4 M$ l+ m+ ^
点击"名称"下拉列表框右侧的"特性"按钮,弹出"绘图仪配置编辑器"对话框., o# t/ J) E- e' {3 w
在"设备和文档设置"选项卡的树形目录中点击"自定义特性",其下方显示"访问自定义对话框"框架.
! }& W  E$ r/ h) Z# W5 {1 c Untitled-2.gif
* G5 e& I5 g- V+ u4 U5 ~6 }# b再点击"访问自定义对话框"框架中的"自定义特性"按钮,弹出"DWG TO PDF 特性"对话框
5 j' D; f& v5 r4 Q$ U; a- G" h" W Untitled-3.gif 0 X  f3 o7 {- v1 g7 ~/ j$ j
返回到"页面设置"对话框,在"打印机/绘图仪"框架的"名称"下拉列表中选择"ADOBE PDF"打印机
+ `% X3 d, B# M$ D* x% s Untitled-4.gif / z* ?& N. B) z1 H& F3 }$ @" s
继续前面的步骤* r* T! G5 n/ ~; p% k8 k
Untitled-5.gif " X  f! f3 g% }6 q7 X
Untitled-6.gif
 楼主| 发表于 2015-7-10 22:47:02 | 显示全部楼层 来自: 中国辽宁大连
@woaishuijia 版主/ Q; g6 [) j4 h0 Q; e! g
非常感谢您的帮助,过程中遇到的2个问题已经解决。
! W: J: j- [7 b' D" m& i# z[问题1] 、PDM生成的PDF图纸中OLE引用(由Excel中copy过来的表格)图片、公司LOGO图片模糊。
8 }6 ?7 F& }6 v, d6 |; r  c) H3 M解决方案:在对PDF文件打印时,取消打印界面“作为图像打印”的复选框后再打印就不会存在模糊的问题。
% i2 K, Y7 `) v% G! ]# Z6 d6 q# |8 V! }) [. a: e
[问题2]、打印PDF文件时提示“无法找到或创建字体 TimesNewRomanPSMT,XXXXXX”。
( d2 }+ J. J5 F- T解决方案:原因是由于客户端安装的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 )

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