QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑
7 X: @( O, ~/ g+ J( |5 Z" ~( @
2 k2 A2 M$ f) F版主及各位朋友:中午好!, g8 e2 P) a9 H' s$ P" e
         ]" m1 s* N0 r! g8 q9 H
        CAD版本:AutoCAD Electrical 2010+ T# Q  D3 t  l' V5 P: B, [$ H4 g

" b; U2 v0 B( N8 q        我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!/ ^+ V" @$ v5 ^7 U
        问题如下:
  Z$ F" `" N0 {  t1 o# S        我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3  打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。
6 b% k, y: ~6 q- {% g
3 g2 f+ i. x" X  |7 _  r. ^& d        上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题
# J! {- M" }! t
. U2 O4 X. A6 I# T$ M. b9 C         后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。  h0 s! P' q) R7 U; L1 \. l
         尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
/ s7 g  O. b7 s% q
4 Q5 o4 V& `( |5 g: r        问题汇总:: ]7 J$ ?0 G: O6 [
        1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?
0 c! L- b6 k: ^1 \0 P0 I        2、 “Adobe PDF” 打印机如何设置字体?+ ]% a' o" C' c
        注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。
  1. '---------------------------------------------------------------------------------------/ z& K* \: k: j6 v  ]9 F- V
  2. ' Procedure : CreatePDF: b4 {% r8 f: g8 o) R& `
  3. ' DateTime  : 2013-11-208 g  N' A( l2 Y( ]
  4. ' Author    : xwang
    7 q/ Z& v5 K0 Y9 [& N) W3 o9 w
  5. ' Purpose   : CAD中DWG图纸导出PDF文件
    ( l  o5 j) l" w( d( O7 L" n
  6. ' param     : acadDoc: AcadDocument
    ' l/ I, V% i) }" ~1 I9 i1 c, i* m
  7. '           : filename:  DWGFile
    9 ]$ p# g+ O  k" T! v8 Q
  8. '           : strPdfFile PdfFile
    / A3 E& C% L( r: N6 N5 I. \  t. r" n
  9. '           : ConfigName: Acade - DWG To PDF.pc3- ^$ p/ A: N* n' u& u# j+ v; |; ]2 F
  10. '---------------------------------------------------------------------------------------  `: n. |/ ?, F" Y* [% Q% l, \
  11. Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer2 {7 w% A% g# ?' X6 a" U" m# [# ~

  12. & G6 k6 i. g7 E- y
  13.     Dim PtConfigs As AcadPlotConfigurations4 q4 e% K: V2 c% H& H4 x; o% p
  14.     Dim PlotConfig As AcadPlotConfiguration2 H! o3 K- Q% b+ p% V
  15.     Dim PtObj As AcadPlot
    ) b) L! Z* _. m$ r/ G, |
  16.     Dim BackPlot As Variant
    * p  y$ f) t3 e4 u
  17.     $ T: l, Q) |8 A( Y% t1 j3 D7 c% Q1 A
  18.     Dim ent As AcadEntity 'Object; A3 x: ?2 H6 H* f
  19.     Dim blockRef As AcadBlockReference
    5 ]. H" G# ^  u, g. e6 ^8 W! v
  20.     6 [; f+ P2 t1 U0 b% j5 z+ t: \
  21. On Error GoTo ErrExit
    8 }- f( v* p; j7 {6 N
  22. 7 A$ N% V& c4 s  ?( \% W" P
  23.     Debug.Print "CreatePDF ------------------------------------------------->"8 o' v5 Q9 @+ f" g" b" _
  24.     Debug.Print "打印机:" & ConfigName% F/ P9 }5 Y  o! _' Y" t9 @
  25.     For Each ent In acadDoc.ModelSpace
    * P6 J/ g; V0 T: s2 a. D
  26.         If TypeOf ent Is AcadBlockReference Then
    8 t8 e2 o+ W; b/ h
  27.             DoEvents
    $ J4 f0 o" i) \+ n# S" _, @8 e
  28.             Set blockRef = ent: E. K' X: s% v' |, K
  29.             If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then$ m2 |- [, {' E- `) Y
  30. 1 \9 R! h1 @1 |2 a, A  `& L4 Q
  31.                 Debug.Print "块名称:" & blockRef.Name
    0 Z. N* n) {1 G* q3 p+ n
  32.                
    $ E4 o2 D" l3 T+ }9 ?" I+ ]$ k( Z
  33.                 '块引用的插入点+ n0 ?) d$ S( T) X; Q- k+ |$ {
  34.                 Dim insertPoint As Variant- G& p9 m( E9 Z; H
  35.                 insertPoint = blockRef.InsertionPoint
    % ?1 f/ D. p9 l) M9 I8 b
  36.                 '放大比例8 g4 r+ N. E3 d% O3 J- D: Y
  37.                 Dim xScale, yScale As Integer
    4 i9 f5 D" k# o
  38.                 xScale = blockRef.XScaleFactor. _7 Q+ G/ J! f6 h- i! _* `: {4 h
  39.                 yScale = blockRef.YScaleFactor& k2 U/ b# t9 d8 |: O
  40.                
    , Z7 m; c* p7 p* s
  41.                 acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
    . }7 @( j) }' }! b* Y
  42.                 Set PtObj = acadDoc.Plot
    : X9 d, p* a8 i/ q( u( I. x/ k' }
  43.                 Set PtConfigs = acadDoc.PlotConfigurations
    # v" a8 V( K- s' O7 m
  44. 4 l3 t( W: Y4 C# r: E8 X( t- g! s
  45.                 PtConfigs.Add "PDF", False
    * x% R9 l1 P; F8 Y; }
  46.                 Set PlotConfig = PtConfigs.Item("PDF")
    , E5 R, N1 X/ T7 ^7 \' A! m
  47.                 PlotConfig.StandardScale = acScaleToFit+ v  p; V1 ]9 F8 M! \4 s" ^) U3 |
  48.                                 8 O6 y4 j/ W' x3 I+ q
  49.                 PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
    # _8 U. z  d+ I: ~
  50.                 'ANSI_A_(8.50_x_11.00_Inches)
    % v+ x$ L1 D) V* ]
  51.                 PlotConfig.RefreshPlotDeviceInfo
    ( `# ^* S* W0 B- a2 j
  52. 2 _5 p" R/ d# L1 B
  53.                 Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet2 m8 E: X, D9 }9 }
  54.                 Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    6 m$ ^% c% p3 [# Y) t* f
  55.                
    / H5 E" b6 A, _0 ~
  56.                 acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式5 I4 p7 ?$ \- y7 u% g8 ~1 H- a
  57. 8 d. e- F' O) v7 V# F- i; g8 N
  58.                 '使用图形文件的线宽
    7 S. ~3 u- _  F
  59.                 PlotConfig.PlotWithLineweights = True2 Q* X1 o% @' \: u
  60.                 '是否启用打印样式
    $ v$ k2 h2 N- p4 d# G# b
  61.                 PlotConfig.PlotWithPlotStyles = True
    6 Q* ~- P' Z: C2 L. X+ Q+ {- B

  62. 1 p; s' x+ Y2 t; ^
  63.                  '宽高基数5 t2 z7 \( h- s* A; \9 H7 H2 T
  64.                 Dim width, height As Double  T, M6 L& x7 Q2 j1 H. H6 i: Y
  65.                 If blockRef.Name = "ACE A3块" Then) L3 S" M8 ?! M3 S, @
  66.                     width = 420& e3 a5 A1 I& q. T3 R" S' o, Z
  67.                     height = 297/ \' Q( l7 {6 X$ u* A! @
  68.                     acadDoc.ActiveLayout.PlotRotation = ac90degrees
    % k  N+ T6 c! g) t2 _" A
  69.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"8 T' c3 _+ g# q0 T% @& a( U
  70.                 ElseIf blockRef.Name = "ACE A4块" Then  S/ M: n+ a7 ~8 u
  71.                     width = 210: |* P* K/ s5 |3 ~! J; ^
  72.                     height = 297
    9 C9 y. a# K: p- M4 {; @& t) d* O
  73.                     acadDoc.ActiveLayout.PlotRotation = ac0degrees
    " P- V; L2 ^$ C; {, _
  74.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"
    # I: g6 h0 L+ E! F0 x5 \. k. ?
  75.                 End If
    3 V4 T2 q9 {3 ~/ Q) @! y+ G
  76.                   
    - R' }; d8 `9 H6 c5 q! ]* Q
  77.                 '打印区域
    4 ]2 S8 H7 s7 Z2 D( h* v
  78.                 Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double
    8 O9 l! V4 ]: B' V
  79.                 LowerLeft(0) = insertPoint(0)% |9 A2 b+ a- z2 Z3 x
  80.                 LowerLeft(1) = insertPoint(1)
    # r5 N  c) W1 N1 D/ G1 {
  81.                 UpperRight(0) = insertPoint(0) + width * xScale: m* W) ?; _6 _# R' s% v
  82.                 UpperRight(1) = insertPoint(1) + height * yScale8 H$ S: D" `7 K4 U4 Q6 s* U2 C
  83.                
    $ d) C! x& \7 }3 [2 M
  84.                 '设置定义要打印的布局范围的坐标
    0 M" R+ ]) l+ N1 l
  85.                 acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight
    , F9 ^( l: g5 F5 R/ \
  86.                 '指定布局或打印配置的类型8 c& \0 N$ N2 e4 u
  87.                 acadDoc.ActiveLayout.PlotType = acExtents1 S, z7 p7 J) {9 G) y3 w
  88.                 % @! k* v3 `  `( C: `2 s2 y) P
  89.                 BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")
      {4 I7 O$ t# c% c" Y
  90.                 acadDoc.SetVariable "BACKGROUNDPLOT", 05 M: k( @3 T! F9 s& K* p- G! o4 k
  91.                 PlotConfig.RefreshPlotDeviceInfo8 G4 Y/ p) }7 J3 m
  92.                 " |) q" Y+ ~* Q$ g# j
  93.                 Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet
    3 D( j9 l0 g$ [. L/ a
  94.                 Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    3 T; Y% ]2 U, ~2 D
  95.                 Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
    # C5 d5 N( m" T* W9 v0 K6 g5 B
  96.                 Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName
    7 J' ]/ X$ e; a- K: ]
  97.                
    ) B$ S- {5 O, X) z0 A. b
  98.                 strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")
    + {" m2 c7 m7 [
  99.                 Debug.Print "输出位置:" & strPdfFile
    1 ^5 b8 P4 U1 ~# M( Z1 u
  100. ' K( t9 q; E' @- A& W' `# N9 o9 O
  101.                 'Now you can use the PlotTofile method
      F! ?9 l% `) Z' _
  102.                 If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then8 w8 k4 F/ t0 w. R# E
  103.                      Debug.Print "PDF Was Created"
    ! m2 x& b* c8 [, Q+ l: X+ Z8 C6 ^
  104.                      Debug.Print "PDF Was Created"! Q' t7 q* L" t4 j0 @- G$ G) t
  105.                 Else, n& w, L4 F  N. C$ P4 w& ~
  106.                      Debug.Print "PDF Creation Unsuccessful!"/ l- R/ h, N" Y- G
  107.                      Debug.Print "PDF Creation Unsuccessful!"0 V$ @( K: H% k: y, u4 ~
  108.                 End If5 M% [! y& W8 D& E" ]
  109.                 PtConfigs.Item("PDF").Delete1 E: N7 x0 P8 Z0 v) ]! P7 s
  110.                 Set PlotConfig = Nothing
    " J" @0 E+ b3 F% t1 k6 C5 J
  111.                 acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot# e! `/ g+ D8 X5 l0 B- o5 \9 v
  112.                
    + c  [; y, J2 {1 M6 k
  113.                 Debug.Print "CreatePDF ok!"7 M% ^- S& O, ^: A5 P
  114.             End If9 H: W3 _- R" {7 A' a  u% `! d: K% G
  115.         End If. j) ]0 b$ B- }* P/ t8 }5 e! O* n
  116.         DoEvents1 c9 [$ z# _4 f; Y0 s% P
  117.     Next ent& w* o2 s% F5 n8 p  p( z7 _- v
  118.     Debug.Print "CreatePDF -------------------------------------------------<"
    + ~6 {+ Z( P  O3 o% q: h
  119.     Exit Function: `, k  z* O- [& i
  120.    
    * ]/ X4 d5 e+ g* T
  121. ErrExit:8 [/ u, h" P9 ]5 c% C) ^
  122.     CreatePDF2 = -1- a3 i- ^( a9 [8 J' s) ]
  123.     Debug.Print "CreatePDF Error:" & Err.Description
    - i. ^8 y6 }! h. `$ ~
  124.     MsgBox "CreatePDF error:" & Err.Description6 p7 W* I' t9 G$ L- X6 U
  125. End Function
复制代码
仅依靠系统字体;不使用文档字体.png
发表于 2015-7-8 20:57:19 | 显示全部楼层 来自: 中国辽宁营口
本帖最后由 woaishuijia 于 2015-7-8 21:13 编辑 1 K9 c5 m* `' V; k) O- r

7 S* h0 i/ ^$ c; J/ ]在"页面设置"对话框的"打印机/绘图仪"框架中的"名称"下拉列表中选择"DWG TO PDF.PC3"打印机
  l! N: d! p( y3 [: z, Q Untitled-1.gif
0 j: X! F, w- y; p& @  p点击"名称"下拉列表框右侧的"特性"按钮,弹出"绘图仪配置编辑器"对话框.
; X; X2 F$ X$ v: j0 @1 T; P: m在"设备和文档设置"选项卡的树形目录中点击"自定义特性",其下方显示"访问自定义对话框"框架.
) @  J8 S! W+ f8 I2 ?2 q! T+ ] Untitled-2.gif
: b% `, D+ @' [; ]. k! q5 m7 b再点击"访问自定义对话框"框架中的"自定义特性"按钮,弹出"DWG TO PDF 特性"对话框1 e- _; P: J9 r, u2 Y4 N% v0 o% i5 H
Untitled-3.gif # [8 h, J: g% d$ z4 {; @9 ^+ a& B
返回到"页面设置"对话框,在"打印机/绘图仪"框架的"名称"下拉列表中选择"ADOBE PDF"打印机
( x- {  p9 l, K" `) ? Untitled-4.gif " f  L; V1 X3 b# i
继续前面的步骤" k6 v: R( `" V1 @- e& v
Untitled-5.gif " y* }0 S: w9 y
Untitled-6.gif
 楼主| 发表于 2015-7-10 22:47:02 | 显示全部楼层 来自: 中国辽宁大连
@woaishuijia 版主5 j' k) D9 x4 o" V' u
非常感谢您的帮助,过程中遇到的2个问题已经解决。
# ~$ u  Y: L$ W, y; O; g( C0 W[问题1] 、PDM生成的PDF图纸中OLE引用(由Excel中copy过来的表格)图片、公司LOGO图片模糊。
, n$ @7 Q/ K9 z/ X! k/ z解决方案:在对PDF文件打印时,取消打印界面“作为图像打印”的复选框后再打印就不会存在模糊的问题。3 K: c* u% Y- Y9 j
! a% S  [& b9 s. H1 q9 G4 a- [9 O% s
[问题2]、打印PDF文件时提示“无法找到或创建字体 TimesNewRomanPSMT,XXXXXX”。
* ^# v/ w: B! u8 f解决方案:原因是由于客户端安装的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 )

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