QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑 9 n; Z7 T3 k. W2 Y

9 x3 o  l* b. I/ W7 s, }版主及各位朋友:中午好!2 c3 Z( T+ K9 U) M" Z, g
      
/ [/ P% l# o# f7 }* y6 c        CAD版本:AutoCAD Electrical 2010
. B- c; i+ y) q, C. s, Z/ U: N" @; g- |, ~5 T; k6 |
        我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!
- J( b: ~. a4 R6 b        问题如下:
) A- \- B& c! \2 l/ F# V; D" \        我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3  打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。3 \5 A8 m  y# |

1 c4 b5 ^3 j6 g$ X) b) [5 w8 s+ I0 j        上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题: S8 |0 Z# Q( `# l! n) m
' ?- w# F$ ]/ @) a4 r
         后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
" E. H5 d* ], d$ z; Y: n* ?0 e         尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
, j9 G2 R5 S$ V" C
$ I" g( O( K9 ?. I8 B8 j  t) O        问题汇总:
7 P  V8 ^/ w+ G: J. @% B0 z        1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?/ r, T; {! w5 G6 I# r8 ?, O1 o
        2、 “Adobe PDF” 打印机如何设置字体?+ u( e$ s$ g4 K
        注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。
  1. '---------------------------------------------------------------------------------------3 I/ E6 G# D5 D
  2. ' Procedure : CreatePDF
    ' r% P5 `9 \& o; L, J
  3. ' DateTime  : 2013-11-20, G8 B$ x* Y  d4 {, P( {
  4. ' Author    : xwang' v6 M/ W7 x5 W* i5 o2 w3 a
  5. ' Purpose   : CAD中DWG图纸导出PDF文件
    1 {% n( [. i7 a% y' v* Z' Q
  6. ' param     : acadDoc: AcadDocument
    4 v/ h( D- w7 z
  7. '           : filename:  DWGFile( Y- e+ {; p& T  R7 J! N, L
  8. '           : strPdfFile PdfFile9 O4 z, \5 c. k/ S
  9. '           : ConfigName: Acade - DWG To PDF.pc3
    7 ^# A8 f1 g( d' I. [/ R9 v
  10. '---------------------------------------------------------------------------------------: r# [" L' C8 K; y" y
  11. Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer
    $ h7 F3 H; E% k3 X4 O, F6 s
  12.   U* P6 {4 g1 B. Z5 B- S  s4 p. m
  13.     Dim PtConfigs As AcadPlotConfigurations
    7 x4 q. }8 g, ~$ T; L
  14.     Dim PlotConfig As AcadPlotConfiguration
    0 a* j7 z$ b" h
  15.     Dim PtObj As AcadPlot
    + p3 E, V: f- R* |, M$ ~
  16.     Dim BackPlot As Variant
    ) U" ]5 L; ?/ K  N( X
  17.     ( T& B" S" A9 n* C- X6 f4 G  j4 t
  18.     Dim ent As AcadEntity 'Object/ t* }& q# Z# u/ D3 G) ~0 r5 @7 f
  19.     Dim blockRef As AcadBlockReference1 ]/ a8 G3 q2 L6 H7 k4 S  ]
  20.     & U& \4 A- u% @" P
  21. On Error GoTo ErrExit" z1 v, m+ o0 W+ {

  22. . Q2 ]0 f, }: z9 a4 S
  23.     Debug.Print "CreatePDF ------------------------------------------------->"
    ) n/ f% N+ X7 b" ^  ]; [
  24.     Debug.Print "打印机:" & ConfigName
    - A2 F7 ?1 a' d$ N' B, ^/ f
  25.     For Each ent In acadDoc.ModelSpace& Y7 q& ~4 y# g% Z" g
  26.         If TypeOf ent Is AcadBlockReference Then4 c- O& a" s" H0 i3 M8 i& `( \% [
  27.             DoEvents: c9 [, w9 t9 _* z+ P! j  l& E
  28.             Set blockRef = ent& C- e  M: k) T0 f+ j
  29.             If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then' N- ?1 u  v6 S/ f

  30. 3 H$ ?- M, n1 ]; }0 H4 h- _
  31.                 Debug.Print "块名称:" & blockRef.Name2 d4 o3 \" s- M
  32.                 ! {+ i, }$ z2 G2 q6 O
  33.                 '块引用的插入点
    * w) z0 V9 I) d9 {1 b1 p  k
  34.                 Dim insertPoint As Variant) l, M9 V: h1 q. `
  35.                 insertPoint = blockRef.InsertionPoint2 w9 M3 B2 M  {+ b, S
  36.                 '放大比例
    2 C0 o4 {8 o* w* E- G$ M5 R' ^
  37.                 Dim xScale, yScale As Integer$ o. E4 s  y* Z1 a  I1 ^. O
  38.                 xScale = blockRef.XScaleFactor
    , W7 I( W* L" e4 ^8 ]$ U( ^5 K
  39.                 yScale = blockRef.YScaleFactor( s: }- d: f  W' E1 S- l) p
  40.                 : f; _% j0 X: t1 S% C8 I
  41.                 acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
    . H# [, o5 r# `% g. @3 `
  42.                 Set PtObj = acadDoc.Plot
    : t* l  z% @+ H" Q: q" H, ]
  43.                 Set PtConfigs = acadDoc.PlotConfigurations
    ' U9 W- T' l! b& G7 G

  44. 7 L! h- D6 M' L# O" Z) |
  45.                 PtConfigs.Add "PDF", False; P/ Y1 e5 F2 ?9 X- m
  46.                 Set PlotConfig = PtConfigs.Item("PDF")
    # q# |) @1 E5 O: ~: a, F
  47.                 PlotConfig.StandardScale = acScaleToFit
    . f2 ^  z, I4 _$ X% c
  48.                                 
    & g0 B& c# h! A/ ^" q
  49.                 PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
    : i9 w! w6 c0 S
  50.                 'ANSI_A_(8.50_x_11.00_Inches)9 J+ i+ D, z# Z: J! d% {; f3 ^$ H  t
  51.                 PlotConfig.RefreshPlotDeviceInfo9 E; J: n: w6 m( [" J

  52. $ e; c2 l% ?* B& x2 |; B2 q( T
  53.                 Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet
    , p1 D9 B& z  {6 Q+ o/ E" Z: W  ]( B
  54.                 Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName# e8 n3 `) C4 B/ k, M7 ]+ c
  55.                
    % e* L$ _. O: _0 {
  56.                 acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式+ H, s3 R8 s% P/ q" H
  57. 5 a& F- I7 R2 i' n; @! P: m( n
  58.                 '使用图形文件的线宽
    : H0 U! j7 _' f! |  I+ E! ?8 i
  59.                 PlotConfig.PlotWithLineweights = True
    & n$ n  [' }+ q% b2 [5 B
  60.                 '是否启用打印样式$ b5 R2 W7 c% y% ~
  61.                 PlotConfig.PlotWithPlotStyles = True
    / H2 a6 E" _$ z4 G& H" z$ q
  62. / a4 e$ q! w( P& N7 o: S
  63.                  '宽高基数
    + T8 _3 d( l, |; x/ x2 L
  64.                 Dim width, height As Double
    ) @- I! s6 k! H1 V1 C% S4 c7 d% v' z
  65.                 If blockRef.Name = "ACE A3块" Then
    9 Z7 [+ i9 m5 D7 y
  66.                     width = 4201 w9 z7 K) E0 O
  67.                     height = 2979 Y3 }4 R1 E: h) Y) d' y
  68.                     acadDoc.ActiveLayout.PlotRotation = ac90degrees* I' \3 V5 K. c) s
  69.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"
    1 y4 ], {* G, M4 `3 J
  70.                 ElseIf blockRef.Name = "ACE A4块" Then
    2 g2 ^; _3 O3 }8 I* e
  71.                     width = 210$ M6 s7 a6 o% J
  72.                     height = 297
    6 {; C9 y; Y- p% w
  73.                     acadDoc.ActiveLayout.PlotRotation = ac0degrees) h. \! h& f  o# X" t+ [
  74.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"3 i" e) z+ _( J9 r$ y7 G
  75.                 End If! i: t; m' L* Z: v
  76.                   
    + o+ _, T/ T5 p2 v0 L' I
  77.                 '打印区域
    7 U! o6 t3 b! g3 j* i4 s
  78.                 Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double
    , a* ]+ i$ Q9 g& j- ~
  79.                 LowerLeft(0) = insertPoint(0). k4 n5 t7 F. Q8 }, ]
  80.                 LowerLeft(1) = insertPoint(1)5 M. c; H, F5 H* Y
  81.                 UpperRight(0) = insertPoint(0) + width * xScale* G( _; X  y7 L  J
  82.                 UpperRight(1) = insertPoint(1) + height * yScale3 j5 q/ H4 n* S& Z5 }3 C
  83.                
    $ A' I1 {! W3 x" B3 b
  84.                 '设置定义要打印的布局范围的坐标
    - |9 r1 j! e$ c, p) @2 Y& z
  85.                 acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight
    / p* @2 T& n8 J
  86.                 '指定布局或打印配置的类型
    7 l& O2 ]# i# @. m# f! U
  87.                 acadDoc.ActiveLayout.PlotType = acExtents
    - W: U( `9 m1 A; G
  88.                
    7 u; ~; F' L/ N% f4 {; w
  89.                 BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")
    % m, d+ s; W7 p6 h) l
  90.                 acadDoc.SetVariable "BACKGROUNDPLOT", 0/ W( z! w& Y# I5 e* x
  91.                 PlotConfig.RefreshPlotDeviceInfo8 y& _" s  [$ Z' o) e2 o- U
  92.                
    / l% n5 f& F  {- i, @; ^3 j0 M
  93.                 Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet
    4 _! n+ ?) T" V4 D" h2 S7 v1 G0 V
  94.                 Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    5 y- p1 g! h% T0 Y" ]0 \  y4 l
  95.                 Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
    ! N/ F& z! u: d. t5 c6 X; n  G
  96.                 Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName
    # I8 I% D, x; s: q& X1 Z
  97.                 2 w# q& |+ ]& y6 o2 T- T* r
  98.                 strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")6 t0 w. ~8 Y: l& M5 L0 D
  99.                 Debug.Print "输出位置:" & strPdfFile3 m- M8 D6 d6 D$ S
  100. 5 f- M) k  d4 f! e, X! I$ c
  101.                 'Now you can use the PlotTofile method% v5 O' [1 N, l, e. E3 c- c" {2 Q
  102.                 If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then
    9 p* l5 c" e* o0 L
  103.                      Debug.Print "PDF Was Created"' B: Y  s: `% r0 c" ^) x, {
  104.                      Debug.Print "PDF Was Created"7 C  x' }; O2 T& j2 Q; c$ K
  105.                 Else
    8 l8 j8 M. c0 X
  106.                      Debug.Print "PDF Creation Unsuccessful!"
    9 B! b7 j9 h1 o7 n
  107.                      Debug.Print "PDF Creation Unsuccessful!"% ~) w' {% A: ?8 D) \% x, `
  108.                 End If
    5 ~  c, n# F7 F; Y$ O+ `' w) J
  109.                 PtConfigs.Item("PDF").Delete
    ' q  O( [" A0 n" ~% c
  110.                 Set PlotConfig = Nothing
      N( H3 l8 n) J! X
  111.                 acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot' T9 i1 M9 I; w' M
  112.                 ' W) P& l. m! m& _
  113.                 Debug.Print "CreatePDF ok!"
    ; C3 S! x+ o2 b! H" v9 Y+ X! m
  114.             End If
    9 g1 T2 l! w2 p* |# Z- H
  115.         End If2 X9 }1 T$ v: C+ T+ @& R7 T
  116.         DoEvents
    ' w  B4 r4 O( g  v& z- h8 R
  117.     Next ent5 }- |, E4 o' L5 E+ \
  118.     Debug.Print "CreatePDF -------------------------------------------------<"
    + f0 D9 I) \5 q1 K
  119.     Exit Function2 h; H- k) v6 s8 a
  120.     8 X  @6 x3 q8 d$ q' H! [. @: R; Q
  121. ErrExit:
    3 O: Q8 ]! S3 u/ [7 D/ C
  122.     CreatePDF2 = -14 `  m$ b* Z5 {% G0 e/ o0 X; N. P
  123.     Debug.Print "CreatePDF Error:" & Err.Description; D! v$ G; Y9 z9 V5 i8 D
  124.     MsgBox "CreatePDF error:" & Err.Description
    " O6 |. T& U+ [  r3 Y
  125. End Function
复制代码
仅依靠系统字体;不使用文档字体.png
发表于 2015-7-8 20:57:19 | 显示全部楼层 来自: 中国辽宁营口
本帖最后由 woaishuijia 于 2015-7-8 21:13 编辑 ! g$ `3 U2 t* s8 j2 ~. f

1 r2 |) u' d* f3 q在"页面设置"对话框的"打印机/绘图仪"框架中的"名称"下拉列表中选择"DWG TO PDF.PC3"打印机0 r0 A* D$ j2 B, Q3 L  g6 Q9 z  m
Untitled-1.gif 3 a1 M# \% g/ h5 L& k
点击"名称"下拉列表框右侧的"特性"按钮,弹出"绘图仪配置编辑器"对话框.( F8 h7 A. M& T) Q
在"设备和文档设置"选项卡的树形目录中点击"自定义特性",其下方显示"访问自定义对话框"框架.
/ C# t# L, `" `, U3 x- x8 K0 a Untitled-2.gif
# c8 J- w4 `: y再点击"访问自定义对话框"框架中的"自定义特性"按钮,弹出"DWG TO PDF 特性"对话框
' P7 `! l" ?: V$ w- G% |* i Untitled-3.gif 4 o3 S8 {0 S+ {( S
返回到"页面设置"对话框,在"打印机/绘图仪"框架的"名称"下拉列表中选择"ADOBE PDF"打印机
6 T8 ]* E: b( v% `% `$ I4 i Untitled-4.gif
; l) l: s6 M" B/ X继续前面的步骤
" t3 A- X) w( t( t1 }8 C1 ]; H Untitled-5.gif
, x5 w4 Y/ _- o' M! u1 w Untitled-6.gif
 楼主| 发表于 2015-7-10 22:47:02 | 显示全部楼层 来自: 中国辽宁大连
@woaishuijia 版主, f( a5 r$ H7 g. M
非常感谢您的帮助,过程中遇到的2个问题已经解决。: }, I' r+ G- |' ?5 G- M
[问题1] 、PDM生成的PDF图纸中OLE引用(由Excel中copy过来的表格)图片、公司LOGO图片模糊。. N8 e2 G3 i0 p6 X+ M, t! m
解决方案:在对PDF文件打印时,取消打印界面“作为图像打印”的复选框后再打印就不会存在模糊的问题。0 y" G4 U# z: C# m8 X" M

- Z* m* R# d) Q+ x1 L- l[问题2]、打印PDF文件时提示“无法找到或创建字体 TimesNewRomanPSMT,XXXXXX”。 4 v3 [% U7 \0 s1 q( @1 u
解决方案:原因是由于客户端安装的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 )

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