QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑
3 J) M1 A( |5 W: f  S7 b2 A) S5 r
' U1 W7 W. N0 k版主及各位朋友:中午好!- N0 i+ `9 ~# }/ }8 ?7 o
      
4 t% {# M7 X- I% G+ L2 o        CAD版本:AutoCAD Electrical 20105 U% t5 {: @" |: k+ F. L2 n. J5 A6 ]

: n, ^3 G! m9 f4 D2 @# n7 d        我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!$ P: v4 ]; b/ }+ |8 J1 I- f1 i
        问题如下:
& O3 m7 o5 K! |  f) Z        我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3  打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。
' j; Z, N6 S% @. z. R9 G* S: Y1 \; j0 S8 J" M6 f
        上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题
& ]5 ~- ^, Z/ {8 u5 U- k, B$ p* l8 E6 W! k4 @) U' }3 ?) F( @3 g
         后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
. L' I  x6 \: S4 u" T( ]         尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
- X( C: j' S; o) l4 J1 Z) @, \4 `: S% I# U# I
        问题汇总:
! w7 ]$ d% T5 ?1 r& j        1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?' W3 B6 Z: B5 M$ L5 }# C
        2、 “Adobe PDF” 打印机如何设置字体?
) N5 h1 }, _2 Q# r5 M. _0 M! \9 A        注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。
  1. '---------------------------------------------------------------------------------------4 O6 }3 w9 R) W, t% ~2 |
  2. ' Procedure : CreatePDF+ C( F3 W: A( W2 G/ m+ |
  3. ' DateTime  : 2013-11-20* B. @6 v- r: w
  4. ' Author    : xwang( g0 e0 A" u4 S( G) p) d
  5. ' Purpose   : CAD中DWG图纸导出PDF文件' ^, U: {  J2 j0 J. i& |
  6. ' param     : acadDoc: AcadDocument3 z0 D8 S9 x& f& Q( u8 p% s
  7. '           : filename:  DWGFile
    . N* O# ]! t) O0 }( X# u1 a
  8. '           : strPdfFile PdfFile; N* Q4 S. ?3 I% \0 x
  9. '           : ConfigName: Acade - DWG To PDF.pc3
    ( q. m7 A: [6 f- r! F0 D
  10. '---------------------------------------------------------------------------------------% W' E" q" M& o- E) [. J$ P
  11. Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer" K) d0 [3 r' ]1 `5 f! o5 w
  12. 4 O1 [! ?  y/ N% }, c4 y# E
  13.     Dim PtConfigs As AcadPlotConfigurations: Q, ~* h' `$ v; {# _( z7 N
  14.     Dim PlotConfig As AcadPlotConfiguration
    3 r% ^9 J1 o$ X: `) t8 C8 @1 u
  15.     Dim PtObj As AcadPlot
    ! h' R" Z, r2 J. z
  16.     Dim BackPlot As Variant3 H, ]9 n( s0 g5 q
  17.    
    ( Z$ ~" Q# ~7 v9 b& q$ S
  18.     Dim ent As AcadEntity 'Object
    - l8 a; q) n% T; [* D
  19.     Dim blockRef As AcadBlockReference) c! U# W( R; [4 t/ Q3 O
  20.    
      |% R& N% q4 S3 Y4 @9 ?4 Q
  21. On Error GoTo ErrExit
    4 M4 C( }' _( c- h

  22. 6 o  b& f' P  Q
  23.     Debug.Print "CreatePDF ------------------------------------------------->"
    3 m) |! H/ q  o6 w
  24.     Debug.Print "打印机:" & ConfigName
    1 ?$ d+ n# N/ w) W# D5 A- H
  25.     For Each ent In acadDoc.ModelSpace
    + E' q% c2 _- |& @9 B% b
  26.         If TypeOf ent Is AcadBlockReference Then
    5 s8 D6 L$ y1 A4 u0 H  t
  27.             DoEvents
    ) C/ l) A# G9 E0 F" j% [
  28.             Set blockRef = ent: u- T  K# K2 @- r8 E" m
  29.             If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
    * r, _, u2 y, e) A

  30. . `0 e7 ~  e6 F$ A/ I! t
  31.                 Debug.Print "块名称:" & blockRef.Name% K8 \, f8 C+ U' p
  32.                   {1 @% y6 f2 z8 F+ Z
  33.                 '块引用的插入点- U* c- X' R. h, D/ [( c
  34.                 Dim insertPoint As Variant
    3 [" _( E( g: Z& X
  35.                 insertPoint = blockRef.InsertionPoint5 C1 K9 F& F3 Z4 `/ z  X
  36.                 '放大比例
    * k" `! L( b; r8 ?
  37.                 Dim xScale, yScale As Integer
    2 F( `4 v! }$ ?+ _- q
  38.                 xScale = blockRef.XScaleFactor
    ' k1 R; {1 u# j) p; n
  39.                 yScale = blockRef.YScaleFactor' u  z# V. @0 b, q' a
  40.                 ; Z( t- O& y; I; j$ z* X
  41.                 acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"; _. E, s- n/ e+ _
  42.                 Set PtObj = acadDoc.Plot
    & p6 f, J4 m% M6 K
  43.                 Set PtConfigs = acadDoc.PlotConfigurations) N. }* E/ b' R5 K6 x# x+ }
  44. 8 C- r& X" M4 j! J. n) W! J
  45.                 PtConfigs.Add "PDF", False
    : Z; g5 w) L. Z
  46.                 Set PlotConfig = PtConfigs.Item("PDF")- i$ K* {( Q' m0 {  |$ m
  47.                 PlotConfig.StandardScale = acScaleToFit) a0 {, E8 E1 q: U
  48.                                 & M+ M& T2 j# v# A8 I2 X& c
  49.                 PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"2 n( `' q( k8 k- }/ z- X, x
  50.                 'ANSI_A_(8.50_x_11.00_Inches)* i) t: M$ M) n$ T4 H/ \) o
  51.                 PlotConfig.RefreshPlotDeviceInfo
    5 g$ ?, q* U- Y( X/ r0 F- j# E
  52. - P) b6 N9 ^4 @' T+ I6 _
  53.                 Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet% m" Q' @7 `8 w( x) x$ u
  54.                 Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName2 N4 S" b6 l! E7 n- n' ]$ ~
  55.                 - ?2 C. a# P% `6 t- P
  56.                 acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式4 F( C6 X9 G0 _- j3 n8 q6 i

  57. 0 C* W5 X; |8 Z
  58.                 '使用图形文件的线宽+ w- D  P( q2 L+ F" X+ m
  59.                 PlotConfig.PlotWithLineweights = True* O6 v% j( _% h: g* G6 o9 [9 N
  60.                 '是否启用打印样式9 i4 j+ ?3 q. p( f2 [5 l" k/ l
  61.                 PlotConfig.PlotWithPlotStyles = True2 S+ W5 C* @$ k& P) g9 f

  62. * B0 G7 v' p  b  |4 t
  63.                  '宽高基数
    ( n- s9 o5 m8 t! z- X( g) J' p$ I
  64.                 Dim width, height As Double
    % ]6 J3 k# W6 |* ^$ ]" L
  65.                 If blockRef.Name = "ACE A3块" Then
    $ J; B" B8 [# k% j! }* H4 ?
  66.                     width = 420# E! c9 g0 N3 [" m' c
  67.                     height = 297+ N* D! \, \. V2 D/ m9 D' x2 U
  68.                     acadDoc.ActiveLayout.PlotRotation = ac90degrees1 T9 g! E- {8 L
  69.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"9 s  x9 l2 x6 {) c
  70.                 ElseIf blockRef.Name = "ACE A4块" Then
    5 S. i9 D3 {" |  w& B4 Y
  71.                     width = 210
    , w- v* y2 e5 }! D
  72.                     height = 297: Q! P" g; v: P
  73.                     acadDoc.ActiveLayout.PlotRotation = ac0degrees
    7 H* D0 e3 f. B* H
  74.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"  X  q& O  p0 b. Y2 h) }- U3 Z
  75.                 End If  e+ I4 A8 M& T# f
  76.                    : {; r- ]0 ^8 r) K5 F% F
  77.                 '打印区域
    ' v! ]# x5 n! ^# m* \, \; r  Q% D. x
  78.                 Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double
    ) `1 |' ^8 N) t
  79.                 LowerLeft(0) = insertPoint(0)6 v) b! D4 Z) d! g% R# Q
  80.                 LowerLeft(1) = insertPoint(1)( Q+ h4 M, h# \9 M5 }
  81.                 UpperRight(0) = insertPoint(0) + width * xScale
    ; U# o/ }) t1 Q: @( y# _: U
  82.                 UpperRight(1) = insertPoint(1) + height * yScale
    7 b3 G0 J: ^7 n
  83.                 ' Z3 Q0 V+ o" \& i7 G- c
  84.                 '设置定义要打印的布局范围的坐标/ f; j* i3 U1 `) c
  85.                 acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight, q' W2 G- R. d; y( }
  86.                 '指定布局或打印配置的类型% ]8 X3 `! R8 S
  87.                 acadDoc.ActiveLayout.PlotType = acExtents
    - [$ K8 P7 w. A* I1 ^. Q$ Z2 @% S0 k
  88.                
    6 N  @! }+ {5 z  f! o  S
  89.                 BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")
    6 o) X' v7 P2 z
  90.                 acadDoc.SetVariable "BACKGROUNDPLOT", 0& p) O$ v) k4 ^
  91.                 PlotConfig.RefreshPlotDeviceInfo
      x& t) r+ i5 W% h, z0 W
  92.                 % d( z% u. I# `! M) A
  93.                 Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet
    & T* X( t% N, ~4 ?: H
  94.                 Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    : y2 Q: C* c/ o. L" j8 I% G
  95.                 Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation* l( \+ g8 ~, }0 s( C- k
  96.                 Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName! y- [( B, @+ F- m& v6 `( v
  97.                 ( w+ ?' Y$ Z9 c! P* h
  98.                 strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")1 U: @. R4 }% Q- R8 \6 `5 W
  99.                 Debug.Print "输出位置:" & strPdfFile/ z  S' F7 y. G6 w% [

  100. - M% t; l" _# s- k3 M* [
  101.                 'Now you can use the PlotTofile method
    0 o& s" X/ w* ]+ A! m0 ?3 i3 A6 y
  102.                 If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then
    5 m8 a5 o# y; n$ J% F+ r
  103.                      Debug.Print "PDF Was Created"
    " g+ b) ~4 ~" \/ A! Z0 \
  104.                      Debug.Print "PDF Was Created"* }- j  H& f+ ^  C2 g
  105.                 Else
    3 U* x* [  L3 z& ~0 `8 k
  106.                      Debug.Print "PDF Creation Unsuccessful!"
    - P! t: f! g: S/ {- E" c
  107.                      Debug.Print "PDF Creation Unsuccessful!"* d: C+ u: M- Y7 _
  108.                 End If
    ! w# G0 d3 w/ m
  109.                 PtConfigs.Item("PDF").Delete/ \3 T5 r( y, w6 ~( Z
  110.                 Set PlotConfig = Nothing. K$ A/ t) A$ h) ?* q- D: Q" s" [6 r8 n
  111.                 acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot7 C* _9 a* L9 x% Q$ T6 W
  112.                 : G3 w8 e: z$ P7 B3 C" e7 K
  113.                 Debug.Print "CreatePDF ok!"% P) h$ Z  S: n% S/ C
  114.             End If
    5 Z2 e" z. `7 t! Z; i& Z/ _5 W7 F7 @8 h
  115.         End If8 C8 _2 V4 l3 h, R+ x0 b5 R( U
  116.         DoEvents; @0 C- Z! j$ H5 X3 [+ k1 }
  117.     Next ent
    8 w# r! I# H& S. w/ |7 z8 Z2 Y8 D
  118.     Debug.Print "CreatePDF -------------------------------------------------<"7 X( ^) Z( s0 T. O6 }
  119.     Exit Function
    & [8 t( E# Q8 ~) C9 h! Y
  120.     ; h) O$ t; S  Y! v+ j2 Z
  121. ErrExit:
    6 N8 q( i' q, _; `, o1 {% C. L
  122.     CreatePDF2 = -1
    ) l! @8 M* g7 k- R+ l% Z
  123.     Debug.Print "CreatePDF Error:" & Err.Description
    4 L6 @- V* l2 F# r/ C& d1 R
  124.     MsgBox "CreatePDF error:" & Err.Description
    : ?; g& B- }( C( n
  125. End Function
复制代码
仅依靠系统字体;不使用文档字体.png
发表于 2015-7-8 20:57:19 | 显示全部楼层 来自: 中国辽宁营口
本帖最后由 woaishuijia 于 2015-7-8 21:13 编辑
" J( W6 N, i* t0 ?- u1 d
1 W" j& r; k5 u& c, p) r6 ?' z8 q在"页面设置"对话框的"打印机/绘图仪"框架中的"名称"下拉列表中选择"DWG TO PDF.PC3"打印机
, {) b  b; X" q Untitled-1.gif ! a; W( {5 c% }  e! L, i
点击"名称"下拉列表框右侧的"特性"按钮,弹出"绘图仪配置编辑器"对话框.
8 V, }& k# }% d在"设备和文档设置"选项卡的树形目录中点击"自定义特性",其下方显示"访问自定义对话框"框架.
1 d$ |+ u- ]& w7 V* M! d Untitled-2.gif ( Y5 B+ ~' F& D  h
再点击"访问自定义对话框"框架中的"自定义特性"按钮,弹出"DWG TO PDF 特性"对话框
( w7 x6 X$ i: ?5 _7 v/ j  L Untitled-3.gif
- M1 x4 X( j) q- y返回到"页面设置"对话框,在"打印机/绘图仪"框架的"名称"下拉列表中选择"ADOBE PDF"打印机4 Q* M$ Q0 J) C, g& Z, H5 L
Untitled-4.gif ; i4 X/ n, r4 k1 H* Q2 S
继续前面的步骤) ^" p% {1 M3 T' {
Untitled-5.gif / C; W, F, j; t; Q( n- l
Untitled-6.gif
 楼主| 发表于 2015-7-10 22:47:02 | 显示全部楼层 来自: 中国辽宁大连
@woaishuijia 版主
. t; Z3 g- ?4 v非常感谢您的帮助,过程中遇到的2个问题已经解决。/ g2 i: H0 {. q! m# ?
[问题1] 、PDM生成的PDF图纸中OLE引用(由Excel中copy过来的表格)图片、公司LOGO图片模糊。) ~' a. w" V; W- ]5 u  s
解决方案:在对PDF文件打印时,取消打印界面“作为图像打印”的复选框后再打印就不会存在模糊的问题。
2 T3 X. C/ A  j& y/ l6 ^0 T7 a4 D% r* S7 n' H7 u, [
[问题2]、打印PDF文件时提示“无法找到或创建字体 TimesNewRomanPSMT,XXXXXX”。
$ T# o, E; t# p6 j8 ~+ ^解决方案:原因是由于客户端安装的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 )

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